New library: open multi-methods
Jean-Louis Leroy via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Tue Jul 18 12:22:38 PDT 2017
On Tuesday, 18 July 2017 at 18:03:30 UTC, jmh530 wrote:
> On Tuesday, 18 July 2017 at 16:57:30 UTC, Ali Çehreli wrote:
>>
>> Perhaps they are all needed but I'm thinking about the need
>> for forward declaration, the need for the underscore prefix,
>> etc.
>>
>
> He might be able to at least get rid of the forward declaration
> (not sure on the underscore).
>
> The way it works now is that a class that inherits from an
> interface is not required in any way to implement the methods.
> Suppose he adds another attribute to an interface such that any
> class that inherits from it is required to have methods defined
> for specific functions.
>
> So for instance, the Matrix example might look something like
>
> @trait
> interface Matrix
> {
> @property int rows() const;
> @property int cols() const;
> @property double at(int i, int j) const;
> @trait void print();
> }
>
> I'm not sure this would work because anything that derives from
> Matrix must implement print. However, if it is possible to use
> the attribute to allow the derived classes to ignore print,
> then it might work. Alternately, if there is a way to process
> the interface and tell the compiler to somehow ignore the
> @trait member functions. I don't know if it'll work, but it's
> an idea.
>
> Anyway, the mixin(registerMethods); could then be adjusted so
> that void print(virtual!Matrix m); is mixed in automatically
> because we now know how to construct it.
There are at least problems with this. Firstly it is intrusive -
something I strive to avoid (although I could be 100% orthogonal
only because I hijack a deprecated pointer in ClassInfo). Also,
some methods may want to treat Matrix as a virtual argument, and
some not.
Look at
https://github.com/jll63/methods.d/blob/master/examples/matrix/source/matrix.d and https://github.com/jll63/methods.d/blob/master/examples/matrix/source/densematrix.d They know nothing about printing. They don't want to. The matrix modules do math, the app does printing.
J-L
More information about the Digitalmars-d-announce
mailing list