DIP 50 - AST macros

Kapps opantm2+spam at gmail.com
Mon Nov 18 11:21:33 PST 2013


On Monday, 18 November 2013 at 16:03:54 UTC, IgorStepanov wrote:
>
> How macros implemented in C#?
> I know, that C# have linq which can translate lambda expression 
> to SQL WHERE condition. For example s => s.Number > 2 && 
> s.Number < 20 can be translated to ... WHERE s.Number > 2 AND 
> s.Number < 20
>
> It is interesting function, because it allow to write hard code 
> in preferred language (C#, D) instead of unpreferred (SQL). 
> Also this code hides poorly standardized SQL for the 
> well-standardized language.
>
> And С# still not sinking under tons of macro. May be C# has 
> some limitations for ast macros. May be they allowed only for 
> lambda?
>
> This is a general macro-feature which I had like to see in D.

C# doesn't have macros. Linq to Sql is implemented using 
expression trees. Essentially, it allows the compiler to generate 
an expression tree of the lambda expression which your library 
parses to do some work. It doesn't inject any code, and it's done 
at runtime. I could be wrong about the exact details, but 
essentially it comes down to the compiler passing in an 
expression tree into your method, and then your method parsing it 
at runtime and doing something with the results; it can't be used 
to generate new code.


More information about the Digitalmars-d mailing list