D2's std.algorithm

Bill Baxter dnewsgroup at billbaxter.com
Tue Dec 11 11:32:51 PST 2007


Craig Black wrote:
> "Bill Baxter" <dnewsgroup at billbaxter.com> wrote in message 
> news:fjl4fo$8am$1 at digitalmars.com...
>>>   sort!("a > b")(array);
>> I just wanted to say that this is BRILLIANT!  Zero call overhead, zero 
>> syntax overhead, compile-time lambda functions!
>>
>> All the algorithms should support this syntax so we can do sexy 
>> compile-time lambda one-liners like:
>>
>>    find!("a.some_member > 10")(array);
>>
>> or
>>
>>    partition!("a.call_something() !is null")(array);
>>
>> etc.
>>
>> And probably those should allow a data arg passed as 'b' to the lambda 
>> function so you could do something like
>>    find!("a.some_member > b")(array, 10);
>>
>> Or even use template varargs and number the args automatically to allow:
>>
>>    find!("a.x > b && a.w < c")(array, 10, 20);
>>
>> It would just sequentially name the arguments b,c,d,e... etc.
>>
>> Or even make it like C#/Tango's format string patterns since the string 
>> can be processed before mixing it in.
>>    find!("a.x > {1} && a.w < {2}")(array, 10, 20);
>>
>> That would be excellent.  Take that boost::lambda!
>>
>> --bb
> 
> Yes very cool!  Would be even better if the parens could be removed. 
> Ideally, the compiler would be able to do CTFE with some lambdas.

There's that idea of creating "static" parameters from DCon07.

With that you should be able to stick the string in as a regular 
parameter.  But I don't actually find the template syntax too bad.  It's 
a good reminder that the argument must be a compile-time constant.

When/if we get static parameters it's going to be harder to tell from 
looking at code what's compile-time and what's not.  I anticipate 
wasting lots of time in this manner: "why did I/they write this function 
like this?  thats silly <rewrite rewrite> -- oh damn, I see why now. 
Argument #3 has to be a compile-time constant."

--bb



More information about the Digitalmars-d mailing list