I'd much rather see the bugs in the current lambda syntax get fixed (e.g. http://d.puremagic.com/issues/show_bug.cgi?id=4724) rather than spend more time bikeshedding.
== Quote from Andrei Alexandrescu ([email protected])'s article > On 9/21/11 5:17 PM, Walter Bright wrote: > > I've collected a few from various languages for comparison: > [snip] > I think we should do the following: > 1. Introduce a new token "=>" > 2. Add this rewrite to the grammar: > symbol => expression > translates to > (symbol) { return expression; } > 3. Add this rewrite to the grammar: > symbol1 symbol2 => expression > translates to > (symbol1 symbol2) { return expression; } > 4. Add this rewrite to the grammar: > (comma_separated_parms) => expression > translates to > (comma_separated_parms) => expression > Each item in comma_separated_parms may be 1 or 2 symbols separated by > whitespace. Example: > (int a, b) => a + b > is valid and translates to (int a, b) { return a + b; } > 5. The expression cannot contain commas at top level; an unparenthesized > comma is considered to finish expression, just like in a function call's > argument list. For example: > fun(int a => a + 1, a + 2) > is interpreted as > fun((int a => a + 1), (a + 2)) > To use comma inside expression, add parens around it. > 5. Remove bugs and limitations. A function literal may specify none, > all, or some parameter types, and the compiler correctly figures out the > appropriate template and non-template parameters. The literal > subsequently converts to function pointer or delegate whenever there's a > match of parameter and result types. > Andrei == Quote from Andrei Alexandrescu ([email protected])'s article > On 9/21/11 5:17 PM, Walter Bright wrote: > > I've collected a few from various languages for comparison: > [snip] > I think we should do the following: > 1. Introduce a new token "=>" > 2. Add this rewrite to the grammar: > symbol => expression > translates to > (symbol) { return expression; } > 3. Add this rewrite to the grammar: > symbol1 symbol2 => expression > translates to > (symbol1 symbol2) { return expression; } > 4. Add this rewrite to the grammar: > (comma_separated_parms) => expression > translates to > (comma_separated_parms) => expression > Each item in comma_separated_parms may be 1 or 2 symbols separated by > whitespace. Example: > (int a, b) => a + b > is valid and translates to (int a, b) { return a + b; } > 5. The expression cannot contain commas at top level; an unparenthesized > comma is considered to finish expression, just like in a function call's > argument list. For example: > fun(int a => a + 1, a + 2) > is interpreted as > fun((int a => a + 1), (a + 2)) > To use comma inside expression, add parens around it. > 5. Remove bugs and limitations. A function literal may specify none, > all, or some parameter types, and the compiler correctly figures out the > appropriate template and non-template parameters. The literal > subsequently converts to function pointer or delegate whenever there's a > match of parameter and result types. > Andrei == Quote from Andrei Alexandrescu ([email protected])'s article > On 9/21/11 5:17 PM, Walter Bright wrote: > > I've collected a few from various languages for comparison: > [snip] > I think we should do the following: > 1. Introduce a new token "=>" > 2. Add this rewrite to the grammar: > symbol => expression > translates to > (symbol) { return expression; } > 3. Add this rewrite to the grammar: > symbol1 symbol2 => expression > translates to > (symbol1 symbol2) { return expression; } > 4. Add this rewrite to the grammar: > (comma_separated_parms) => expression > translates to > (comma_separated_parms) => expression > Each item in comma_separated_parms may be 1 or 2 symbols separated by > whitespace. Example: > (int a, b) => a + b > is valid and translates to (int a, b) { return a + b; } > 5. The expression cannot contain commas at top level; an unparenthesized > comma is considered to finish expression, just like in a function call's > argument list. For example: > fun(int a => a + 1, a + 2) > is interpreted as > fun((int a => a + 1), (a + 2)) > To use comma inside expression, add parens around it. > 5. Remove bugs and limitations. A function literal may specify none, > all, or some parameter types, and the compiler correctly figures out the > appropriate template and non-template parameters. The literal > subsequently converts to function pointer or delegate whenever there's a > match of parameter and result types. > Andrei
