Thesis on metaprogramming in D
Daniel Keep
daniel.keep+lists at gmail.com
Thu Nov 30 08:35:36 PST 2006
Don Clugston wrote:
> Daniel Keep wrote:
>> > def sr = System.IO.StreamReader ("SomeFile.txt");
>>
>> Immutable run-time variables. You can assign anything to them, and
>> then it can't change. AFAIK, D's const doesn't let you do that.
>
>
> It does, but only for class member variables. There are two 'const's in
> D, one for literal constants, and the other which is once-only assign,
> and should probably be called 'final' instead.
>
> class SomeClass {
> const StreamReader sr;
> this(char [] filename) { sr = System.IO.StreamReader(filename);}
> };
>
The thing that *really* struck me was that when I wrote some stuff in
Nemerle, it was amazing how often I didn't actually need mutable
variables. I wonder what affect having immutables in D would have
optimisation-wise...
> [snip]
>
>> > macro while_macro (cond, body)
>> > syntax ("while", "(", cond, ")", body) {
>> > <[
>> > def loop () {
>> > when ($cond) {
>> > $body;
>> > loop ()
>> > }
>> > }
>> > loop ()
>> > ]>
>> > }
>>
>> Do THAT with templates :3
>
>
> void While(lazy bool cond, void delegate() body) {
> for (; cond; ) body();
> }
>
> <g>
> Or if I can't have for() as a primitive:
>
> void While(lazy bool cond, void delegate() body) {
> loopstart: if(cond) goto done;
> body();
> goto loopstart;
> done:
> }
True, but it's not quite the same. The D version has that outlying
closing paren which is, frankly, really ugly. Also, the D version is
doing a function call, whereas the Nemerle version is actually expanding
an AST.
Of course, these things could probably be solved with a little more work
from the compiler: allowing trailing delegate literals, and inlining
delegate literals. *drool*
>> It would be foolish to think that Nemerle isn't an amazingly powerful
>> language. D is good, and its' templates are very powerful, but
>> they're not THAT powerful.
>>
>> There is always more to learn :)
>
>
> Very true.
> It does seem, though, that Nemerle and D are exploring a quite similar
> 'paradigm space' (so there's probably quite a bit each can learn from
> the other). Yet neither has really caught up with Lisp. Yet.
No language will ever catch up to LISP: the only way to do that would be
to become LISP, and then you have to deal with all those bloody
parentheses :3
-- Daniel
More information about the Digitalmars-d
mailing list