Nuitka Release 0.6.12
This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler, “download now”.
This release is yet again a massive improvement in many ways with lots of bug fixes and new features.
Bug Fixes
Windows: Icon group entries were not working properly in some cases, leading to no icon or too small icons being displayed.
Standalone: The PyQt implicit dependencies were broken. Fixed in 0.6.11.1 already.
Standalone: The datafile collector plugin was broken. Fixed in 0.6.11.3 already.
Standalone: Added support for newer forms of
matplotlib
which need a different file layout and config file format. Fixed in 0.6.11.1 already.Plugins: If there was an error during loading of the module or plugin, it could still be attempted for use. Fixed in 0.6.11.1 already.
Disable notes given by gcc, these were treated as errors. Fixed in 0.6.11.1 already.
Windows: Fix, spaces in gcc installation paths were not working. Partially fixed in 0.6.11.4 already.
Linux: Fix, missing onefile icon error message was not complete. Fixed in 0.6.11.4 already.
Standalone: Workaround
zmq
problem on Windows by duplicating a DLL in both expected places. Fixed in 0.6.11.4 already.Standalone: The
dill-compat
plugin wasn’t working anymore. Fixed in 0.6.11.4 already.Windows: Fix mistaken usage of
sizeof
for wide character buffers. This caused Windows onefile mode in temporary directory. Fixed in 0.6.11.4 already.Windows: Fix, checking subfolder natured crashed with different drives on Windows. Fixed in 0.6.11.4 already.
Windows: Fix, usage from MSVC prompt was no longer working, detect used SDK properly. Fixed in 0.6.11.4 already.
Windows: Fix, old clcache installation uses pth files that prevented our inline copy from working, workaround was added.
Windows: Also specify stack size to be used when compiling with gcc or clang.
Fix, claim of Python 3.9 support also in PyPI metadata was missing. Fixed in 0.6.11.5 already.
Python3.9: Subscripting
type
for annotations wasn’t yet implemented.Python3.9: Better matching of types for metaclass selection, generic aliases were not yet working, breaking some forms of type annotations in base classes.
Windows: Allow selecting
--msvc-version
when a MSVC prompt is currently activated.Windows: Do not fallback to using gcc when
--msvc-version
has been specified. Instead it’s an error if that fails to work.Python3.6+: Added support for
del ()
statements, these have no effect, but were crashing Nuitka.del a # standard form del a, b # same as del a; del b del (a, b) # braces are allowed del () # allowed for consistency, but wasn't working.
Standalone: Added support for
glfw
through a dedicated plugin.macOS: Added support for Python3 from system and CPython official download for latest OS version.
New Features
UI: With
tqdm
installed alongside Nuitka, experimental progress bars are enabled. Do not use `` –show-progress`` or--verbose
as these might have to disable it.Plugins: Added APIs for final processing of the result and onefile post processing.
Onefile: On Windows, the Python process terminates with
KeyboardInterrupt
when the user sends CTRL-break, CTRL-C, shutdown or logoff signals.Onefile: On Windows, in case of the launching process terminating unexpectedly, e.g. due to Taskmanager killing it, or a
os.sigkill
resulting in that, the Python process still terminates withKeyboardInterrupt
.Windows: Now can select icons by index from files with multiple icons.
Optimization
Avoid global passes caused by module specific optimization. The variable completeness os now traced per module and function scope, allowing a sooner usage. Unused temporary variables and closure variables are remove immediately. Recognizing possible auto releases of parameter variables is also instantly.
This should bring down current passes from 5-6 global passes to only 2 global passes in the normal case, reducing frontend compile times in some cases massively.
Better unary node handling. Dedicated nodes per operation allow for more compact memory usage and faster optimization.
Detect flow control and value escape for the repr of node based on type shape.
Enhanced optimization of caught exception references, these never raise or have escapes of control flow.
Exception matching operations are more accurately annotated, and may be recognized to not raise in more cases.
Added optimization for the
issubclass
built-in.Removed scons caching as used on Windows entirely. We should either be using
clcache
orccache
automatically now.Make sure to use
__slots__
for all node classes. In some cases, mixins were preventing the feature from being it. We now enforce their correct specification of slots, which makes sure we can’t miss it anymore. This should again gain more speed and save memory at frontend compile time.Scons: Enhanced gcc version detection with improved caching behavior, this avoids querying the same gcc binary twice.
Organisational
The description of Nuitka on PyPI was absent for a while. Added back by adding long description of the project derived from the README file.
Avoid terms
blacklist
,whilelist
andslave
in the Nuitka code preferringblocklist
,ignorelist
andchild
instead, which are actually more clear anyway. We follow a general trend to do this.Configured the inline copy of Scons so pylance has an easier time to find it.
The git commit hook had stopped applying diffs with newest git, improved that.
Updated description for adding new CPython test suite.
Using https URLs for downloading dependency walker, for it to be more secure.
The commit hook can now be disabled, it’s in the Developer Manual how to do it.
Cleanups
Moved unary operations to their own module, the operators module was getting too crowded.
The scons files for Python C backend and Windows onefile got cleaned up some more and moved more common code to shared modules.
When calling external tools, make sure to provide null input where possible.
Unified calling
install_name_tool
into a single method for adding rpath and name changes both at the same time.Unified how tools like
readelf
,ldconfig
etc. are called and error exits and outputs checked to make sure we don’t miss anything as easily.
Tests
Adapted for some openSUSE specific path usages in standalone tests.
Basic tests for onefile operation and with termination signal sent were added.
Summary
The big changes in this release are the optimization changes to reduce the global passes and the memory savings from other optimization. These should again make Nuitka more scalable with large projects, but there definitely is work remaining.
Adding nice stopping behaviour for the Onefile mode on Windows is seemingly a first, and it wasn’t easy, but it will make it more reliable to users.
Also tooling of gcc and MSVC on Windows got a lot more robust, covering more cases, and macOS support has been renewed and should be a lot better now.
The progress bar is a nice touch and improves the overall feel of the compilation process, but obviously we need to aim at getting faster overall still. For projects using large dependencies, e.g. Pandas the compilation is still far too slow and that will need work on caching frontend results, and better optimization and C code generation for the backend.