This is to inform you about the new stable release of Nuitka. Please see the page "What is Nuitka?" for clarification of what it is now and what it wants to be.
This release contains progress on many fronts, except performance.
The extended coverage from running the CPython 2.7 and CPython 3.2 (partially) test suites shows in a couple of bug fixes and general improvements in compatibility.
Then there is a promised new feature that allows to compile whole packages.
Also there is more Python3 compatibility, the CPython 3.2 test suite now succeeds up to "test_builtin.py", where it finds that str doesn't support the new parameters it has gained, future releases will improve on this.
And then of course, more re-formulation work, in this case, class definitions are now mere simple functions. This and later function references, is the important and only progress towards type inference.
The compiled method type can now be used with copy module. That means, instances with methods can now be copied too. Issue#40. Fixed in 0.3.23.1 already.
The assert statement as of Python2.7 creates the AssertionError object from a given value immediately, instead of delayed as it was with Python2.6. This makes a difference for the form with 2 arguments, and if the value is a tuple. Issue#41. Fixed in 0.3.23.1 already.
Sets written like this didn't work unless they were predicted at compile time:
{ value }
This apparently rarely used Python2.7 syntax didn't have code generation yet and crashed the compiler. Issue#42. Fixed in 0.3.23.1 already.
For Python2, the default encoding for source files is ascii, and it is now enforced by Nuitka as well, with the same SyntaxError.
Corner cases of exec statements with nested functions now give proper SyntaxError exceptions under Python2.
The exec statement with a tuple of length 1 as argument, now also gives a TypeError exception under Python2.
For Python2, the del of a closure variable is a SyntaxError.
Migrated "bin/benchmark.sh" to Python as "misc/run-valgrind.py" and made it a bit more portable that way. Prefers "/var/tmp" if it exists and creates temporary files in a secure manner. Triggered by the Debian "insecure temp file" bug.
Migrated "bin/make-dependency-graph.sh" to Python as "misc/make-dependency-graph.py" and made a more portable and powerful that way.
The filtering is done a more robust way. Also it creates temporary files in a secure manner, also triggered by the Debian "insecure temp file" bug.
And it creates SVG files and no longer PostScript as the first one is more easily rendered these days.
Removed the "misc/gist" git sub-module, which was previously used by "misc/make-doc.py" to generate HTML from User Manual and Developer Manual.
These are now done with Nikola, which is much better at it and it integrates with the web site.
Lots of formatting improvements to the change log, and manuals:
The creation of the class dictionaries is now done with normal function bodies, that only needed to learn how to throw an exception when directly called, instead of returning NULL.
Also the assignment of __module__ and __doc__ in these has become visible in the node tree, allowing their proper optimization.
These re-formulation changes allowed to remove all sorts of special treatment of class code in the code generation phase, making things a lot simpler.
There was still a declaration of PRINT_ITEMS and uses of it, but no definition of it.
Code generation for "main" module and "other" modules are now merged, and no longer special.
The use of raw strings was found unnecessary and potentially still buggy and has been removed. The dependence on C++11 is getting less and less.
This release brought forward the most important remaining re-formulation changes needed for Nuitka. Removing class bodies, makes optimization yet again simpler. Still, making function references, so they can be copied, is missing for value propagation to progress.
Generally, as usual, a focus has been laid on correctness. This is also the first time, I am release with a known bug though: That is Issue#39 which I believe now, may be the root cause of the mercurial tests not yet passing.
The solution will be involved and take a bit of time. It will be about "compiled frames" and be a (invasive) solution. It likely will make Nuitka faster too. But this release includes lots of tiny improvements, for Python3 and also for Python2. So I wanted to get this out now.
As usual, please check it out, and let me know how you fare.