New Macro Syntax Proposal
Dan
murpsoft at hotmail.com
Thu Apr 26 09:20:50 PDT 2007
Accepting that macros are a subset of mixins, and are just syntactic sugar, they should be as sugary as we can get 'em?
Davidl Wrote:
> I hope macro syntax could be discussed on the NG, and I hope the macro
> syntax
> would be designed well. There is no sound design at the moment. So I think
> this
> is a crucial part of the language. And once macro is out, backward
> compatibility
> and other stuff would need to be considered. We need to do some psuedo
> code on
> the imagine macro syntax for a while then decide where to go. And I hope
> the
> community could help Walter a bit over this design
>
> >
> > Unfortunate then that AA's aren't yet supported at compile time because
> > they use pointers to hash the values from the strings, and pointers
> > aren't established until runtime.
> >
> > The syntax is also a bit rusty, but that's to be expected for a first
> > proposal. My AST Reflection example was probably even weaker.
> >
> > ~~
> >
> > Davidl Wrote:
> >> and my idea is eventually get the compiler's associate array out not
> >> built-in by using a
> >> macro Language INI file instead. In the ini file, the macro is the
> >> language feature.
> >>
> >> > Obviously the one I posted yesterday is not easy for IDE to highlight
> >> > sub-language set
> >> > and also it lacks the power of parse different sub-language
> >> expressions.
> >> > I think the
> >> > goal of macro should be powerful enough to introduce a new sub
> >> language.
> >> > Then the macro
> >> > itself could be called mature.
> >> > Consider the following
> >> >
> >> > macro MyPowerfulMacro = CODEGEN //indicate the backend gen code output
> >> > string
> >> > {
> >> > KeyWordList(CASE_INSENSITIVE) // this is for IDE highlight
> >> > //the design here doesn't pollute keyword we have now, KeyWordList,
> >> > Expression Backend all only take effect in macro expression
> >> > {
> >> > object, TOKEN.object,
> >> > end, TOKEN.end,
> >> > }
> >> > Expression
> >> > {
> >> > expdeclare ::= EXP.expdeclare(objid, objattr[])
> >> > TOKEN.object {( TOKEN.identifier:objid TOKEN.identifier:~objattr
> >> > TOKEN.colon TOKEN.object)
> >> > | (EXP.expdeclare:objexp) } TOKEN.end
> >> > }
> >> >
> >> > Backend EXP.expdeclare(objid, objattr[])
> >> > {
> >> > CODEGEN ~= class "~objid.strinof)~"{;
> >> > foreach(k;objattr)
> >> > {
> >> > CODEGEN ~= "class "~k.stringof~"{}"
> >> > }
> >> > CODEGEN ~= "}"
> >> > }
> >> >
> >> > }
> >>
> >
>
More information about the Digitalmars-d
mailing list