[IronPython] IronPython 1.0 Beta 8

Dino Viehland dinov at exchange.microsoft.com
Tue Jun 20 00:47:01 CEST 2006

Hello IronPython Community,

We have just released IronPython 1.0 Beta 8. This release continues our focus on improving compatibility w/ CPython.  It also includes the last set of large design changes to IronPython 1.0 including a new method dispatch algorithm that should be closer to C# and VB, but also will now throw in some cases if the method dispatch is ambiguous.  There are also a large number of changes in the public API surface as we lock down for the final release (there will be one more set of changes to make fields private in the AST).  We'd love to hear your feedback on these changes.  Finally we've also included one new module in this release that has had high demand from the community: socket.

A more complete list of changes follows at the end.

You can download the release from: http://www.microsoft.com/downloads/details.aspx?FamilyId=FA3F9CC7-2A0D-41D3-AE51-0AEF8DFA7C57&displaylang=en

We'd like to thank everyone in the community for your bug reports and suggestions that helped make this a better release: AaronM, Adnand Dragoti, Angelo Xu, Aude Espesset, Brian Loyd, CParmar, JesseK, Jonathan Jacobs, Keith J. Farmer, MFenniak, Michael Foord, Michael Shilman, Paparipote, Pelikhan and Seo Sanghyeon.

Thanks and keep in touch,
The IronPython Team

Complete list of changes

