Jacob Carlborg wrote:
On 2010-12-14 13:05, Don wrote:
Graham St Jack wrote:
On 14/12/10 20:33, Vladimir Panteleev wrote:
On Tue, 14 Dec 2010 09:30:46 +0200, Graham St Jack
<[email protected]> wrote:

There is of course the worry that it could get so easy that everyone
starts doing it, and we have (relatively) impenetrable code everywhere
instead of just deep in the bowels of framework libraries.

TBH, I'm more excited by AST macros which I understood are planned for
D3, as mentioned here:
http://s3.amazonaws.com/dconf2007/WalterAndrei.pdf
They seem to promise the power of mixins, but without the mess.


I took a look at the pdf, but couldn't see how the AST macros could come
close to the kinds of things that are possible (but difficult) with
mixins.

That fact was recognized at the conference, on the following day. As a
result, AST macros were dropped from D2.

Do you have an example that would work with string mixins but not with AST macros?

Well, it's a bit hard without a formal definition of AST macros.
But the stuff I talked about at the conference, I have no idea how to do with AST macros.

There's code like this, which generates an asm instruction.

------
mixin( opToSSE[operations[done+1]] ~ suffix ~ " " ~ XMM(numOnStack-1) ~ ", " ~ indexedSSEVector(ranklist, operations[done], vectorsize));
-------

using the functions:
============
const char [][5] vectorRegister = ["ECX", "EDX", "EBX", "ESI", "EDI"];

char [] indexedSSEVector(char [] ranklist, char var, char [] vecsize)
{
return "[" ~ vectorRegister[vectorNum(ranklist, var)] ~ " + " ~ vecsize ~"*EAX]";
}

char [] XMM(int k) { return "XMM"~ itoa(k); }

char [][char] opToSSE() {
    return ['*':"mulp"[], '+': "addp", '-': "subp", '/': "divp"]; }

int vectorNum(char [] ranklist, char var)
{
    int numVecs=0;
    for (int i=0; i<var-'A'; ++i) {
        if (ranklist[i]=='1') ++numVecs;
    }
    return numVecs;
}
============

They need to roughly match string mixins in power. At this stage, there
is no proposal for how they should work.

I think someone, Nick Sabalausky perhaps, suggested to have something like the hygiene macros in Nemerle: http://nemerle.org/wiki/index.php?title=Macros

From an implementation point of view, the differences between Nemerle macros and string mixins are mostly syntactic. 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.

Reply via email to