Parallel foreach over AliasSec?

Bastiaan Veelo via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Feb 27 08:04:00 PST 2017


On Monday, 27 February 2017 at 11:53:09 UTC, ag0aep6g wrote:
You can generate wrapper functions that have no overloads:
>
> ----
> static int wrap(alias f)(int arg) { return f(arg); }
> enum addrOf(alias f) = &f;
> enum fptrs = staticMap!(addrOf, staticMap!(wrap, funcs));
> /* ... r and foreach as before ... */
> ----

I'm in awe. <Taking deep bow>

> [...] the template stuff just seems to add complexity.

Yes, but the template is one of my constraints (no pun). It needs 
to happen in there.

This compiles when I apply this to the Pegged source, but 
something else is wrong. I get a bus error some time out in 
execution. Maybe when tasks are garbage collected? Or because of 
missing synchronisation on the array that the tasks write into? 
This is a complicated situation, because the evaluation of these 
functions may themselves cause a parallel foreach on a different 
set of functions (or the same set, for recursive rules). I might 
not be able to solve this, sadly -- a parser that does parallel 
matching would have been so cool.

Anyway I am glad to have seen powers of meta programming that I 
didn't know were possible.

Bastiaan.


More information about the Digitalmars-d-learn mailing list