[Python-3000] A plea for anonymous functions
fredrik at pythonware.com
Thu Nov 16 11:01:05 CET 2006
Ivan Krstić wrote:
>> I'm not convinced that they do -- you can emulate LINQ today with
>> generators and iterator tools and good old for-in statements:
> No, you can't.
my sentence didn't end at that colon, though.
> For people following from home: when you query a database with
> LINQ, C# can construct the actual SQL *query* by introspecting the AST;
> you can't do that without first-class code blocks
of course you can. all you need is the AST for the *query*, not the
rest of the code.
for record in (<this part is important>):
gen = (for record in (<this part is important>))
e.g. something like
for record in (select table: <generator expression on table>):
where the table is able to either execute the generator expression on
itself, or analyze the AST and do an optimized query.
> And because the language is aware of what you're querying, it can
> compile the same LINQ query to SQL, or XQuery, or something else
> entirely, as needed.
well, Python's a dynamic language, so that has to be done by the
collection, on the fly. but that's not a problem, really.
>> *) there are plenty of hacks to address parts of this; everything from
>> algebra on custom objects (used by various SQL construction kits, RE
>> construction kits, etc), code that analyzes an expression by passing
>> special AST-building objects through it (used in PIL's point method, for
>> example), and code that requires you to pass in the expression as a text
>> string (or a ready-made "compiler" module AST-tree).
> Please distinguish hacks from language support
oh, my use of "decent mechanism" implied that the things I labelled as
"hacks" in the footnote weren't decent enough.
if you read my post again, you'll find that I said pretty much the same
thing as you're saying, minus the "we absolutely must have full support
for anonymous blocks to be able to do this" part.
More information about the Python-3000