What are AST Macros?
Nick Sabalausky
a at a.a
Tue Jul 13 10:46:51 PDT 2010
"Nick Sabalausky" <a at a.a> wrote in message
news:i1i8o8$1kb1$1 at digitalmars.com...
> "Don" <nospam at nospam.com> wrote in message
> news:i1h6br$2ngl$1 at digitalmars.com...
>> Rainer Deyke wrote:
>>> On 7/13/2010 01:03, Nick Sabalausky wrote:
>>>> "Rainer Deyke" <rainerd at eldwood.com> wrote in message
>>>> news:i1gs16$1oj3$1 at digitalmars.com...
>>>>> The great strength of string mixins is that you can use them to add
>>>>> the
>>>>> AST macros to D. The great weakness of string mixins is that doing so
>>>>> requires a full (and extendable) CTFE D parser, and that no such
>>>>> parser
>>>>> is provided by Phobos.
>>>> Seems to me that would lead to unnecessary decreases in compilation
>>>> performance. Such as superfluous re-parsing. And depending how exactly
>>>> DMD does CTFE, a CTFE D parser could be slower than just simply having
>>>> DMD do the parsing directly.
>>>
>>> True. I tend to ignore compile-time costs. The performance of computers
>>> is increasing exponentially. The length of the average computer program
>>> is more or less stable. Therefore this particular problem will
>>> eventually solve itself.
>>>
>>> Of course, this is just my perspective as a developer who uses a
>>> compiler maybe twenty times a day. If I was writing my own compiler
>>> which was going to be used thousands of times a day by thousands of
>>> different developers, I'd have a different attitude.
>>>
>>>
>>
>> CTFE isn't intrinsically slow. The reason it's so slow in DMD right now
>> is that the treatment of CTFE variables is done in an absurdly
>> inefficient way.
>
> Doesn't it at least have some intrinsic overhead? The best way I can think
> of to do it (in fact, the way Nemerle does it, and I really wish D did
> too) is to actually fully compile the CTFE then dynamiclly link it in and
> run it natively (erm, well, Nemerle is .NET, not native, but you get the
> idea). Even that would seem to have a little bit of overhead compared to
> just running code that's already built-in to the compiler (it has to
> compile a chunk of code, and then link it, both of which take more time
> than just calling an internal function). And if you're not doing it that
> way then you're interpreting, which inherently adds some fetch/dispatch
> processing.
>
> Yea, certainly it could be made to be fairly fast, and the overhead
> doesn't *have* to be big enough to be noticable. But why not just do it
> the *really* fast way right from the start? Especially in a language like
> D that's supposed to have an emphasis on short compile times.
>
Plus, there's the whole duplication of code: D parser in C++, plus a D
parser in D CTFE.
More information about the Digitalmars-d
mailing list