Heh, thanks. :-) On Thu, May 21, 2015 at 2:17 PM, Guido van Rossum <gu...@python.org> wrote:
> Dang it. :-) I just want to encourage you to continue pursuing this idea, > one way or another. > > On Thu, May 21, 2015 at 7:01 AM, Ben Hoyt <benh...@gmail.com> wrote: > >> Thanks. Good point about python-ideas -- I was thinking that after I sent >> it too. I'll repost there soon. >> >> Out of interest, what specifically were you referring to as "definitely >> cool" here: LINQ-style generator expressions that build SQL ala PonyORM, or >> the more general feature of enabling AST access? >> >> -Ben >> >> On Wed, May 20, 2015 at 10:31 PM, Guido van Rossum <gu...@python.org> >> wrote: >> >>> Hey Ben, this is probably a better topic for python-ideas. I'll warn you >>> that a hurdle for ideas like this is that ideally you don't want to support >>> this just for CPython. It's definitely cool though! (Using movie poster >>> style quotes you can turn this into a ringing endorsement: "definitely >>> cool" -- The BDFL. :-) >>> >>> On Wed, May 20, 2015 at 7:26 PM, Ben Hoyt <benh...@gmail.com> wrote: >>> >>>> Hi Python devs, >>>> >>>> Enabling access to the AST for compiled code would make some cool >>>> things possible (C# LINQ-style ORMs, for example), and not knowing too >>>> much about this part of Python internals, I'm wondering how possible >>>> and practical this would be. >>>> >>>> Context: PonyORM (http://ponyorm.com/) allows you to write regular >>>> Python generator expressions like this: >>>> >>>> select(c for c in Customer if sum(c.orders.price) > 1000) >>>> >>>> which compile into and run SQL like this: >>>> >>>> SELECT "c"."id" >>>> FROM "Customer" "c" >>>> LEFT JOIN "Order" "order-1" ON "c"."id" = "order-1"."customer" >>>> GROUP BY "c"."id" >>>> HAVING coalesce(SUM("order-1"."total_price"), 0) > 1000 >>>> >>>> I think the Pythonic syntax here is beautiful. But the tricks PonyORM >>>> has to go to get it are ... not quite so beautiful. Because the AST is >>>> not available, PonyORM decompiles Python bytecode into an AST first, >>>> and then converts that to SQL. (More details on all that from author's >>>> EuroPython talk at http://pyvideo.org/video/2968) >>>> >>>> I believe PonyORM needs the AST just for generator expressions and >>>> lambda functions, but obviously if this kind of AST access feature >>>> were in Python it'd probably be more general. >>>> >>>> I believe C#'s LINQ provides something similar, where if you're >>>> developing a LINQ converter library (say LINQ to SQL), you essentially >>>> get the AST of the code ("expression tree") and the library can do >>>> what it wants with that. >>>> >>>> What would it take to enable this kind of AST access in Python? Is it >>>> possible? Is it a good idea? >>>> >>>> -Ben >>>> _______________________________________________ >>>> Python-Dev mailing list >>>> Python-Dev@python.org >>>> https://mail.python.org/mailman/listinfo/python-dev >>>> Unsubscribe: >>>> https://mail.python.org/mailman/options/python-dev/guido%40python.org >>>> >>> >>> >>> >>> -- >>> --Guido van Rossum (python.org/~guido) >>> >> >> > > > -- > --Guido van Rossum (python.org/~guido) >
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com