[IronPython] IronPython 2.6 CodePlex Source Update

merllab at microsoft.com merllab at microsoft.com
Fri Dec 4 17:53:00 CET 2009


This is an automated email letting you know that sources 
have recently been pushed out.  You can download these newer 
sources directly from http://ironpython.codeplex.com/SourceControl/changeset/view/62012.

ADDED SOURCES
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/DynamicConvertExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/Instructions/DivInstruction.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/LazyDynamicExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Ast/Utils.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/GetGlobalContextExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/DynamicGetMemberExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/LoopCompiler.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/PythonConstantExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Runtime/PythonContext.Generated.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/GetParentContextFromFunctionExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/LocalVariables.cs

MODIFIED SOURCES
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/DynamicConvertExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/Instructions/DivInstruction.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/LazyDynamicExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Ast/Utils.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/GetGlobalContextExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/DynamicGetMemberExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/LoopCompiler.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/PythonConstantExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Runtime/PythonContext.Generated.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/GetParentContextFromFunctionExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/LocalVariables.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/BranchLabel.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/Instructions/ControlFlowInstructions.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/Instructions/InstructionList.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/Instructions/TypeOperations.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/AstMethods.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/UncollectableCompilationMode.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/Instructions/Instruction.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/Instructions/LocalAccess.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/Instructions/StackOperations.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Generation/ToDiskRewriter.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Ast/UnaryExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Ast/FinallyFlowControlExpression.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Ast/FlowControlRewriter.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Microsoft.Dynamic.csproj
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Utils/ThreadLocal.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Runtime/ScriptingRuntimeHelpers.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Generation/CompilerHelpers.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/Interpreter.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/LightLambdaClosureVisitor.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/LightLambda.Generated.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/LightCompiler.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/LightLambda.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/InterpretedFrame.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Dynamic/Interpreter/LightDelegateCreator.cs
	$/IronPython/IronPython_Main/Src/IronPython/Runtime/Types/PythonType.Generated.cs
	$/IronPython/IronPython_Main/Src/Runtime/Microsoft.Scripting.Debugging/DebuggableLambdaBuilder.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/GeneratorRewriter.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/LazyCode.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/ClosureExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/PythonScriptCode.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/RuntimeScriptCode.cs
	$/IronPython/IronPython_Main/Src/IronPython/Runtime/Binding/PythonBinaryOperationBinder.cs
	$/IronPython/IronPython_Main/Src/Scripts/generate_dynamic_instructions.py
	$/IronPython/IronPython_Main/Src/IronPython/Runtime/Binding/PythonGetMemberBinder.cs
	$/IronPython/IronPython_Main/Src/IronPython/Runtime/FunctionCode.cs
	$/IronPython/IronPython_Main/Src/Tests/test_traceback.py
	$/IronPython/IronPython_Main/Src/IronPython/Runtime/Operations/PythonOps.cs
	$/IronPython/IronPython_Main/Src/IronPython/Runtime/PythonContext.cs
	$/IronPython/IronPython_Main/Src/Tests/test_memory.py
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/WithStatement.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/WhileStatement.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/UnaryExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/TryStatement.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/ScopeStatement.cs
	$/IronPython/IronPython_Main/Src/Scripts/generate_calls.py
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/PythonAst.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/NameExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/MemberExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/IndexExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/IfStatement.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/FunctionDefinition.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/ForStatement.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/DictionaryExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/ClassDefinition.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/CallExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/Compiler/Ast/BinaryExpression.cs
	$/IronPython/IronPython_Main/Src/IronPython/IronPython.csproj

CHECKIN COMMENTS
--------------------------------------------------------------------------------
Changeset Id: 1305533
Date: 12/3/2009 2:04:07 PM

Improves performance of code which is purely interpreted.  Also has some small benefits for startup perf.

The interpreter perf improvements mostly come out of not using our optimized call sites which perform really badly in the interpreter.  The reason they perform so badly is that we spend a lot of time accessing fields which is very very slow compared to doing it when compiled.  So instead we have some intermediate expressions which lazily create dynamic sites and hold onto them directly.  I’ve also added an instruction provider which gets our code context which just gets the optimized value.

I’ve also gone ahead and moved hot methods into IInstructionProvider implementations.  So now for hot methods like getting our code context from a function object this will run faster.

I’ve also implemented some more fast bindings – most of these are for more binary operations, but I’ve also added a few for calls which are hot.  

The end result of this is running interpreted (-X:CompilationThreshold 999999) our Pystones go from 18080.8 to 54864.4 (200% improvement).  

Big imports (no ngen) goes from 5.44 seconds to 5.16.
Big imports (ngen) goes from 3.11 seconds to 2.69.  Working set goes from to 64,088k to 60,164k.  This seems to all be a saving in shared pages (private working set is effectively unchanged).




(Shelveset: InterpreterPerfAndStartup3;REDMOND\dinov | SNAP CheckinId: 9966)



More information about the Ironpython-users mailing list