New library: open multi-methods

Jean-Louis Leroy via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Wed Jul 19 05:29:36 PDT 2017


On Tuesday, 18 July 2017 at 18:21:21 UTC, Ali Çehreli wrote:
> On 07/18/2017 11:03 AM, jmh530 wrote:
>
> > 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.
>
> That reminds me: Would the following be possible and better?
>
> // From
> void main()
> {
>   updateMethods();
>   // ...
> }
>
> // To
> mixin(constructMethods());
> void main()
> {
>   // ...
> }
>
> constructMethods() could return the following string:
>
> string constructMethods() {
>   return q{
>     shared static this() { updateMethods(); }
>   };
> }

OK, I think I may have found solutions to both problems. The 
question is, is it too hacky?

1/ method registration

Replace this:

   import openmethods;
   mixin(registerMethods);

...with:

   mixin(import(openmethoddecls));

...that does the two above. Problem is, it needs -Jpath on the 
command line to work. Unless there is a workaround?

2/ updateMethods

During static construction, I could set the dispatch tables to 
make all the methods call a function that does updateMethods() 
then re-dispatches. The cost of the first method call would be 
huge, but if it matters the user can still call updateMethods 
explicitly.

Thoughts?






More information about the Digitalmars-d-announce mailing list