DeRailed DSL (was Re: compile-time regex redux)
Thomas Kuehne
thomas-dloop at kuehne.cn
Sat Feb 10 23:56:25 PST 2007
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Andrei Alexandrescu (See Website For Email) schrieb am 2007-02-10:
> Bill Baxter wrote:
>> As for Andrei having Walter's ear. I think Andrei has Walter's ear
>> mostly because Andrei is interested in the same kinds of things that
>> interest Walter. I think everyone can tell by now that Walter pretty
>> much works on solving the problems that interest him. Right now (and
>> pretty much ever since 'static if') the thing that seems to interest him
>> most is metaprogramming. Hopefully some day he'll get back to being
>> interested in reflection. But if he's really got the metaprogramming
>> bug, then that may not be until after he's got D's compile time
>> framework to a point where he feels it's "done". But only Walter knows.
>
> There is a deeper connection between runtime reflection and compile-time
> reflection than it might appear.
>
> In the runtime reflection scenario, the compiler must generate, for each
> user-defined type, an amount of boilerplate code that allows symbolic
> inspection from the outside, and code execution from the outside with,
> say, untyped (or dynamically-typed) arguments.
>
> The key point is that the code is *boilerplate* and as such its
> production can be confined to a code generation task, which would keep
> the compiler simple. The availability of compile-time introspection
> effectively enables implementation of run-time introspection in a library.
>
> For example:
>
> class Widget
> {
> ... data ...
> ... methods ...
> }
>
> mixin Manifest!(Widget);
>
> If compile-time introspection is available, the Manifest template can
> generate full-blown run-time introspection code for Widget, with stubs
> for dynamic invocation, the whole nine yards.
>
> This is nicer than leaving the task to the compiler because it relieves
> the compiler writer from being the bottleneck.
Going the compile-time introspection -> boilerplate way is possible but not
the only solution for runtime reflection. Combining "dmd -L/DETAILEDMAP ...",
Flectioned's Symbols.scanOptlinkMap and existing TypeInfo solves 80% of the
boiler plate issue. The only remaining issue are non-static non-function
aggregate members.
I'm not arguing against powerful compile-time reflection, in fact I love it.
Thomas
-----BEGIN PGP SIGNATURE-----
iD8DBQFFzkanLK5blCcjpWoRAmQyAJ9jjnvuJgoyDzJ19m+6L7CrYRMMqwCfS8Dg
YjrAoiAUaV529PU6uFklVyw=
=QiMc
-----END PGP SIGNATURE-----
More information about the Digitalmars-d
mailing list