[IronPython] FW: FW: DLR question

Dino Viehland dinov at exchange.microsoft.com
Tue Nov 13 18:07:47 CET 2007


There's no direct support for this but it shouldn't be too hard to do.  You can carry the AST around w/ you by doing an Ast.RuntimeConstant(myAstRoot).

For example let's say that we wanted to hold onto the AST for all Python functions.  Over in FunctionDefinition.cs we call a helper method called MakeFunction to create the real Python function object.  We could add a new parameter there (because we don't have enough :)) and then do:

            MSAst.Expression ret = Ast.Call(
                typeof(PythonFunction).GetMethod("MakeFunction"),                               // method
                Ast.CodeContext(),                                                              // 1. Emit CodeContext
                Ast.Constant(SymbolTable.IdToString(_name)),                                    // 2. FunctionName
                Ast.CodeBlockExpression(code, flags != FunctionAttributes.None),                // 3. delegate
                Ast.NewArray(typeof(string[]), names),                                          // 4. parameter names
                Ast.NewArray(typeof(object[]), defaults),                                       // 5. default values
                Ast.Constant(flags),                                                            // 6. flags
                Ast.Constant(_body.Documentation, typeof(string)),                              // 7. doc string or null
                Ast.Constant(this.Start.Line),                                                  // 8. line number
                Ast.Constant(_sourceUnit.GetSymbolDocument(this.Start.Line), typeof(string))    // 9. Filename
                    Ast.Constant(code)          // or maybe code.Body ?
            );


>From there we could then use the AST to create a new AST, create a new CodeBlock, and then replace the delegate the PythonFunction instance holds onto w/ a new delegate.  Unfortunately if there's going to be lots of mutation then there's going to be lots of compilation which isn't going to be too good.  You could also try interpreted mode to reduce that overhead (also we do have some profile driven compilation features which could help make this determination for you automatically but they're very naïve at this point).

And as a random thought: does the AST actually need to change or just the actions the code performs at runtime?  If the AST just represents the structure of the code you could insert a bunch of helper calls who's behavior changes as the AST 'mutates'.  As an aside we eventually want to support custom DynamicSite's which would enable you to do any 'operation' you care about.  Once we had that support you could turn these helper calls into dynamic sites in order to improve the perf.

That might not have been quite the answer you're looking for but hopefully it's some food for thought that will help you determine if you can do what you need.

-----Original Message-----
From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Ben.Young at sungard.com
Sent: Tuesday, November 13, 2007 6:05 AM
To: users at lists.ironpython.com
Subject: [IronPython] FW: FW: DLR question

>From the silence I'll assume it is :)

I'm prototyping a new language (currently implemented in Python) and I am looking at the DLR to see if it can help make it speedy. However my language has the property that it can mutate it's own AST at any point, and from reading the IronPython and ToyScript sources it looks like the AST of the "source" program needs to be static. Is there anything I can make use of in the DLR here, or should I be resigned to implementing more than I'd hoped myself?

Cheers,
Ben


________________________________________
From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Ben.Young at sungard.com
Sent: 13 November 2007 07:53
To: users at lists.ironpython.com
Subject: [IronPython] FW: DLR question

Hi there!

Is this the correct forum for questions about the DLR, or is there a separate DLR mailing list somewhere?

Cheers,
Ben

Ben Young - Senior Software Engineer
SunGard - Enterprise House, Vision Park, Histon, Cambridge, CB24 9ZR
Tel +44 1223 266042 - Main +44 1223 266100 - http://www.sungard.com/

CONFIDENTIALITY:  This email (including any attachments) may contain confidential, proprietary and privileged information, and unauthorized disclosure or use is prohibited.  If you received this email in error, please notify the sender and delete this email from your system.  Thank you.

_______________________________________________
Users mailing list
Users at lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com



More information about the Ironpython-users mailing list