New syntax for string mixins
foobar
foo at bar.com
Fri Dec 17 14:08:47 PST 2010
Don Wrote:
> VladD2 wrote:
> > Hi,
> >
> > I'm one of Nemerle developers.
>
> Cool!
>
> >> From an implementation point of view, the differences between Nemerle
> >> macros and string mixins are mostly syntactic.
> >
> > You are deeply mistaken!
> > I'd advise to study the Nemerle macro-system.
> >
> > You missed: pattern matching,
>
> Yes, you've got me there. I've assumed that pattern matching, while a
> major feature, is not fundamental to the Nemerle macro-system, but I may
> be mistaken.
>
> One obvious difference which *is* fundamental is that Nemerle macros
> allow new syntax.
>
> Am I correct in thinking that Nemerle always requires complete ASTs?
> That is, given a name "x", can you access variables "x1", "x2", "x3" ?
>
> > quasi-quotation,
>
> No, that's present in D. It's the primary reason I say that the
> differences are mostly syntactic, since I see this as THE fundamental
> feature. You need to be able to reenter the macro system after you have
> left it. Once you can do that, you can do pretty much anything.
>
> BTW if you argued that D's current syntax is quite horrible, I couldn't
> disagree with you.
>
> > running of fully functional Nemerle
> > code in compile time,
>
> Yes, but that's a different issue. In D, running code at compile time is
> regarded as an aspect of constant-folding, and is not restricted to
> macros.
>
> > access to compiler API in macros
>
> In practice, has to be a library, right? Otherwise the compiler
> internals would be exposed? (This is an issue we're struggling with).
>
> Another one of the big differences is that D doesn't allow compile-time
> code to call external functions. Although it could certainly be done, it
> raises some big issues. Eg, we cannot assume that the target CPU is the
> same as the one we're running on. With a JIT compiler, you don't have
> that problem.
Don, can you please elaborate on this point?
Here's my understanding:
The D compiler is run once to both 'execute' compile time code which you refer above as constant folding AND to generate the binary to execute at run-time.
Nemerle separates this into two distinct steps:
1. you compile regular code inside macro definitions into a compiler plugin.
2. when compiling the intended run-time code you need to load the compiled macros from step 1 above on the command line of the compiler.
Since you're talking above about cross-compilation and let's say we run the compiler on X and compile for Y, I see no problem to load precompiled macros for X in order to compile the code for Y. The only limit as far as I can see is that it won't be possible to load macros compiled by the such a cross compiler on X unless as you say JIT is employed. Perhaps it makes sense to disable macro definition in a cross-compilation scenario and only allow usage.
Is there something else that I'm missing here?
>
> > and IntelliSense support.
>
> I did mention that...
>
> >> The one thing about them that I find really impressive is the IDE
> >> integration, especially that they got syntax highlighting to work.
> >> I don't know they've done that.
> >
> > "syntax highlighting" ? :)
> > We have full IntelliSense support: syntax highlighting, code completion, macro
> > expansion (in tooltips).
>
> I meant Intellisense, not just syntax highlighting. Though note that you
> can't do syntax highlighting *perfectly* unless the IDE understands the
> code.
>
> > We simply use the Nemerle compiler to achive that.
>
> Doesn't leave me any less impressed. <g>
More information about the Digitalmars-d
mailing list