Implement operators for all standard .NET types
re.search returns the correct value
ExecuteFile now returns Nullable<int> to indicate whether SystemExit was returned
Unhandled exceptions during startup are printed to the console
Bitwise operators for standard .NET types are implemented (Byte, SByte, Int16, Uint16, Uint32, Uint64)
Fixed issue w/ method dispatch & ref and out args
Enabled test_eof from standard CPython regression test suite
Bugfix: Dynamic method binding via __get__ is broken for both old and new style classes
Bugfix: inconsistency with hash() on types extending builtin basic types
Bugfix: unary operators not working for user types derived from basic types
Bugfix: issues subclassing tuple, str, unicode, file, and list
Bugfix: Errors creating builtin types using keyword arguments
Bugfix: CodeDom.FileExtension returns ""
Bugfix: str/repr of generic/non-generic collided types shows generic type name
Bugfix: SyntaxError expected when function parameter is declared as global
Bugfix: test_sys: SystemError is missing 'code' attribute
Bugfix: cStringIO module implementation incomplete
Experimental static compilation support (disabled by default)
Support creating exceptions that logically live in other modules
New organization & harness for IronPython regression tests
New Hosting API revisions
Fix compilation warnings on Mono
Bugfix: IndexError, IndexOutOfRangeException on definition of usertype with multiple inheritance
Bugfix: subclassing long is broken
Bugfix: expecting __repr__ returned non-string
Bugfix: file object missing a name member and doc strings
Bugfix: Fix special method lookup for new style classes
Bugfix: Add imp module
Bugfix: dir() scoping bug
Bugfix: Cleanup communication between the parser and PythonEngine used to determine when to continue a multi-line statement in the interpreter
Improved test code for test_imp
Bugfix: Deriving from sys module (and other builtins that implement ICustomAttributes) is broken.
Bugfix: __bases__ is immutable when dealing with new-style classes. We were not updating MRO of subtypes
Bugfix: __getattributes__ now works with builtins and .NET types
Bugfix: vars() obeys the "import clr" context rules
Bugfix: Disallow inheriting from function and instance-method
Remove binary backwards compatibility for beta 6 -> beta 7 transition
Bugfix: Issues subclassing dict, misaligned arguments on construction
Bugfix:  __call__ doesn't support keyword arguments
Bugfix:  __name__ is immutable
Bugfix: tuple.ToString() doesn't work after import clr
Fix issue w/ file handle implementation in nt
Bugfix: scope: del a variable which name is also used in a list inside nested function
Bugfix: scope: expect no NameError after that name is assigned in exec statement (inside a func)
Bugfix: eval(expr, None, None) throws
Bugfix: locals() don't include closure variables
Bugfix: Scope: eval on a variable defined outside the function
Bugfix: Test case disabled in test\test_decorators.py
Bugfix: Constructing int from System.Single doesn't work
Bugfix: builtin function help needs to be implemented
Bugfix: Test pass takes forever
Bugfix: 3 remaining issues in test_complex.py
Bugfix: subclassing long is broken
Bugfix: issues subclassing tuple, str, unicode, file, and list
Disable traceback test on 64-bit machines
Bugfix: issues with multiple inheritance and super
Bugfix: Remove assert keyword from the test suite
EngineContext was redundant with Frame
Finish SymbolId propogation through code base
Bugfix: nt.chmod flags are wrong (initialized as decimal rather than hex)
Bugfix: Re-implement time.clock to use the high-performance stop watch class
Bugfix: __slots__ implementation is broken
Bugfix: enable sbs_typeop.py
Bugfix: test_sys: sys.version_info needs to return a tuple containing 5 components
Bugfix:  __dict__ assignment doesn't work
Bugfix:  TypeError inheriting from multiple metaclasses
Bugfix:  Remove ValueType from __mro__ of value types
Bugfix:  Binascii returns incorrect results sometimes
Bugfix:  (complex.__ne__(1+1j, 1+1j) is False) == True
Bugfix: exec doesn't handle mappings, it requires dictionaries
Bugfix: exec "code" in global generates expression for global twice
Bugfix: exec code in g, l evaluates g and l in the wrong order
Added overloads of PythonEngine.Execute* that take a Frame and ExecutionOptionsAll the PythonEngine.Execute*
APIs throw exceptions instead of catching them and converting to error codes
Add CompiledModule type (CompiledModule is comparable with FrameCode since it contains the code for a PythonModule, but not the state associated with the module.)
Bugfix: PythonEngine API: why engine.ExecuteFile(fileName) can't be debuged. If ExecutionOptions.EnableDebugging is specified, we emit code in debuggable snippets assembly.
Added default constructor for Frame
Bugfix: divmod issue
Additional test cases for regular expressions
Bugfix: Missing feature/functionality/implementation in Importer.cs
Bugfix: implement type.mro()
Bugfix:  enable Scenario7 in EngineTest.cs
Bugfix: from package.module import module imports module from it's self
Bugfix: Issue with metaclasses declared nested in methods
Bugfix: Stack overflow on importing package with mutually referencing modules
Bugfix: dict construction compat issues
Bugfix: More mro inconsistency when dealing with mixes of new and old style classes in a hierarchy
New public CreatePythonException functions to support external modules creating old-style exceptions and test cases
Added attributes injector feature and the related test.
Bugfix: TypeError inheriting from multiple metaclasses
Bugfix: OldInstance.TryGetAttr throws if AttributeError is raised by __getattr__
Removed IConsole interface
Bugfix: Make delegate instance callable
Bugfix: ExtensibleComplex doesn't work
Bugfix: Traceback support for top-level code
TraceBack is exposed publicly to other C# code
Add Get/SetVariables overload that takes frame
Added new CompileFile methods (2 overloads)
Made the IFrameEnvironment members overridable in the Frame class
Added TryGetGlobal to IFrameEnvironment.
Bugfix: Custom dictionary types were not marked with [PythonType(typeof(Dict))].
Bugfix: Similarly, the CompiledModules did not have this. Hence isinstance(mymodule.__dict__, dic) was returning False.
Bugfix: OpsReflectedType.OpsTypeToType mapped ArrayOps to the last loaded array type.
Bugfix: class C(Interface): pass would look up the methods of the Interface on System.Object, which is incorrect.
Bugfix: isinstance(old_style_class(), object) and isinstance(None, object) should return True
Bugfix: IronPython: Command prompt shown when launching/debugging Windows Forms project
Major overhaul of binding rules to better handle ambiguities, to better match C# and VB's rules and to unify the code paths between reflect optimized binding resolution.
Marked Emit and Evaluate functions on the AST as private, making CodeGen internal to IronPython
Bugfix: added a check for empty inheritance.
Fixes to improve ability to pass more of stand-alone CodeDom test suite
Renamed: Frame -> ModuleScope
Renamed: FrameCode -> CompiledCode
Renamed: PythonEngine.Get/SetVariable(string) -> PythonEngine.Get/SetGlobal(SymbolId)
Renamed: PythonEngine.Execute(object) -> PythonEngine.Execute(CompiledCode)
Renamed: IFrameEnvironment -> IModuleScope + IModuleEnvironment
Bugfix: Add support for unsigned integer types (and other missing data types)
Misc. code cleanup
Bugfix: Re-enable delegates.py test case, and generally improve delegate support (out, ref, and params support for delegates)
change static object field PythonEngine.ExecWrapper to static delegate property ConsoleCommandDispatcher.
Bugfix: Missing feature/functionality/implementation in Function.cs
Bugfix: Binding: ReflectOptimizer loses error information
Bugfix: issues with list.__rmul__
ExtensibleComplex now implements IRichComparable
__del__ support for new-style classes
Improvements to pass all of test_long except logs test
Entering a blank line in the console generates error
__bases__ is immutable when dealing with new-style classes
Implementing TrueCompare for ExtensibleComplex
More code coverage for the .net datatype operators
Bugfix: INumber doesn't handle all data types, therefore the datatypes must implemente the operators directly rather than delegating to INumber
Bugfix: ReverseXXX on float calculated non-reverse result in some cases
Bugfix: SingleOps didn't throw on division by zero
Bugfix: consistent ~ operator for all unsigned types
Bugfix: moved the tests into test_numtypes.py
Bugfix: PythonEngine.Evaluate should not change module name to "<eval>".
Bugfix: SuperConsole tab completion off end of cmd buffer should be detected and anchor position decremented per line scrolled.
Added AutoIndent and made AutoIndent, ColorfulConsole, and TabComplete orthogonal flags.
Removed HandleExceptions and PressAnyKeyToContinue flags from Console.
#ifdef out COM GAC crawling code.
Cleaned up code generation scripts
Increased code coverage for .net data type operators
Bugfix: fix for the case of ExtensibleLong ** UInt64 in which the UInt64 would get converted to double rather than staying integer.
Bugfix: Explicit interface properties are always getting long-names
Bugfix: Tuple hashing doesn't seem to call new-class's __hash__ function
Bugfix: support __coerce__ method in ops.
Implement socket module, enabling standard library tests to pass: BaseHTTPServer, DocXMLRPCServer, SimpleHTTPServer, SimpleXMLRPCServer, SocketServer, cgi, ielib, ftplib, httplib, imaplib, macurl2path, mimetypes, nntplib, poplib, robotparser, smtplib, and urllib. socket passes with modifications.

Bugfix: Threads now properly exit when SystemExit is raised
Bugfix: IP.Compiler.NewTypeMaker now handles types correctly when generating properties
Bugfix: CodePlex 446 - Compiler throw on invalid syntax
Add new IronPythonWindow.exe for launching Windows apps w/o console
Moved many classes to be private to IronPython, refactored namespaces
Bugfix: 357 - Subclassing dict, not overriding init, and passing k/w args throws
Bugfix: 424 - Implement DynamicType clr.GetPythonType(Type t)
Bugfix: 439 - System.Array.Resize throws IndexError
Bugfix: Fix __slots__ / __weakref__ / __dict__ issue where we pick the wrong base type
More .NET primitive type operations clean-up & test coverage
Support for 2.5 PEP 308 (enabled w/ -X:Python25)
Bugfix: PreParseRegex incorrectly identifying the '?' in r"\(? " as an extension instead of 0 or 1 left parens
Bugfix: ?# is not being recognized as an extension by PreParseRegEx
Bugfix: a list is equal to empty string and other sequence types, eg [3, 5] == ''

More information about the Ironpython-users mailing list