DIP 50 - AST macros

Jacob Carlborg doob at me.com
Mon Nov 11 00:12:58 PST 2013


On 2013-11-11 08:46, Rikki Cattermole wrote:

> One of our targets for AST macros should be the ability to replicate
> roughly linq from c# / .net.
>
> An example syntax for use with AST could be:
>
> auto data = [5, 7, 9];
> int[] data2;
> query {
>   from value in data
>   where value >= 6
>   add to data2
> }
>
> Could be unwrapped to:
>
> auto data = [5, 7, 9];
> int[] data2;
> foreach(value; data) {
>   if (value >= 6) data2 ~= value;
> }
>
> This isn't a thought out design but it should at least be a target or a
> possibility.

Absolutely. One of my favorite examples is the database query:

auto person = Person.where(e => e.name == "John");

Which translates to the following SQL:

select * from person where name = 'John'

> Also c#'s get set should be rather similar as well.
> Example:
>
> getset {
>   public int id;
>   private bool exit;
> }
>
> Would translate to:
>
> private int id;
> private bool exit;
> @property {
>   void id(int v) {this.id = v;}
>   void exit(bool v) { this.exit = v; }
>   int id() { return this.id; }
>   bool exit() { return this.exit; }
> }
>
> This would definitely open new possibilities up.
> Disclaimer I don't like c# or .net but I am partial to these features.

That's quite similar one of the examples, I like to call it "property 
shortcut":

http://wiki.dlang.org/DIP50#Attribute_macros

> At current point I think the DIP does have the necessary features to
> implement this. However it would be nice for safety to be able to get
> all scope variables of where the macro was initiated from. Being able to
> check for if a variable exists could provide much needed compile safety
> and better error messages.

Why not? There's quite a lot that is not specified in this DIP. Mostly 
because I haven't decided/figured out how it should work exactly. Of 
course, any help is always appreciated.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list