In a recent post to the IronPython mailing list, Dino Viehland reports,
Hello IronPython Community,
We have just released IronPython 1.0 RC1. We’re anticipating that this build will be the same as 1.0 final unless we hear otherwise. We’re looking for any feedback, but in particular we’d like to know of any blocking issues discovered against this build or fundamental language incompatibilities. Please try out the latest build over the next 2 weeks and let us know if you encounter any issues as soon as possible. Additionally, if there are any 1.01 Alpha bugs on CodePlex that are blocking you please bring these to our attention so we can take a second look at them.
Our goal for IronPython 1.0 is to be compatible with CPython 2.4 We’ve fixed all known language incompatibilities and implemented a large number of the standard CPython built-in modules with a focus on those most used. RC1 includes one new module that hasn’t shipped previous (cPickle). We do have some issues remaining but we believe these will not affect compatability with CPython. In addition RC1 has several new 2.5 Python features that can be enabled with the experimental switch -X:Python25, but by default these are disabled:
More details follow below, but let me first take the time to send out a BIG PHAT THANKYOU to both MS, the IronPython development team, and the IronPython development community for bringing this all together.
Exciting times are ahead!
The rest of Dino’s post follows below:
1. PEP 308: Conditional Expressions
2. PEP 343: The ‘with’ statement. (as per PEP 343, you need to do ‘from _future_ import with_statement’ for enabling ‘with’ statement )
3. Other Language Changes
1. The dict type has a new hook for letting subclasses provide a default value with ‘_missing_’ method.
2. Both 8-bit and Unicode strings have new partition(sep) and rpartition(sep) methods.
3. The startswith() and endswith() methods of string types now accept tuples of strings to check for.
4. The min() and max() built-in functions gained a ‘key’ keyword parameter.
5. Two new built-in functions, any() and all(), evaluate whether an iterator contains any true or false values.
6. The list of base classes in a class definition can now be empty.
You can download the release from: http://www.CodePlex.com/IronPython
We’d like to thank everyone in the community for your bug reports and suggestions that helped make this a better release: audespc, Jonathan Jacobs, Lee Culver, Luis M. Gonzalez, Miguel de Icaza, Mike Raath, paparipote, Sanghyeon Seo, and Vincent Wehren.
Thanks and keep in touch,
The IronPython Team
More complete list of changes and bug fixes:
Bugfix: 824 - IP Fails to trap AttributeError from _getattr_
Bugfix: 825 - weakref.proxy needs all special methods
Bugfix: test_descr: two class init issues
Bugfix: testdescr: minor negative cases we’re missing (classmethod, _cmp_, _get__, read-only properties)
Bugfix: test_descr: dict compat issues
Bugfix: test_descr: four minor issues (wrong except on invalid format string, hex is uppercase, moduletype, Ellipsis)
Bugfix: 872 - NullRef exception in finally w/o yield
ClrModule.Path was deprecated, to be removed in Beta 7, but it’s still there
Also removed sys.LoadAssemblyXXX methods
Tutorial Update: Added some bulletproofing to pyevent.py so that you could only add callable objects to events, quietly handle removing handlers that aren’t there, and r
emoved some old/unused code.
Tutorial Update: Added comments to winforms to explain what it was doing and why
Bugfix: 348 RE_Pattern.match matches start-of-string too optimistically when endpos is specified
Bugfix: 438 os functions raise wrong exception types
Bugfix: 897 Memory leak in ClrModule
Bugfix: 901 SystemError when deriving from a parent class and a grandparent class with _slots_
Bugfix: 813 Builtin eval with dict subclass as locals does not work as in CPython 2.4
Bugfix: Add filename, lineno, offset and text to SyntaxError Exception when dealing with pure Python
Bugfix: test_sys: Implement various missing sys functions WAS: Implement sys.settrace function
Bugfix: cpython supports backslash to concat long string?
Bugfix: clr.LoadAssemblyByName and LoadAssemblyByPartialName publish the assembly
Bugfix: MethodBinder: choose which explicitly implemetned interface methods with the same name
Bugfix: implement type.mro()Bugfix: testisinstance: Assertion triggered for test case calling isinstance with a class that has no _bases__ attribute
Tutorial Update: Tweaks to text for winforms and avalon exercises.
Added test cases for COM interop
Bugfix: 1018 - Function call with expanded argument list passes values incorrectly
Bugfix: AddReference* APIs eat exceptionsBugfix: Some of the ClrModule.LoadAssemblyXxx methods swallow exceptions from the Assembly APIs they call, making debugging difficult
Bugfix: 940 - Cannot cast OldClass to DynamicType exception when importing xml.dom.minidom
Bugfix: 922 - _getitem_ is no longer callable w/ multiple indexesBugfix: 930 - Performance degradation between beta 8 and 9 doing multi-dimensional array copies
Bugfix: CodeDom: Ignore empty Indent and always force it to indent
Bugfix: 871 - Overriding _call_ on type exposes Caller ContextBugfix: 921 - FancyRepr only splits on \n
Bugfix: 895 - cmp() on recursive structures produces uncaught StackOverflowException and kills interpreter
Bugfix: Strange behavior of MonthCalendar control causes cascading message boxes in the tutorial on Embedding IronPython
Bugfix: - test_descr: three super() issues, Super had a bunch of issues -
1. Super._get_ would return an instance of Super not an instance of whatever type Super is
2. Super was passing the wrong values for the descriptor get, resulting in the property’s _get_ doing useful work
3. If we’re not looking up in a subclass of what super is a super for, then we should search the real type of the instance, skipping the 1st class in the MRO
4. Super on super - ran into this one while writing the tests, our repr would stack overflow
5. Super _new_ / _init_ was wrong - _new_ is a NOP which yields an empty super, _init_ re-initializes the super and can be called multiple times
6. Our IDynamicObject implementation for Super wasn’t reporting the right thing for subclasses
Bugfix: testdescr: issues with _str_ _repr__ and subclasses of str
Tutorial Update: Updated tutorial with a new exercise.
Bugfix: testdescr: four _slots__ issues
Bugfix: 1029 - Can’t access _builtins_ when runing method compiled with PythondEngine.CompileMethod
Bugfix: test_file.py failing on CPython—seems like a bug with our “seek” implementation
Bugfix: Exception._str_() exception message differs from the message given by CPython
Test updates: Improvments to tests to ensure they pass on both IronPython & CPython
Bugfix: Add ISlice interface to IronMath.dll
Bugfix: If the count argument to re.subn is omitted or 0 then all occurrences should be replaced
Bugfix: 1054 - IPy Runtime crashes making COM call with missing arguments
Bugfix: System.Char.Parse(’c') in set(’c') — fails
Python 2.5 feature: _MISSING_ on dict
Bugfix: 894 - Cannot implement an interface that defines an event
Bugfix: COM Interop: regression - missing some methods
Bugfix: We seem to be boxing the return value (bool) of ‘a’ == ‘a’ every time we call it
Performance fixes for areas where we were 2-10x slower than CPython:
10x boost to tuple slicing perf by using code on object rather than on generic Array and smaller boost to List slicing with same code.
~2x boost to builtin and clr method lookup perf with two steps
1. Using a customized immutable SymbolId based HashTable
2. Not checking the type of self when we know it’s ours
The performance of looking up methods on builtin and clr types is barely noticeable in pystone and parrotbench, but should be noticeable in many real-wo
rld apps and other benchmarks. This impacts every method call to either a .NET type or a builtin Python type - which are the same thing in IronPython.
Also simplified and sped-up Function and OldClass binding rules
Tutorial Update: Output of dir(FileSystemEventArgs)
Tutorial Update: Added TypedCode sample for Tutorial 2 Task 3
Tutorial Update: Fixed obsolete method calls in code sample of Tutorial 6, Exercise 2, Task 1&3
Bugfix: 758 - Some invalid input doesn’t report error in the console
Bugfix: 776 - datetime.strptime doesn’t allow extra non-whitespace characters in format string
Bugfix: 904 - Ctrl-Z improperly expected for EOF on Unix
Bugfix: 936 - RE_Match.start doesn’t accept group name
Bugfix: 1015 - Exception stack not filtered/formatted when exception occurs on a different thread
Improved help’s display & _doc_ of built-in functions & properties
Bugfix: sys.exit(None) prints None to console. PythonSystemExitException.GetExitCode now returns non-integer values and the caller has to handle it appropriately.
Bugfix: PythonEngine.Evaluate does not work with EngineOptions.ClrDebuggingEnabled.
Added EngineModule.Import to match PythonEngine.Import which only worked with the DefaultModule.
Bugfix: CreateLambda throws NullReferenceException if the expression includes a division operator
Bugfix: Names for generic parameters of CreateLambda and CreateMethod don’t follow same pattern as existing FX generic types
Python 2.5 Feature: with Statement
Bugfix: CodePlex 1075 - Type Error is not raised
Bugfix: nt.unlink not deleting file properly
Bugfix: issue in the marshal module (enable test_marshal.cs)
Bugfix: date.strftime does not show good data
Bugfix: COM interop: duplicate entries of _class_ (and _doc, _init__ etc) in dir(com object) result
Bugfix: Wrong exception when opening read-only file for write.
Implemented cPickle module and made associated changes to the runtime.
Bugfix: 1090 - del sys._getframe
Add APP ID Icon to ipy.exe and ipyw.exe
Bugfix: Deleting a class attribute should raise an error
Bugfix: implement socket.getaddrinfo to ~90% fidelity of CPython
Add AllowPartiallyTrustedCallers attribute to IronPython.dll and IronMath.dll