18 December 2011
Nuitka Release 0.3.16
This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler, “download now”.
This time there are many bug fixes, some important scalability work, and again improved compatibility and cleanups.
The release cycle focused on fixing the bug reports I received. I have also continued to look at CPython3 compatibility, and this is the first version to support Python3 somewhat, at least some of the basic tests programs run (of course via 2to3
conversion) without trouble. I don’t know when, but it seems that it’s going to work one day.
Also there has an effort to make the Debian packaging cleaner, addressing all kinds of small issues that prevented it from entering the Debian repository. It’s still not there, but it’s making progress. Fixed a packaging problem for Linux and x64 platform, the new Fixed an error where optimization was performed on removed unreachable code, which lead to an error. Released as 0.3.15b hot fix already. Fixed an issue with Fixed Fixed the Windows batch files Fixed re-raise with Fixed Fix handling of broken new lines in source files. Read the source code in “universal line ending mode”. Released as 0.3.15f hot fix already. Fixed handling of constant module attribute Fixed assigning to Fix constant dictionaries not always being recognized as shared. Released as 0.3.15g hot fix already. Fix generator function objects to not require a return frame to exist. In finalize cleanup it may not. Fixed non-execution of cleanup codes that e.g. flush Fix Fix missing fallback to subscript operations for slicing with non-indexable objects. Fix, in-place subscript operations could fail to apply the update, if the intermediate object was e.g. a list and the handle just not changed by the operation, but e.g. the length did. Fix, the future spec was not properly preserving the future division flag. The optimization scales now much better, because per-module optimization only require the module to be reconsidered, but not all modules all the time. With many modules recursed into, this makes a huge difference in compilation time. The creation of dictionaries from constants is now also optimized. As a new feature functions now have the The names The The help output of Nuitka was polished a lot more. It is now more readable and uses option groups to combine related options together. The in-line copy of Scons is not checked with PyLint anymore. We of course don’t care. Program tests are no longer executed in the program directory, so failed module inclusions become immediately obvious. The basic tests can now be run with Moved The Debian package has seen lots of improvements, to make it “lintian clean”, even in pedantic mode. The homepage of Nuitka is listed, a watch file can check for new releases, the git repository and the gitweb are referenced, etc. Use Some more PyLint cleanups. There is now a dedicated test for things that crashed Nuitka previously. Added a program test where the imported module does a Cover the type of Cover a final Added test with functions that makes a Cover the calling of Cover the use of eval in contractions and generator expressions too. Cover Added test function with two The “git flow” was really great in this release cycle. There were many hot fix releases being made, so that the bugs could be addressed immediately without requiring the overhead of a full release. I believe that this makes Nuitka clearly one of the best supported projects. This quick turn-around also encourages people to report more bugs, which is only good. And the structure is there to hold it. Of course, the many bug fixes meant that there is not as much new development, but that is not the priority, correctness is. The work on Python3 is a bit strange. I don’t need Python3 at all. I also believe it is that evil project to remove cruft from the Python core and make developers of all relevant Python software, add compatibility cruft to their software instead. Yet, I can’t really stop to work on it. It has that appeal of small fixups here and there, and then something else works too. Python3 work is like when I was first struggling with Nuitka to pass the CPython2 unit tests for a first time. It’s fun. And then it finds real actual bugs that apply to CPython2 too. Not doing What’s missing is more “hg” completeness. I think only the Bug Fixes
swapFiber.S
file for the fiber management was not included. Released as 0.3.15a hot fix already.__import__
and recursion not happening in any case, because when it did, it failed due to not being ported to new internal APIs. Released as 0.3.15c hot fix already.eval()
and locals()
to be supported in generator expressions and contractions too. Released as 0.3.15d hot fix already.nuitka.bat
and nuitka-python.bat
to not output the rem
statements with the copyright header. Released as 0.3.15d hot fix already.raise
, but without a current exception set. Released as 0.3.15e hot fix already.vars()
call on the module level, needs to be treated as globals()
. Released as 0.3.15e hot fix already.__name__
being replaced. Don’t replace local variables of the same name too. Released as 0.3.15g hot fix already.True
, False
or None
. There was this old TODO
, and some code has compatibility craft that does it. Released as 0.3.15g hot fix already.sys.stdout
, by adding Py_Finalize()
.throw()
method of generator expression objects to not check arguments properly.Optimization
New Features
func_defaults
and __defaults__
attribute. It works only well for non-nested parameters and is not yet fully integrated into the parameter parsing. This improves the compatibility somewhat already though.True
, False
and None
are now converted to constants only when they are read-only module variables.PYTHONPATH
variable is now cleared when immediately executing a compiled binary unless --execute-with-pythonpath
is given, in which case it is preserved. This allows to make sure that a binary is in fact containing everything required.Organizational
PYTHON=python3.2
and use 2to3
conversion in that case.Cleanups
tags
to a separate module, make optimization emit only documented tags, checked against the list of allowed ones.os.path.join
in more of the test code to achieve more Windows portability for them.New Tests
sys.exit()
and make sure it really doesn’t continue after the SystemExit
exception that creates.__builtins__
in the main program and in imported modules in tests too. It’s funny and differs between module and dict in CPython2.print
statement without newline in the test. Must still receive a newline, which only happens when Py_Finalize()
is called.raise
without an exception set.vars()
on module level too.func_defaults
and __default__
attributes for a function too.raise
in an exception handler, so that one becomes dead code and removed without the crash.Summary
Py_Finalize
(but having to), the slice operations shortcomings, the bug of subscript in-place, and so on. There is likely more things hidden, and the earlier Python3 is supported, the more benefit from increased test covered.raise
without exception set and the func_defaults
issue were going into its direction, but it won’t be enough yet.