<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://nuitka.net/</id>
  <title>Nuitka Blog - Posts tagged compiler</title>
  <updated>2026-03-16T17:32:01.659610+00:00</updated>
  <link href="https://nuitka.net/"/>
  <link href="https://nuitka.net/blog/tag/compiler/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.6">ABlog</generator>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-28.html</id>
    <title>Nuitka Release 2.8</title>
    <updated>2025-11-15T13:52:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-2-8"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release adds a ton of new features and corrections.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: For the “Python Build Standalone” flavor ensured that
debug builds correctly recognize all their specific built-in modules,
preventing potential errors. (Fixed in 2.7.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Linux&lt;/strong&gt;: Fixed a crash when attempting to modify the RPATH of
statically linked executables (e.g., from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imageio-ffmpeg&lt;/span&gt;&lt;/code&gt;). (Fixed
in 2.7.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anaconda&lt;/strong&gt;: Updated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; support to correctly handle path
changes in newer Conda packages and improved path normalization for
robustness. (Fixed in 2.7.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Corrected handling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;QtWebKit&lt;/span&gt;&lt;/code&gt; framework resources.
Previous special handling was removed as symlinking is now default,
which also resolved an issue of file duplication. (Fixed in 2.7.2
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;: Resolved an issue in debug builds where an incorrect
assertion was done during the addition of distribution metadata.
(Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Module&lt;/strong&gt;: Corrected an issue preventing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;stubgen&lt;/span&gt;&lt;/code&gt; from
functioning with Python versions earlier than 3.6. (Fixed in 2.7.1
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Prevented &lt;strong&gt;Nuitka&lt;/strong&gt; from crashing when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt;
was used with a built-in module. (Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Module&lt;/strong&gt;: Addressed a compatibility issue where the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;code&lt;/span&gt;&lt;/code&gt; mode
for the constants blob failed with the C++ fallback. This fallback is
utilized on very old GCC versions (e.g., default on &lt;strong&gt;CentOS7&lt;/strong&gt;),
which are generally not recommended. (Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Resolved an assertion error that could occur in
certain Python setups due to extension module suffix ordering. The
issue involved incorrect calculation of the derived module name when
the wrong suffix was applied (e.g., using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.so&lt;/span&gt;&lt;/code&gt; to derive a module
name like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gdbmmodule&lt;/span&gt;&lt;/code&gt; instead of just &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gdbm&lt;/span&gt;&lt;/code&gt;). This was observed
with Python 2 on &lt;strong&gt;CentOS7&lt;/strong&gt; but could potentially affect other
versions with unconventional extension module configurations. (Fixed
in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.12.0&lt;/strong&gt;: Corrected the usage of an internal structure
identifier that is only available in Python 3.12.1 and later
versions. (Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Prevented crashes in Python setups where importing
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; results in a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PermissionError&lt;/span&gt;&lt;/code&gt;. This typically
occurs in broken installations, for instance, where some packages are
installed with root privileges. (Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Implemented a workaround for data file names that
previously could not be signed within app bundles. The attempt in
release 2.7 to sign these files inadvertently caused a regression for
cases involving illegal filenames. (Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 2.6&lt;/strong&gt;: Addressed an issue where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; objects
lacked the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__func__&lt;/span&gt;&lt;/code&gt; attribute. &lt;strong&gt;Nuitka&lt;/strong&gt; now tracks the original
function as a distinct value. (Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Corrected behavior for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;orderedset&lt;/span&gt;&lt;/code&gt; implementations that lack a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;union&lt;/span&gt;&lt;/code&gt; method, ensuring &lt;strong&gt;Nuitka&lt;/strong&gt; does not attempt to use it.
(Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 2.6&lt;/strong&gt;: Ensured compatibility for setups where the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_PyObject_GC_IS_TRACKED&lt;/span&gt;&lt;/code&gt; macro is unavailable. This macro is now
used beyond assertions, necessitating support outside of debug mode.
(Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 2.6&lt;/strong&gt;: Resolved an issue caused by the absence of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.version_info.releaselevel&lt;/span&gt;&lt;/code&gt; by utilizing a numeric index
instead and adding a new helper function to access it. (Fixed in
2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Module&lt;/strong&gt;: Corrected the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__.main&lt;/span&gt;&lt;/code&gt; value to accurately
reflects the package in which a module is loaded, this was not the
case for Python versions prior to 3.12. (Fixed in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Further improved the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin by
preventing assertions related to empty annotations and by removing
hard-coded module names for greater flexibility. (Fixed in 2.7.1
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: For onefile mode using DLL mode, ensure all necessary
environment variables are correctly set for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;QtWebEngine&lt;/span&gt;&lt;/code&gt;.
Previously, default Qt paths could point incorrectly near the onefile
binary. (Fixed in 2.7.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PySide6&lt;/strong&gt;: Fixed an issue with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; where slots defined in
base classes might not be correctly handled, leading to them only
working for the first class that used them. (Fixed in 2.7.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Enhanced Qt binding plugin support by checking for
module presence without strictly requiring metadata. This improves
compatibility with environments like Homebrew or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;uv&lt;/span&gt;&lt;/code&gt; where package
metadata might be absent. (Fixed in 2.7.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Ensured the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;apple&lt;/span&gt;&lt;/code&gt; target is specified during linking
to prevent potential linker warnings about using an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unknown&lt;/span&gt;&lt;/code&gt;
target in certain configurations. (Fixed in 2.7.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Disabled the use of static &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyenv&lt;/span&gt;&lt;/code&gt;
installations, as this configuration is currently broken. (Fixed in
2.7.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Improved error handling for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-app-protected-resource&lt;/span&gt;&lt;/code&gt; option by catching cases where a
description is not provided. (Fixed in 2.7.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Enhanced workarounds for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt;, now also covering
single-shot timer callbacks. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Ensured that the Qt binding module is included when
using accelerated mode with Qt bindings. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Avoided signing through symlinks and minimized their use
to prevent potential issues, especially during code signing of
application bundles. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Implemented path shortening for paths used in onefile
DLL mode to prevent issues with long or Unicode paths. This also
benefits module mode. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: The options nanny plugin no longer uses a deprecated option
for macOS app bundles, preventing potential warnings or issues.
(Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Ensured the correct macOS target architecture is used.
This particularly useful for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; with universal CPython
binaries, to prevent compile time crashes e.g. when cross-compiling
for a different architecture. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Fixed a crash that occurred on &lt;strong&gt;macOS&lt;/strong&gt; if the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt;
download was rejected by the user. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Improved the warning message related to macOS application
icons for better clarity. (Added in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Corrected an issue with QML plugins on &lt;strong&gt;macOS&lt;/strong&gt; when
using newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; versions. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.10+&lt;/strong&gt;: Fixed a memory leak where the matched value in
pattern matching constructs was not being released. (Fixed in 2.7.4
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3&lt;/strong&gt;: Fixed an issue where exception exits for larger
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt; objects, which are not optimized away, were not correctly
annotated by the compiler. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Corrected an issue with the automatic use of icons for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; applications on non-Windows if Windows icon options were
used. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile&lt;/strong&gt;: When using DLL mode there was a load error for the DLL
with MSVC 14.2 or earlier, but older MSVC is to be supported. (Fixed
in 2.7.5 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile&lt;/strong&gt;: Fix, the splash screen was showing in DLL mode twice or
more; these extra copies couldn’t be stopped. (Fixed in 2.7.5
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Fixed an issue where data files were no longer
checked for conflicts with included DLLs. The order of data file and
DLL copying was restored, and macOS app signing was made a separate
step to remove the order dependency. (Fixed in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Corrected our workaround using symlinks for files that
cannot be signed. When &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--output-directory&lt;/span&gt;&lt;/code&gt; was used, as it made
incorrect assumptions about the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dist&lt;/span&gt;&lt;/code&gt; folder path. (Fixed in 2.7.6
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Prevented checks on onefile target specifications when not
actually compiling in onefile mode, e.g. on macOS with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mode=app&lt;/span&gt;&lt;/code&gt;. (Fixed in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Improved error messages for data directory options by include
the relevant part in the output. (Fixed in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Suppressed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UserWarning&lt;/span&gt;&lt;/code&gt; messages from the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; module during compilation. (Fixed in 2.7.6
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.11+&lt;/strong&gt;: Fixed an issue where descriptors for compiled
methods were incorrectly exposed for Python 3.11 and 3.12. (Fixed in
2.7.7 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Avoided loading modules when checking for data file
existence. This prevents unnecessary module loading and potential
crashes in broken installations. (Fixed in 2.7.9 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;global_change_function&lt;/span&gt;&lt;/code&gt; anti-bloat feature now
operates on what should be the qualified names (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__qualname__&lt;/span&gt;&lt;/code&gt;)
instead of just function names, preventing incorrect replacements of
methods with the same name in different classes. (Fixed in 2.7.9
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile&lt;/strong&gt;: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;containing_dir&lt;/span&gt;&lt;/code&gt; attribute of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt;
object was regressed in DLL mode on &lt;strong&gt;Windows&lt;/strong&gt;, pointing to the
temporary DLL directory instead of the directory containing the
onefile binary. (Fixed in 2.7.10 already, note that the solution in
2.7.9 had a regression.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;: Fixed a crash that occurred when an import
attempted to go outside its package boundaries. (Fixed in 2.7.11
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Ignored a warning from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;codesign&lt;/span&gt;&lt;/code&gt; when using self-signed
certificates. (Fixed in 2.7.11 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile&lt;/strong&gt;: Fixed an issue in DLL mode where environment variables
from other onefile processes (related to temporary paths and process
IDs) were not being ignored, which could lead to conflicts. (Fixed in
2.7.12 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;: Fixed a potential crash that could occur when
processing an empty code body. (Fixed in 2.7.13 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Ensured that DLL directories created by plugins could be
at the top level when necessary, improving flexibility. (Fixed in
2.7.13 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile&lt;/strong&gt;: On &lt;strong&gt;Windows&lt;/strong&gt;, corrected an issue in DLL mode where
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;original_argv0&lt;/span&gt;&lt;/code&gt; was &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;; it is now properly set. (Fixed in
2.7.13 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Avoided a warning that appeared on newer macOS versions.
(Fixed in 2.7.13 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Allowed another DLL to be missing for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; to
support more setups. (Fixed in 2.7.13 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Corrected the existing import workaround for Python
3.12 that was incorrectly renaming existing modules of matching names
into sub-modules of the currently imported module. (Fixed in 2.7.14
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: On &lt;strong&gt;Windows&lt;/strong&gt;, ensured that the DLL search path
correctly uses the proper DLL directory. (Fixed in 2.7.14 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.5+&lt;/strong&gt;: Fixed a memory leak where the called object could be
leaked in calls with keyword arguments following a star dict
argument. (Fixed in 2.7.14 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.13&lt;/strong&gt;: Fixed an issue where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyState_FindModule&lt;/span&gt;&lt;/code&gt; was not
working correctly with extension modules due to sub-interpreter
changes. (Fixed in 2.7.14 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile&lt;/strong&gt;: Corrected an issue where the process ID (PID) was not
set in a timely manner, which could affect onefile operations. (Fixed
in 2.7.14 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;: Fixed a crash that could occur when a function
with both a star-list argument and keyword-only arguments was called
without any arguments. (Fixed in 2.7.16 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Corrected an issue where distribution names were not
checked case-insensitively, which could lead to metadata not being
included. (Fixed in 2.7.16 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Linux&lt;/strong&gt;: Avoid using full zlib with extern declarations but instead
only the CRC32 functions we need. Otherwise conflicts with OS headers
could occur.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Fixed an issue where scanning for standard library
dependencies was unnecessarily performed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Made the runtime query code robust against modules that
in stdout during import&lt;/p&gt;
&lt;p&gt;This affected at least &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt; giving some warnings on Windows with
mere stdout prints. We now have a marker for the start of our output
that we look for and safely ignore them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Do not attempt to attach to the console when running in
DLL mode. For onefile with DLL mode, this was unnecessary as the
bootstrap already handles it, and for pure DLL mode, it is not
desired.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile&lt;/strong&gt;: Removed unnecessary parent process monitoring in onefile
mode, as there is no child process launched.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anaconda&lt;/strong&gt;: Determine version and project name for conda packages
more reliably&lt;/p&gt;
&lt;p&gt;It seems Anaconda is giving variables in package metadata and often
no project name, so we derive it from the conda files and its meta
data in those cases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Make sure the SSL certificates are found when downloading
on macOS, ensuring successful downloads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Fixed an issue where console mode &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;attach&lt;/span&gt;&lt;/code&gt; was not
working in onefile DLL mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons&lt;/strong&gt;: Fixed an issue where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pragma&lt;/span&gt;&lt;/code&gt; was used with older
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt;&lt;/code&gt; &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt;&lt;/code&gt; can give warnings about them. This fixes building on
older OSes with the system gcc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;: Fix, need to avoid using filenames with more than
250 chars for long module names.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;For cache files, const files, and C files, we need to make sure,
we don’t exceed the 255 char limits per path element that
literally every OS has.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also enhanced the check code for legal paths to cover this, so
user options are covered from this errors too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved file hashing to file operations where it makes more sense to
allow module names to use hashing to provide a legal filename to
refer to themselves.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;: Fixed an issue where walking included compiled
packages through the Nuitka loader could produce incorrect names in
some cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Fixed wrong calls made when checking &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;stderr&lt;/span&gt;&lt;/code&gt;
properties during launch if it was &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;: Fixed an issue where the segfault non-deployment
disable itself before doing anything else.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Fix, the warning to choose a GUI plugin for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; was given with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; plugin enabled still,
which is of course not appropriate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distutils&lt;/strong&gt;: Fix, do not recreate the build folder with a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.gitignore&lt;/span&gt;&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;We were re-creating it as soon as we looked at what it would be, now
it’s created only when asking for that to happen.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No-GIL&lt;/strong&gt;: Addressed compile errors for the free-threaded dictionary
implementation that were introduced by necessary hot-fixes in the
version 2.7.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;: Fixed handling of generic classes and generic type
declarations in Python 3.12.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Fixed an issue where entitlements were not properly
provided for code signing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile&lt;/strong&gt;: Fixed delayed shutdown for terminal applications in
onefile DLL mode.&lt;/p&gt;
&lt;p&gt;Was waiting for non-used child processes, which don’t exist and then
the timeout for that operation, which is always happening on CTRL-C
or terminal shutdown.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.13: Fix, seems interpreter frames with None code objects
exist and need to be handled as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Fix, need to allow for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; package to be
user provided.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Avoided using non-encodable dist and build folder names.&lt;/p&gt;
&lt;p&gt;Some paths don’t become short, but still be non-encodable from the
file system for tools. In these cases, temporary filenames are used
to avoid errors from C compilers and other tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.13: Fix, ignore stdlib &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cgi&lt;/span&gt;&lt;/code&gt; module that might be left over
from previous installs&lt;/p&gt;
&lt;p&gt;The module was removed during development, and if you install over an
old alpha version of 3.13 a newer Python, Nuitka would crash on it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Allowed the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib&lt;/span&gt;&lt;/code&gt; folder for the Python Build Standalone
flavor, improving compatibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Allowed libraries for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rpath&lt;/span&gt;&lt;/code&gt; resolution to be found in
all Homebrew folders and not just &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile&lt;/strong&gt;: Need to allow &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;..&lt;/span&gt;&lt;/code&gt; in paths to allow outside
installation paths.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="package-support"&gt;
&lt;h2&gt;Package Support&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Introduced support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nicegui&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Extended support to include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xgboost.core&lt;/span&gt;&lt;/code&gt; on
&lt;strong&gt;macOS&lt;/strong&gt;. (Added in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added needed data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ursina&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Extended &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libonnxruntime&lt;/span&gt;&lt;/code&gt; support to &lt;strong&gt;macOS&lt;/strong&gt;,
enabling its use in compiled applications on this platform. (Added in
2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added necessary data files for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygameextra&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Included GL backends for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;arcade&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added more data directories for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ursina&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;panda3d&lt;/span&gt;&lt;/code&gt; packages, improving their out-of-the-box compatibility.
(Added in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt; package. (Added
in 2.7.5 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyTaskbar&lt;/span&gt;&lt;/code&gt; package. (Added
in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; support for Python 3.13 with official
CPython builds, which now use framework files for Tcl/Tk. (Added in
2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;paddlex&lt;/span&gt;&lt;/code&gt; package. (Added in
2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jinxed&lt;/span&gt;&lt;/code&gt; package, which
dynamically loads terminal information. (Added in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ansicon&lt;/span&gt;&lt;/code&gt; package by including a
missing DLL. (Added in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Enhanced configuration for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pypylon&lt;/span&gt;&lt;/code&gt; package,
however, it’s not sufficient. (Added in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; versions. (Added in
2.7.7 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for older &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vtk&lt;/span&gt;&lt;/code&gt; package. (Added in
2.7.8 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;certifi&lt;/span&gt;&lt;/code&gt; versions that use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resources&lt;/span&gt;&lt;/code&gt;. (Added in 2.7.9 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;reportlab.graphics.barcode&lt;/span&gt;&lt;/code&gt;
module. (Added in 2.7.9 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package. (Added in 2.7.11 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.7.12 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.7.12 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for older versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt;
package (specifically version 4.4). (Added in 2.7.12 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added initial support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vllm&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.7.12 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Ensured all necessary DLLs for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygame&lt;/span&gt;&lt;/code&gt; package
are included. (Added in 2.7.12 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zaber_motion&lt;/span&gt;&lt;/code&gt; package. (Added in 2.7.13 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added missing dependencies for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pymediainfo&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.7.13 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt;
package by including a missing dependency. (Added in 2.7.13 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.7.14 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wordninja-enhanced&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.7.14 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Fast-SSIM&lt;/span&gt;&lt;/code&gt; package. (Added
in 2.7.14 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added a missing data file for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rfc3987_syntax&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.7.14 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added missing data files for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;trimesh&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.7.15 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gdsfactory&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;klayout&lt;/span&gt;&lt;/code&gt;,
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;kfactory&lt;/span&gt;&lt;/code&gt; packages. (Added in 2.7.15 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vllm&lt;/span&gt;&lt;/code&gt; package. (Added in
2.7.16 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkinterweb&lt;/span&gt;&lt;/code&gt; package. (Added in 2.7.15 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cmsis_pack_manager&lt;/span&gt;&lt;/code&gt; package. (Added in 2.7.15 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added missing data files for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;idlelib&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.7.15 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Avoid including debug binary on non-Windows for Qt
Webkit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Add dependencies for &lt;strong&gt;pymediainfo&lt;/strong&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;winpty&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;litellm&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;traits&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyface&lt;/span&gt;&lt;/code&gt;
packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rasterio&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ortools&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support newer “vtk” package&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.14&lt;/strong&gt;: Added experimental support for Python3.14, not
recommended for use yet, as this is very fresh and might be missing a
lot of fixes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release&lt;/strong&gt;: Added an extra dependency group for the Nuitka
build-backend, intended for use in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt; and other
build-system dependencies. To use it depend in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka[build-wheel]&lt;/span&gt;&lt;/code&gt; instead of Nuitka. (Added in 2.7.7 already.)&lt;/p&gt;
&lt;p&gt;For release we also added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka[onefile]&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka[standalone]&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka[app]&lt;/span&gt;&lt;/code&gt; as extra dependency groups.
If icon conversions are used, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka[onefile,icon-conversion]&lt;/span&gt;&lt;/code&gt; adds the necessary packages for
that. If you don’t care about what’s being pulled in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka[all]&lt;/span&gt;&lt;/code&gt;
can be used, by default &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka&lt;/span&gt;&lt;/code&gt; only comes with the bare minimum
needed and will inform about missing packages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-sign-keyring-filename&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-sign-keyring-password&lt;/span&gt;&lt;/code&gt; to automatically unlock a keyring
for use during signing. This is very useful for CI where no UI prompt
can be used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Detect when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;input&lt;/span&gt;&lt;/code&gt; cannot be used due to no console
or the console not providing proper standard input and produce a
dialog for entry instead. Shells like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cmd.exe&lt;/span&gt;&lt;/code&gt; execute inputs as
commands entered when attaching to them. With this, the user is
informed to make the input into the dialog instead. In case of no
terminal, this just brings up the dialog for GUI mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Introduced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;global_change_function&lt;/span&gt;&lt;/code&gt; to the anti-bloat
engine, allowing function replacements across all sub-modules of a
package at once. (Added in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reports&lt;/strong&gt;: For Python 3.13+, the compilation report now includes
information on GIL usage. (Added in 2.7.7 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Added an option to prevent an application from running in
multiple instances. (Added in 2.7.7 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AIX&lt;/strong&gt;: Added support for this OS as well, now standalone and module
mode work there too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons&lt;/strong&gt;: When C a compilation fails to due warnings in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt;
mode, recognize that and provide the proper extra options to use if
you want to ignore that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Non-Deployment&lt;/strong&gt;: Added a non-deployment handler to catch modules&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Non-Deployment&lt;/strong&gt;: Added non-deployment handler to catch modules
that error exit on import, while assumed to work perfectly.&lt;/p&gt;
&lt;p&gt;This will give people an indication that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; module is
expected to work and that maybe just the newest version is not and we
need to be told about it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Non-Deployment&lt;/strong&gt;: Added a non-deployment handler for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;DistributionNotFound&lt;/span&gt;&lt;/code&gt; exceptions in the main program, which now
points the user to the necessary metadata options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Made &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-data-files-external&lt;/span&gt;&lt;/code&gt; the primary option for
placing data files alongside the created program.&lt;/p&gt;
&lt;p&gt;This now works with standalone mode too, and is no longer onefile
specific, the name should reflect that and people can now use it more
broadly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Added support for multiple warnings of the same kind.
The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin needs that as it supports multiple
packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Added detector for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin that
detects usages of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cloudpickle&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ray.cloudpickle&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: Add support for including Visual Code runtime dlls on
Windows.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;When MSVC (Visual Studio) is installed, we take the runtime DLLs
from its folders. We cannot take the ones from the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;redist&lt;/span&gt;&lt;/code&gt;
packages installed to system folders for license reasons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gives a warning when these DLLs would be needed, but were not
found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We might want to add an option later to exclude them again, for
size purposes, but correctness out of the box is more important
for now.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Make sure the distribution name is correct for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-distribution-metadata&lt;/span&gt;&lt;/code&gt; option values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Added support for configuring re-compilation of
extension modules from their source code.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;When we have both Python code and an extension module, we only had
a global option available on the command line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This adds &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recompile-extension-modules&lt;/span&gt;&lt;/code&gt; for more fine grained
choices as it allows to specify names and patterns.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zmq&lt;/span&gt;&lt;/code&gt;, we need to enforce it to never be compiled, as it
checks if it is compiled with Cython at runtime, so re-compilation
is never possible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reports&lt;/strong&gt;: Include environment flags for C compiler and linker
picked up for the compilation. Sometimes these cause compilation
errors that and this will reveal there presence.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enhanced detection of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt;&lt;/code&gt; statements that use compile-time
constant values which are not actual exception instances.&lt;/p&gt;
&lt;p&gt;This improvement prevents &lt;strong&gt;Nuitka&lt;/strong&gt; from crashing during code
generation when encountering syntactically valid but semantically
incorrect code, such as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt; &lt;span class="pre"&gt;NotImplemented&lt;/span&gt;&lt;/code&gt;. While such code is
erroneous, it should not cause a compiler crash. (Added in 2.7.1
already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With unknown locals dictionary variables trust very hard values there
too.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;With this using hard import names also optimize inside of classes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This makes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcloud&lt;/span&gt;&lt;/code&gt; metadata work, which previously wasn’t
resolved in their code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; support by removing the general
requirement for onefile mode. Onefile mode is now only enforced for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;QtWebEngine&lt;/span&gt;&lt;/code&gt; due to its specific stability issues when not bundled
this way. (Added in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons&lt;/strong&gt;: Added support for C23 embedding of the constants blob with
ClangCL, avoiding the use of resources. Since the onefile bootstrap
does not yet honor this for its payload, this feature is not yet
complete but could help with size limitations in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Overhauled the UPX plugin.&lt;/p&gt;
&lt;p&gt;Use better compression than before, hint the user at disabling
onefile compression where applicable to avoid double compression.
Output warnings for files that are not considered compressible. Check
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;upx&lt;/span&gt;&lt;/code&gt; binary sooner.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons&lt;/strong&gt;: Avoid compiling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hacl&lt;/span&gt;&lt;/code&gt; code for macOS where it’s not
needed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="anti-bloat"&gt;
&lt;h2&gt;Anti-Bloat&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Improved handling of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;astropy&lt;/span&gt;&lt;/code&gt; package by implementing global
replacements instead of per-module ones. Similar global handling has
also been applied to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; to reduce overhead. (Added in 2.7.1
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;docutils&lt;/span&gt;&lt;/code&gt; usage in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;markdown2&lt;/span&gt;&lt;/code&gt; package. (Added in
2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduced compiled size by avoiding the use of “docutils” within the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;markdown2&lt;/span&gt;&lt;/code&gt; package. (Added in 2.7.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid including the testing framework from the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;langsmith&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jax.version&lt;/span&gt;&lt;/code&gt;. (Added in 2.7.6
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; from the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;reportlab&lt;/span&gt;&lt;/code&gt; package. (Added
in 2.7.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;keras&lt;/span&gt;&lt;/code&gt; package using a more
global approach. (Added in 2.7.11 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid including the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;triton&lt;/span&gt;&lt;/code&gt; package when compiling
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt;. (Added in 2.7.11 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid a bloat warning for an optional import in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;seaborn&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.7.13 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid compiling generated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;google.protobuf.*_pb2&lt;/span&gt;&lt;/code&gt; files. (Added in
2.7.7 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;triton&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; when using the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xformers&lt;/span&gt;&lt;/code&gt; package. (Added in 2.7.16 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refined &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; support to not remove &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas.testing&lt;/span&gt;&lt;/code&gt; when
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; usage is allowed. (Added in 2.7.16 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid compiling the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; module that is very slow and
contains generated code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cupy&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid false bloat warning in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;seadoc&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cupy.testing&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cupy&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;roboflow&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ray&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vllm&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Remove obsolete options to control the compilation mode from
help output. We are keeping them only to not break existing
workflows, but &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mode=...&lt;/span&gt;&lt;/code&gt; should be used now, and these options
will start triggering warnings soon.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.13.4&lt;/strong&gt;: Reject broken CPython official release for Windows.&lt;/p&gt;
&lt;p&gt;The link library included is not the one needed for GIL, and as such
it breaks Nuitka heavily and must be errored out on, all smaller or
larger micro versions work, but this one does not.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release&lt;/strong&gt;: Do not use Nuitka 2.7.9 as it broke data file access via
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; in onefile mode on Windows. This is a brown paper bag
release, with 2.7.10 containing only the fix for that. Sorry for the
inconvenience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release&lt;/strong&gt;: Ensured proper handling of newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; versions
during Nuitka installation. (Fixed in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Sort &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--list-distribution-metadata&lt;/span&gt;&lt;/code&gt; output and remove
duplicates. (Changed in 2.7.8 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Visual Code&lt;/strong&gt;: Added a Python 2.6 configuration for Win32 to aid in
comparisons and legacy testing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Now lists available Qt plugin families if
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-qt-plugin&lt;/span&gt;&lt;/code&gt; cannot find one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Warn about compiling a file named &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__.py&lt;/span&gt;&lt;/code&gt; which
should be avoided, instead you should specify the package directory
in that case.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Make it an error to compile a file named &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__.py&lt;/span&gt;&lt;/code&gt;
for standalone mode.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--edit&lt;/span&gt;&lt;/code&gt; option now correctly finds files even
when using long, non-shortened temporary file paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyside6&lt;/span&gt;&lt;/code&gt; plugin now enforces
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-debug-immortal-assumptions&lt;/span&gt;&lt;/code&gt; when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; is on because
PySide6 violates these and we don’t need Nuitka to check for that
then as it will abort when it finds them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality&lt;/strong&gt;: Avoid writing auto-formatted files with same contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;That avoids stirring up tools that listen to changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For example the Nuitka website auto-builder otherwise rebuilt per
release post on docs update.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality&lt;/strong&gt;: Use latest version of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;deepdiff&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality&lt;/strong&gt;: Added autoformat for JSON files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release&lt;/strong&gt;: The man pages were using outdated options and had no
example for standalone or app modes. Also the actual options were no
longer included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: Use the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mode&lt;/span&gt;&lt;/code&gt; options in the issue template as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: Enhanced wordings for bug report template to give more
directions and more space for excellent reports to be made.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: The bug report template now requests the output of our
package metadata listing tool, as it provides more insight into how
Nuitka perceives the environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;: Re-enabled important warnings for Clang, which had
unnoticed for a long time and prevented a few things from being
recognized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;: Support arbitrary debuggers through
&lt;cite&gt;–debugger-choice&lt;/cite&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;Support arbitrary debuggers for use in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debugger&lt;/span&gt;&lt;/code&gt; mode, if
you specify all of their command line you can do anything there.&lt;/p&gt;
&lt;p&gt;Also added predefined &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;valgrind-memcheck&lt;/span&gt;&lt;/code&gt; mode for memory
checker tool of Valgrind to be used.&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Added rich as a progress bar that can be used. Since it’s
available via pip, it can likely be found and requires no inline
copy. Added colors and similar behavior for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Remove obsolete warning for Linux with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;upx&lt;/span&gt;&lt;/code&gt; plugin.&lt;/p&gt;
&lt;p&gt;We don’t use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;appimage&lt;/span&gt;&lt;/code&gt; anymore for a while now, so its constraints
no longer apply.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Add warnings for module specific options too. The logic to
not warn on GitHub Actions was inverted, this restores warnings for
normal users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Output the module name in question for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;options-nanny&lt;/span&gt;&lt;/code&gt;
plugin and parameter warnings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: When a forbidden import comes from an implicit import, report
it properly.&lt;/p&gt;
&lt;p&gt;Sometimes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files from extension modules cause an import, but
it was not clear which one; now it will indicate the module causing
it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: More clear error message in case a Python for scons was not
found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;: Cover debug mode compilation at least once.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality&lt;/strong&gt;: Resolve paths from all OSes in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--edit&lt;/span&gt;&lt;/code&gt;. Sometime I
want to look at a file on a different OS, and there is no need to
enforce being on the same one for path resolution to work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;: Updated to a newer Ubuntu version for testing, as to get
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format&lt;/span&gt;&lt;/code&gt; installed anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt; Allow for C stack output in signal handlers, this is
most useful when doing the non-deployment handler that catches them
to know where they came from more precisely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI&lt;/strong&gt;: Show no-GIL in output of Python flavor in compilation if
relevant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;License:&lt;/strong&gt; Changed the license of remaining project files to
&lt;strong&gt;AGPLv3&lt;/strong&gt; granting an exception for created binaries much like gcc
does. As a result, going forward we need everybody to sign a CLA that
allows re-licensing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Removed Azure CI configuration, as testing has been fully migrated to
GitHub Actions. (Changed in 2.7.9 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved test robustness against short paths for package-containing
directories. (Added in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prevented test failures caused by rejected download prompts during
test execution, making CI more stable. (Added in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refactored common testing code to avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doctests&lt;/span&gt;&lt;/code&gt;,
preventing warnings in specific standalone mode test scenarios
related to reference counting. (Added in 2.7.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: Cover the memory leaking call re-formulation with a reference
count test.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Improved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; integration by using the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__loader__&lt;/span&gt;&lt;/code&gt; attribute of the registering module for loader type
registration, avoiding modification of the global &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;builtins&lt;/span&gt;&lt;/code&gt;
dictionary. (Fixed in 2.7.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved the logging mechanism for module search scans. It is now
possible to enable tracing for individual &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locateModule&lt;/span&gt;&lt;/code&gt; calls,
significantly enhancing readability and aiding debugging efforts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons&lt;/strong&gt;: Refactored architecture specific options into dedicated
functions to improve code clarity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Spelling&lt;/strong&gt;: Various spelling and wording cleanups.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;#ifdef&lt;/span&gt;&lt;/code&gt; in C code templates, and let’s just avoid
it generally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added missing slot function names to the ignored word list.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renamed variables related to slots to be more verbose and proper
spelling as a result, as that’s for better understanding of their
use anyway.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons&lt;/strong&gt;: Specify versions supported for Scons by excluding the ones
that are not, rather than manually maintaining a list. This adds
automatic support for Python 3.14.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: Removed a useless call to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;intern&lt;/span&gt;&lt;/code&gt; as it did not have
thought it does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attach copyright during code generation for code specializations&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This also enhances the formatting for almost all files by making
leading and trailing new lines more consistent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One C file turns out unused and was removed as a left over from a
previous refactoring.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release was supposed to focus on scalability, but that didn’t
happen &lt;strong&gt;again&lt;/strong&gt; due to a variety of important issues coming up as well
as a created downtime after high private difficulties after a planned
surgery. However, the upcoming release will have it finally.&lt;/p&gt;
&lt;p&gt;The onefile DLL mode as used on Windows has driven a lot of need for
corrections, some of which are only in the final release, and this is
probably the first time it should be usable for everything.&lt;/p&gt;
&lt;p&gt;For compatibility, working with the popular (yet - not yes recommended
&lt;strong&gt;UV-Python&lt;/strong&gt;), &lt;strong&gt;Windows&lt;/strong&gt; UI fixes for temporary onefile and &lt;strong&gt;macOS&lt;/strong&gt;
improvements, as well as improved &lt;strong&gt;Android&lt;/strong&gt; support are excellent.&lt;/p&gt;
&lt;p&gt;The next release of Nuitka however will have to focus on scalability and
maintenance only. But as usual, not sure if it can happen.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-28.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2025-11-15T13:52:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-27.html</id>
    <title>Nuitka Release 2.7</title>
    <updated>2025-05-30T07:02:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-2-7"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release adds a ton of new features and corrections.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Correctly recognize self-dependencies of DLLs that include
an architecture suffix on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x86_64&lt;/span&gt;&lt;/code&gt;. (Fixed in 2.6.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Resolved an issue where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files associated
with versioned extension module filenames were not detected. (Fixed
in 2.6.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Fixed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; file parsing failures caused by
single-line triple quotes. (Fixed in 2.6.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Corrected the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__.origin&lt;/span&gt;&lt;/code&gt; path for packages
where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__&lt;/span&gt;&lt;/code&gt; is an extension module.&lt;/p&gt;
&lt;p&gt;While this primarily affected the module’s &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;repr&lt;/span&gt;&lt;/code&gt; string, code
relying on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;origin&lt;/span&gt;&lt;/code&gt; for resource location could previously
encounter errors. (Fixed in 2.6.1 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multidist:&lt;/strong&gt; Ensured created binaries use the name they were
launched with, rather than the path of the actual binary file.&lt;/p&gt;
&lt;p&gt;This allows entry points invoked via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;subprocess&lt;/span&gt;&lt;/code&gt; with different
process names to function correctly from a single binary
distribution. (Fixed in 2.6.1 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Fixed unusable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.stdin&lt;/span&gt;&lt;/code&gt; when attaching to a console
(&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-console-mode=attach&lt;/span&gt;&lt;/code&gt;) without an active terminal, which
previously led to errors when forking processes. (Fixed in 2.6.1
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modules:&lt;/strong&gt; Prevented crashes in module mode when encountering
potentially optimizable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib&lt;/span&gt;&lt;/code&gt; distribution calls that are
non-optimizable in this mode. (Fixed in 2.6.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3:&lt;/strong&gt; Resolved errors with newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; versions
caused by namespace packages not providing a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;path_finder&lt;/span&gt;&lt;/code&gt;. (Fixed
in 2.6.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Removed a UTF-8 comment from a C header file that could
prevent MSVC from compiling correctly in certain system locales.
(Fixed in 2.6.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Ensured that user-inhibited data files have their
associated tags cleared to prevent confusion in plugins. (Fixed in
2.6.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Corrected &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil.iter_modules&lt;/span&gt;&lt;/code&gt; to prevent
incomplete module listings.&lt;/p&gt;
&lt;p&gt;Previously, if a package directory existed, Python’s file finder
could interfere, yielding incomplete results that excluded compiled
modules. (Fixed in 2.6.2 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Addressed a C compiler warning related to onefile
compression on 32-bit Windows during bootstrap compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.12+:&lt;/strong&gt; Resolved a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SystemError&lt;/span&gt;&lt;/code&gt; when accessing the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;module&lt;/span&gt;&lt;/code&gt; attribute of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Metadata:&lt;/strong&gt; Handled cases where reading record data from
distribution files might fail because the files do not always exist.
(Fixed in 2.6.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Fixed dependency resolution for shared libraries
that are symbolic links on non-Windows platforms.&lt;/p&gt;
&lt;p&gt;Resolution failed if dependencies originated from the symlink target
and that target was not in the system library path or nearby as
another symlink. (Fixed in 2.6.3 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Prevented the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;msvcp140.dll&lt;/span&gt;&lt;/code&gt; from
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; (specifically &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shiboken6&lt;/span&gt;&lt;/code&gt;) by other packages to avoid
potential compatibility crashes. (Fixed in 2.6.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Fixed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; file parsing failures caused by
comments appearing after &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;import&lt;/span&gt;&lt;/code&gt; statements. (Fixed in 2.6.3
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Corrected the output of DLL and EXE listings, which no longer
provided the correct sub-folder information. (Fixed in 2.6.3
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Restored the attachment of icons to application bundles.
(Fixed in 2.6.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile:&lt;/strong&gt; Resolved a C compiler warning on 32-bit Windows related
to missing type conversion for the decompression buffer size. (Fixed
in 2.6.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.12+:&lt;/strong&gt; Ensured type aliases have a usable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;module&lt;/span&gt;&lt;/code&gt;
attribute containing the correct module name. (Fixed in 2.6.3
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.12+:&lt;/strong&gt; Improved compatibility for type alias values.&lt;/p&gt;
&lt;p&gt;Corrected the creation process for compound type aliases, resolving
errors in libraries like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt; when used in schemas. (Fixed in
2.6.5 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.12+:&lt;/strong&gt; Implemented a workaround for extension modules
failing to set the correct package context, which previously caused
significant compatibility issues (e.g., namespace collisions).&lt;/p&gt;
&lt;p&gt;This was particularly problematic when static libpython was
unavailable (common on Windows and official macOS CPython). The
workaround involves saving/restoring the module context and
correcting potentially wrongly named sub-modules created during
extension module loading.&lt;/p&gt;
&lt;p&gt;This improves compatibility for packages like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6QtAds&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;onnx&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mediapipe&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;paddleocr&lt;/span&gt;&lt;/code&gt;, and newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; versions,
which were previously affected. (Fixed in 2.6.6 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Prevented a crash in the Nuitka Package Configuration
helper function &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;get_data&lt;/span&gt;&lt;/code&gt; when falling back to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil&lt;/span&gt;&lt;/code&gt; for
data files not found naively. (Fixed in 2.6.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Corrected the rpath value used for finding dependent
DLLs in sub-folders on non-Windows platforms.&lt;/p&gt;
&lt;p&gt;It previously excluded the DLL’s own folder (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;$ORIGIN&lt;/span&gt;&lt;/code&gt;), sometimes
preventing DLLs from loading. (Fixed in 2.6.7 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Preserved existing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;$ORIGIN&lt;/span&gt;&lt;/code&gt;-relative rpaths in
DLLs on Linux.&lt;/p&gt;
&lt;p&gt;Some PyPI packages rely on these existing paths to reference content
in other packages; replacing them previously broke these setups.
(Fixed in 2.6.7 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Now treats shared library dependencies specified with
paths as implicit rpaths.&lt;/p&gt;
&lt;p&gt;This fixes builds using Python distributions like &lt;strong&gt;Python Build
Standalone&lt;/strong&gt; (installed by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;uv&lt;/span&gt;&lt;/code&gt;), which may have an
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;$ORIGIN&lt;/span&gt;&lt;/code&gt;-relative &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; dependency that needs to be
respected. (Fixed in 2.6.7 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3:&lt;/strong&gt; Ensured generators preserve external exceptions and
restore their own upon resuming.&lt;/p&gt;
&lt;p&gt;This fixes issues where generators used as context managers, handling
an exception via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt;&lt;/code&gt;, could prevent an outer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; statement
from correctly re-raising its own exception. (Fixed in 2.6.7
already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Android:&lt;/strong&gt; Removed the Termux &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rpath&lt;/span&gt;&lt;/code&gt; value pointing into its
installation from standalone builds.&lt;/p&gt;
&lt;p&gt;While ineffective after APK packaging due to Android security, this
value should not have been present. (Fixed in 2.6.7 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python Build Standalone:&lt;/strong&gt; Added the rpath to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; by
default in all modes for &lt;strong&gt;Python Build Standalone&lt;/strong&gt; distributions.&lt;/p&gt;
&lt;p&gt;This resolves issues with uninstalled &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; on &lt;strong&gt;Linux&lt;/strong&gt;.
(Fixed in 2.6.8 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Resolved incompatibility with older Linux
distributions caused by using newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;patchelf&lt;/span&gt;&lt;/code&gt; options introduced
in 2.6.8’s rpath changes. (Fixed in 2.6.9 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.9:&lt;/strong&gt; Fixed errors in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;spacy&lt;/span&gt;&lt;/code&gt; plugin when using older
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata&lt;/span&gt;&lt;/code&gt; versions. (Fixed in 2.6.8 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Prevented &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requests&lt;/span&gt;&lt;/code&gt; package imports from being
incorrectly treated as sub-packages. (Fixed in 2.6.8 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distutils on macOS:&lt;/strong&gt; Improved integration for scanned extension
modules where determining the correct architecture can be difficult.
(Fixed in 2.6.8 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Defined &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dotnet&lt;/span&gt;&lt;/code&gt; as a dependency to ensure all UI
features requiring it are properly enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Ensured the correct &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;link.exe&lt;/span&gt;&lt;/code&gt; executable is used for
the MSVC backend, avoiding potential conflicts with linkers added to
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; (e.g., by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt;&lt;/code&gt;). (Fixed in 2.6.9 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Avoided using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;config.txt&lt;/span&gt;&lt;/code&gt; with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; when using
MSVC.&lt;/p&gt;
&lt;p&gt;This prevents potential race conditions during the first use where
multiple &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; threads might attempt to create the file
simultaneously. (Fixed in 2.6.9 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Ensured extension modules are loaded during the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;create_module&lt;/span&gt;&lt;/code&gt; phase of the Nuitka loader for better
compatibility.&lt;/p&gt;
&lt;p&gt;Loading them later during &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec_module&lt;/span&gt;&lt;/code&gt; caused issues with some
extension modules, such as those created by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mypy&lt;/span&gt;&lt;/code&gt; (used in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.13:&lt;/strong&gt; Corrected the workaround for extension module package
context issues, resolving errors that occurred when the module and
package names were identical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Module:&lt;/strong&gt; Prevented stub generation attempts for namespace
packages, which previously resulted in warnings as there is no source
code to process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debian:&lt;/strong&gt; Ensured consistent casing for the installer name used in
Debian package metadata.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Poetry:&lt;/strong&gt; Updated detection logic for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;poetry&lt;/span&gt;&lt;/code&gt; versions to
handle changes in installer name casing, which could previously
impact system DLL usage determination.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Module:&lt;/strong&gt; Improved stub generation (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;stubgen&lt;/span&gt;&lt;/code&gt;) for generics,
handling of missing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;typing&lt;/span&gt;&lt;/code&gt; imports, and other cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Fixed potential corruption and crashes in the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin when handling functions with keyword defaults.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;py-cpuinfo&lt;/span&gt;&lt;/code&gt; versions on
non-Windows platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accelerated:&lt;/strong&gt; Prevented Nuitka’s &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path_hook&lt;/span&gt;&lt;/code&gt; from overriding
standard Python path loader hooks, as it doesn’t yet support all
their functionalities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.12.7+:&lt;/strong&gt; Set additional unicode immortal attributes
(including for non-attributes) to prevent triggering Python core
assertions when enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Ensured errors are properly fetched during class
variable lookups.&lt;/p&gt;
&lt;p&gt;Previously, an error exit could occur without an exception being set,
leading to crashes when attempting to attach tracebacks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.13:&lt;/strong&gt; Adapted dictionary value creation and copying to
follow internal layout changes, preventing potential crashes and
corruption caused by using obsolete Python 3.11/3.12 code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Corrected the default LTO module count calculation to
refer to the number of compiled modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Package:&lt;/strong&gt; Ensured namespace parent modules are included in
compiled packages.&lt;/p&gt;
&lt;p&gt;These were previously missed due to the removal of reliance on
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; for delayed namespace package handling.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Ensured data files included in application bundles are
also signed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Applied short path conversion to the directory part of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.argv[0]&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;
&lt;p&gt;This prevents issues with tools called using this path that might not
handle non-shortened (potentially unicode) paths correctly.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="package-support"&gt;
&lt;h2&gt;Package Support&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Included necessary data files for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;blib2to3&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.6.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; versions. (Added in
2.6.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;huggingface_hub&lt;/span&gt;&lt;/code&gt; versions.
(Added in 2.6.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anti-Bloat:&lt;/strong&gt; Provided additional &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.testing&lt;/span&gt;&lt;/code&gt; stubs required
for proper execution of some &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt; modules. (Fixed in 2.6.2
already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Enhanced configuration for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;fontTools&lt;/span&gt;&lt;/code&gt;. Avoided
configuring hidden dependencies now detected by parsing provided
Python files like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files. (Fixed in 2.6.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Corrected plugin configuration for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt;
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqldrivers&lt;/span&gt;&lt;/code&gt; on macOS. (Fixed in 2.6.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.12+:&lt;/strong&gt; Introduced standalone support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mediapipe&lt;/span&gt;&lt;/code&gt;,
including a workaround for extension module sub-module creation
issues. (Fixed in 2.6.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python3.12+:&lt;/strong&gt; Introduced standalone support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;onnx&lt;/span&gt;&lt;/code&gt;,
including a workaround for extension module sub-module creation
issues. (Fixed in 2.6.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlglot&lt;/span&gt;&lt;/code&gt; versions. (Added
in 2.6.5 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Included &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asset&lt;/span&gt;&lt;/code&gt; data files for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;arcade&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.6.5 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlalchemy.orm&lt;/span&gt;&lt;/code&gt;.
(Added in 2.6.5 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Included additional frameworks required for PySide 6.8
web-engine support. (Added in 2.6.5 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; support to handle potentially Python
minor version-specific config files by allowing optional data file
discovery in plugins. (Added in 2.6.6 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; sub-module loader
mechanism.&lt;/p&gt;
&lt;p&gt;By treating it as a lazy loader, implicit dependencies within
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; are now correctly detected without requiring explicit
configuration. (Added in 2.6.7 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Automatically include Django database engine modules.
(Added in 2.6.7 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Homebrew:&lt;/strong&gt; Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; support for Python versions using
&lt;strong&gt;Tcl/Tk&lt;/strong&gt; version 9.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Included a missing data file for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jenn&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy.optimize._cobyla&lt;/span&gt;&lt;/code&gt;
versions. (Fixed in 2.6.8 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anaconda:&lt;/strong&gt; Fixed issues with bare &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mkl&lt;/span&gt;&lt;/code&gt; usage (without
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Included a missing data file for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cyclonedx&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Enabled pickling of local compiled functions using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cloudpickle&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ray.cloudpickle&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mitmproxy&lt;/span&gt;&lt;/code&gt; on macOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Included necessary data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python-docs&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mne&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt; versions, requiring
handling of its lazy loader.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Introduced support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt; code formatter
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Included metadata when the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;travertino&lt;/span&gt;&lt;/code&gt; package is
used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Significantly enhanced support for detecting
dependencies derived from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;django&lt;/span&gt;&lt;/code&gt; settings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;duckdb&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DLL Mode:&lt;/strong&gt; Introduced a new experimental mode (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mode=dll&lt;/span&gt;&lt;/code&gt;) to
create standalone DLL distributions.&lt;/p&gt;
&lt;p&gt;While functional for many cases, documentation is currently limited,
and features like multiprocessing require further work involving
interaction with the launching binary.&lt;/p&gt;
&lt;p&gt;This mode is intended to improve Windows GUI compatibility (tray
icons, notifications) for onefile applications by utilizing an
internal DLL structure.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Onefile mode now internally uses the new DLL mode by
default, interacting with a DLL instead of an executable in temporary
mode.&lt;/p&gt;
&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-no-dll&lt;/span&gt;&lt;/code&gt; to revert to the previous behavior if issues
arise.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Added support for dependency analysis on Windows ARM
builds using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pefile&lt;/span&gt;&lt;/code&gt; (as Dependency Walker lacks ARM support).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Android:&lt;/strong&gt; Enabled module mode support when using Termux Python.
(Added in 2.6.7 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Added support for &lt;strong&gt;Python Build Standalone&lt;/strong&gt;
distributions (e.g., as downloaded by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;uv&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Note that static &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; is not supported with these
distributions as the included static library is currently unusable.
(Added in 2.6.7 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Enabled taskbar grouping for compiled applications if
product and company names are provided in the version information.
(Added in 2.6.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Automatically use icons provided via
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-icon-from-ico&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; applications.&lt;/p&gt;
&lt;p&gt;This eliminates the need to separately provide the icon as a PNG
file, avoiding duplication.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nuitka Package Configuration:&lt;/strong&gt; Allowed using values from
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;constants&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;variable&lt;/span&gt;&lt;/code&gt; declarations within &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt;
conditions where feasible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reports:&lt;/strong&gt; Clearly indicate if an included package is “vendored”
(e.g., packages bundled within &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;safe_path&lt;/span&gt;&lt;/code&gt; (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-P&lt;/span&gt;&lt;/code&gt;)
Python flag, preventing the use of the current directory in module
searches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dont_write_bytecode&lt;/span&gt;&lt;/code&gt;
(&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-B&lt;/span&gt;&lt;/code&gt;) Python flag, disabling the writing of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyc&lt;/span&gt;&lt;/code&gt; files at
runtime (primarily for debugging purposes, as compiled code doesn’t
generate them).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Introduced a new experimental tool for scanning distribution
metadata, producing output similar to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;list&lt;/span&gt; &lt;span class="pre"&gt;-v&lt;/span&gt;&lt;/code&gt;. Intended for
debugging metadata scan results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Enhanced the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin to transfer
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__annotations__&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__qualname__&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Added an option to control whether the plugin should also handle
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cloudpickle&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ray.cloudpickle&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AIX:&lt;/strong&gt; Implemented initial enhancements towards enabling Nuitka
usage on AIX, although further work is required.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Optimized finalizer handling in compiled generators, coroutines, and
asyncgens by avoiding slower C API calls introduced in 2.6, restoring
performance for these objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Implemented a more compact encoding for empty strings in data blobs.&lt;/p&gt;
&lt;p&gt;Instead of 2 bytes (unicode) + null terminator, a dedicated type
indicator reduces this frequent value to a single byte.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="anti-bloat"&gt;
&lt;h2&gt;Anti-Bloat&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; when used by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.6.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; when used by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.6.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cython&lt;/span&gt;&lt;/code&gt; when used by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;fontTools&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.6.2 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sparse&lt;/span&gt;&lt;/code&gt; when used by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.6.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ndonnx&lt;/span&gt;&lt;/code&gt; when used by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.6.3 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jaxlib&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;
&lt;p&gt;Also prevented attempts to query the version from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jaxlib&lt;/span&gt;&lt;/code&gt; source
code using git. (Added in 2.6.3 already.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yaml&lt;/span&gt;&lt;/code&gt; when used by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; package. (Added
in 2.6.4 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;charset_normalizer&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.6.5 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lxml&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt; package. (Added in
2.6.5 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PIL&lt;/span&gt;&lt;/code&gt; (Pillow) for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.6.5 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; when used by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;smt&lt;/span&gt;&lt;/code&gt; package. (Added
in 2.6.7 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including more optional &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygame&lt;/span&gt;&lt;/code&gt; dependencies. (Added in
2.6.8 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tomli&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tomllib&lt;/span&gt;&lt;/code&gt; for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;incremental&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; when used by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rich&lt;/span&gt;&lt;/code&gt; package
vendored within &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pip&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For reporting purposes, treated usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ipywidgets&lt;/span&gt;&lt;/code&gt; as equivalent
to using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assert_raises&lt;/span&gt;&lt;/code&gt; within Nuitka’s &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.testing&lt;/span&gt;&lt;/code&gt;
stub.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Improved the output format for used command line options.&lt;/p&gt;
&lt;p&gt;Filenames provided as positional arguments now use the report path
format. Info traces now support an optional leader for intended value
output, enhancing readability.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reports:&lt;/strong&gt; Saved and restored timing information for cached
modules.&lt;/p&gt;
&lt;p&gt;This eliminates timing differences based on whether a module was
loaded from cache, reducing noise in &lt;strong&gt;Nuitka-Watch&lt;/strong&gt; comparisons
where cached module timings previously changed with every new
compilation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Actions:&lt;/strong&gt; Added compilation report artifacts to all CI runs
involving empty module compilations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt; Enabled the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--edit&lt;/span&gt;&lt;/code&gt; option to find modules within
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.app&lt;/span&gt;&lt;/code&gt; bundles created on macOS. (Added in 2.6.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;User Manual:&lt;/strong&gt; Updated the Nuitka-Action example; linking directly
to its documentation might be preferable. (Changed in 2.6.1 already.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; Enforced ASCII encoding for all Nuitka C files to
prevent accidental inclusion of non-ASCII characters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; Added syntax validation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;global_replacements&lt;/span&gt;&lt;/code&gt;
result values, similar to existing checks for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;replacements&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Also added validation to ensure &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;global_replacements_re&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;replacements_re&lt;/span&gt;&lt;/code&gt; result values are valid regular expressions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Ensured error messages for illegal module names in
implicit imports correctly report the originating plugin name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; Enabled use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format-21&lt;/span&gt;&lt;/code&gt; if available and
applied formatting changes specific to this newer version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; Suppressed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pylint&lt;/span&gt;&lt;/code&gt; warnings related to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;
usage when running with Python 3.12+.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Disallowed mixed usage of Anaconda and Poetry &lt;em&gt;without&lt;/em&gt; an
active Poetry virtual environment.&lt;/p&gt;
&lt;p&gt;This avoids issues caused by a Poetry bug where it incorrectly sets
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;INSTALLER&lt;/span&gt;&lt;/code&gt; metadata for Conda packages in this scenario,
making reliable detection of Conda packages impossible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Deprecated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-target-arch&lt;/span&gt;&lt;/code&gt; in favor of the
standard &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--target-arch&lt;/span&gt;&lt;/code&gt; option, with plans for eventual removal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; Ensured usage of a compatible &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; version
during &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;osc&lt;/span&gt;&lt;/code&gt; uploads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Improved the error message for invalid custom anti-bloat
modes by listing the allowed values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; Removed CPython test git submodules from the repository.&lt;/p&gt;
&lt;p&gt;These submodules caused issues, such as being cloned during &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pip&lt;/span&gt;
&lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; and sometimes failing, potentially breaking Nuitka
installation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enabled passing extra options via the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NUITKA_EXTRA_OPTIONS&lt;/span&gt;&lt;/code&gt;
environment variable for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; test cases involving
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed the standalone test for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi&lt;/span&gt;&lt;/code&gt; package, as it’s better
covered by Nuitka-Watch and prone to failures in CI due to lack of an
X11 display.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensured tests correctly ignore the current directory when necessary
by using the new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=safe_path&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This forces the use of the original source code as intended, rather
than potentially finding modules in the current directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Corrected the implementation of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;retry&lt;/span&gt;&lt;/code&gt; mechanism for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pipenv&lt;/span&gt;&lt;/code&gt; installation within the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-watch&lt;/span&gt;&lt;/code&gt; tool.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for passing extra options via environment variables to
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-watch&lt;/span&gt;&lt;/code&gt; tool.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distutils:&lt;/strong&gt; Standardized usage to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--module=package&lt;/span&gt;&lt;/code&gt; where
appropriate, instead of manually adding package contents, resulting
in more conventional Nuitka command lines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refactored &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; file creation into a dedicated function,
simplifying the post-processing code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release was supposed to focus on scalability, but that didn’t
happen due to a variety of important issues coming up as well as
unplanned private difficulties.&lt;/p&gt;
&lt;p&gt;The added DLL mode will be very interesting to many users, but needs
more polish in future releases.&lt;/p&gt;
&lt;p&gt;For compatibility, working with the popular (yet - not yes recommended
&lt;strong&gt;UV-Python&lt;/strong&gt;), &lt;strong&gt;Windows&lt;/strong&gt; UI fixes for temporary onefile and &lt;strong&gt;macOS&lt;/strong&gt;
improvements, as well as improved &lt;strong&gt;Android&lt;/strong&gt; support are excellent.&lt;/p&gt;
&lt;p&gt;The next release of Nuitka however will have to focus on scalability and
maintenance only. But as usual, not sure if it can happen.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-27.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2025-05-30T07:02:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-16.html</id>
    <title>Nuitka this week #16</title>
    <updated>2025-02-15T00:00:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-16"&gt;

&lt;p&gt;Hey Nuitka users! This started out as an idea of a weekly update, but
that hasn’t happened, and so we will switch it over to just writing up
when something interesting happens and then push it out relatively
immediately when it happens.&lt;/p&gt;
&lt;section id="nuitka-onefile-gets-more-flexible-onefile-cache-mode-and-program-dir"&gt;
&lt;h2&gt;Nuitka Onefile Gets More Flexible: &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-cache-mode&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{PROGRAM_DIR}&lt;/span&gt;&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;We’ve got a couple of exciting updates to Nuitka’s onefile mode that
give you more control and flexibility in how you deploy your
applications. These enhancements stem from real-world needs and
demonstrate Nuitka’s commitment to providing powerful and adaptable
solutions.&lt;/p&gt;
&lt;section id="taking-control-of-onefile-unpacking-onefile-cache-mode"&gt;
&lt;h3&gt;Taking Control of Onefile Unpacking: &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-cache-mode&lt;/span&gt;&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Onefile mode is fantastic for creating single-file executables, but the
management of the unpacking directory where the application expands has
sometimes been a bit… opaque. Previously, Nuitka would decide whether
to clean up this directory based on whether the path used
runtime-dependent variables. This made sense in theory, but in practice,
it could lead to unexpected behavior and made debugging onefile issues
harder.&lt;/p&gt;
&lt;p&gt;Now, you have complete control! The new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-cache-mode&lt;/span&gt;&lt;/code&gt; option
lets you explicitly specify what happens to the unpacking directory:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-cache-mode=auto&lt;/span&gt;&lt;/code&gt;: This is the default behavior. Nuitka
will remove the unpacking directory unless runtime-dependent values
were used in the path specification. This is the same behavior as
previous versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-cache-mode=cached&lt;/span&gt;&lt;/code&gt;: The unpacking directory is &lt;em&gt;not&lt;/em&gt;
removed and becomes a persistent, cached directory. This is useful
for debugging, inspecting the unpacked files, or if you have a use
case that benefits from persistent caching of the unpacked data. The
files will remain available for subsequent runs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-cache-mode=temporary&lt;/span&gt;&lt;/code&gt;: The unpacking directory &lt;em&gt;is&lt;/em&gt;
removed after the program exits.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This gives you the power to choose the behavior that best suits your
needs. No more guessing!&lt;/p&gt;
&lt;/section&gt;
&lt;section id="relative-paths-with-program-dir"&gt;
&lt;h3&gt;Relative Paths with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{PROGRAM_DIR}&lt;/span&gt;&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Another common request, particularly from users deploying applications
in more restricted environments, was the ability to specify the onefile
unpacking directory &lt;em&gt;relative&lt;/em&gt; to the executable itself. Previously, you
were limited to absolute paths or paths relative to the user’s temporary
directory space.&lt;/p&gt;
&lt;p&gt;We’ve introduced a new variable, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{PROGRAM_DIR}&lt;/span&gt;&lt;/code&gt;, that you can use in
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-tempdir-spec&lt;/span&gt;&lt;/code&gt; option. This variable is dynamically
replaced at runtime with the full path to the directory containing the
onefile executable.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;nuitka&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;onefile&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;onefile&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;tempdir&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{PROGRAM_DIR}&lt;/span&gt;&lt;span class="s2"&gt;/.myapp_data&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;my_program&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This would create a directory named &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.myapp_data&lt;/span&gt;&lt;/code&gt; &lt;em&gt;inside&lt;/em&gt; the same
directory as the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;my_program.exe&lt;/span&gt;&lt;/code&gt; (or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;my_program&lt;/span&gt;&lt;/code&gt; on Linux/macOS)
and unpack the application there. This is perfect for creating truly
self-contained applications where all data and temporary files reside
alongside the executable.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="nuitka-commercial-and-open-source"&gt;
&lt;h3&gt;Nuitka Commercial and Open Source&lt;/h3&gt;
&lt;p&gt;These features, like many enhancements to Nuitka, originated from a
request by a Nuitka commercial customer. This highlights the close
relationship between the commercial offerings and the open-source core.
While commercial support helps drive development and ensures the
long-term sustainability of Nuitka, the vast majority of features are
made freely available to all users.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="give-it-a-try"&gt;
&lt;h3&gt;Give it a Try!&lt;/h3&gt;
&lt;p&gt;This change will be in 2.7 and is currently&lt;/p&gt;
&lt;p&gt;We encourage you to try out these new features and let us know what you
think! As always, bug reports, feature requests, and contributions are
welcome on &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/issues"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-16.html"/>
    <summary>Hey Nuitka users! This started out as an idea of a weekly update, but
that hasn’t happened, and so we will switch it over to just writing up
when something interesting happens and then push it out relatively
immediately when it happens.</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2025-02-15T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-26.html</id>
    <title>Nuitka Release 2.6</title>
    <updated>2025-02-13T00:00:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-2-6"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has all-around improvements, with a lot effort spent on bug
fixes in the memory leak domain, and preparatory actions for scalability
improvements.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MSYS2:&lt;/strong&gt; Path normalization to native Windows format was required
in more places for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MinGW&lt;/span&gt;&lt;/code&gt; variant of &lt;strong&gt;MSYS2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.normpath&lt;/span&gt;&lt;/code&gt; function doesn’t normalize to native Win32
paths with MSYS2, instead using forward slashes. This required manual
normalization in additional areas. (Fixed in 2.5.1)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Fix, give a proper error when extension modules asked to
include failed to be located. instead of a proper error message.
(Fixed in 2.5.1)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, files with illegal module names (containing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.&lt;/span&gt;&lt;/code&gt;) in their
basename were incorrectly considered as potential sub-modules for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt;. These are now skipped. (Fixed in 2.5.1)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stubgen:&lt;/strong&gt; Improved stability by preventing crashes when stubgen
encounters code it cannot handle. Exceptions from it are now ignored.
(Fixed in 2.5.1)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stubgen:&lt;/strong&gt; Addressed a crash that occurred when encountering
assignments to non-variables. (Fixed in 2.5.1)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3:&lt;/strong&gt; Fixed a regression introduced in 2.5 release that could
lead to segmentation faults in exception handling for generators.
(Fixed in 2.5.2)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.11+:&lt;/strong&gt; Corrected an issue where dictionary copies of large
split directories could become corrupted. This primarily affected
instance dictionaries, which are created as copies until updated,
potentially causing problems when adding new keys. (Fixed in 2.5.2)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.11+:&lt;/strong&gt; Removed the assumption that module dictionaries
always contain only strings as keys. Some modules, like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Foundation&lt;/span&gt;&lt;/code&gt; on macOS, use non-string keys. (Fixed in 2.5.2)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deployment:&lt;/strong&gt; Ensured that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deployment&lt;/span&gt;&lt;/code&gt; option correctly
affects the C compilation process. Previously, only individual
disables were applied. (Fixed in 2.5.2)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Fixed a crash that could occur during compilation
when unary operations were used within binary operations. (Fixed in
2.5.3)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile:&lt;/strong&gt; Corrected the handling of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__.original_argv0&lt;/span&gt;&lt;/code&gt;, which could lead to crashes. (Fixed
in 2.5.4)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Resolved a segmentation fault occurring at runtime
when calling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow.function&lt;/span&gt;&lt;/code&gt; with only keyword arguments.
(Fixed in 2.5.5)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Harmless warnings generated for x64 DLLs on arm64 with
newer macOS versions are now ignored. (Fixed in 2.5.5)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.13:&lt;/strong&gt; Addressed a crash in Nuitka’s dictionary code that
occurred when copying dictionaries due to internal changes in Python
3.13. (Fixed in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Improved onefile mode signing by applying
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-signed-app-name&lt;/span&gt;&lt;/code&gt; to the signature of binaries, not just
app bundles. (Fixed in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Corrected an issue where too many paths were added as
extra directories from the Nuitka package configuration. This
primarily affected the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com&lt;/span&gt;&lt;/code&gt; package, which currently relies
on the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;package-dirs&lt;/span&gt;&lt;/code&gt; import hack. (Fixed in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 2:&lt;/strong&gt; Prevented crashes on macOS when creating onefile
bundles with Python 2 by handling negative CRC32 values. This issue
may have affected other versions as well. (Fixed in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Restored the functionality of code provided in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pre-import-code&lt;/span&gt;&lt;/code&gt;, which was no longer being applied due to a
regression. (Fixed in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Suppressed the app bundle mode recommendation when it is
already in use. (Fixed in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Corrected path normalization when the output directory
argument includes “~”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; GitHub Actions Python is now correctly identified as a
Homebrew Python to ensure proper DLL resolution. (Fixed in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Fixed a reference leak that could occur with
values sent to generator objects. Asyncgen and coroutines were not
affected. (Fixed in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; scan now correctly handles
cases where both a package init file and competing Python files
exist, preventing compile-time conflicts. (Fixed in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modules:&lt;/strong&gt; Resolved an issue where handling string constants in
modules created for Python 3.12 could trigger assertions, and modules
created with 3.12.7 or newer failed to load on older Python 3.12
versions when compiled with Nuitka 2.5.5-2.5.6. (Fixed in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.10+:&lt;/strong&gt; Corrected the tuple code used when calling certain
method descriptors. This issue primarily affected a Python 2
assertion, which was not impacted in practice. (Fixed in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.13:&lt;/strong&gt; Updated resource readers to accept multiple
arguments for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resources.read_text&lt;/span&gt;&lt;/code&gt;, and correctly handle
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;encoding&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;errors&lt;/span&gt;&lt;/code&gt; as keyword-only arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; The platform encoding is no longer used to decode
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; logs. Instead, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;latin1&lt;/span&gt;&lt;/code&gt; is used, as it is sufficient for
matching filenames across log lines and avoids potential encoding
errors. (Fixed in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.12+:&lt;/strong&gt; Requests to statically link libraries for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hacl&lt;/span&gt;&lt;/code&gt;
are now ignored, as these libraries do not exist. (Fixed in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Fixed a memory leak affecting the results of
functions called via specs. This primarily impacted overloaded hard
import operations. (Fixed in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; When multiple distributions for a package are found,
the one with the most accurate file matching is now selected. This
improves handling of cases where an older version of a package (e.g.,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python-opencv&lt;/span&gt;&lt;/code&gt;) is overwritten with a different variant (e.g.,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python-opencv-headless&lt;/span&gt;&lt;/code&gt;), ensuring the correct version is used for
Nuitka package configuration and reporting. (Fixed in 2.5.8)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 2:&lt;/strong&gt; Prevented a potential crash during onefile
initialization on Python 2 by passing the directory name directly
from the onefile bootstrap, avoiding the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.dirname&lt;/span&gt;&lt;/code&gt; which
may not be fully loaded at that point. (Fixed in 2.5.8)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anaconda:&lt;/strong&gt; Preserved necessary &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; environment variables on
Windows for packages that require loading DLLs from those locations.
Only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; entries not pointing inside the installation prefix are
removed. (Fixed in 2.5.8)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anaconda:&lt;/strong&gt; Corrected the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is_conda_package&lt;/span&gt;&lt;/code&gt; check to function
properly when distribution names and package names differ. (Fixed in
2.5.8)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anaconda:&lt;/strong&gt; Improved package name resolution for Anaconda
distributions by checking conda metadata when file metadata is
unavailable through the usual methods. (Fixed in 2.5.8)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MSYS2:&lt;/strong&gt; Normalized the downloaded gcc path to use native Windows
slashes, preventing potential compilation failures. (Fixed in 2.5.9)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.13:&lt;/strong&gt; Restored static libpython functionality on Linux by
adapting to a signature change in an unexposed API. (Fixed in 2.5.9)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.6+:&lt;/strong&gt; Prevented &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncgen&lt;/span&gt;&lt;/code&gt; from being resurrected when a
finalizer is attached, resolving memory leaks that could occur with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncio&lt;/span&gt;&lt;/code&gt; in the presence of exceptions. (Fixed in 2.5.10)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Suppressed the gcc download prompt that could appear during
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output on Windows systems without MSVC or with an
improperly installed gcc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensured compatibility with monkey patched &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.lstat&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.stat&lt;/span&gt;&lt;/code&gt;
functions, which are used in some testing scenarios.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Composer:&lt;/strong&gt; Improved the determinism of the JSON statistics
output by sorting keys, enabling reliable build comparisons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.6+:&lt;/strong&gt; Fixed a memory leak in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncgen&lt;/span&gt;&lt;/code&gt; with finalizers,
which could lead to significant memory consumption when using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncio&lt;/span&gt;&lt;/code&gt; and encountering exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Optimized empty generators (an optimization result) to
avoid generating unused context code, eliminating C compilation
warnings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.6+:&lt;/strong&gt; Fixed a reference leak affecting the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asend&lt;/span&gt;&lt;/code&gt; value
in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncgen&lt;/span&gt;&lt;/code&gt;. While typically &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;, this could lead to
observable reference leaks in certain cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.5+:&lt;/strong&gt; Improved handling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;coroutine&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncgen&lt;/span&gt;&lt;/code&gt;
resurrection, preventing memory leaks with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncio&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncgen&lt;/span&gt;&lt;/code&gt;, and ensuring correct execution of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; code in
coroutines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3:&lt;/strong&gt; Corrected the handling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;generator&lt;/span&gt;&lt;/code&gt; objects
resurrecting during deallocation. While not explicitly demonstrated,
this addresses potential issues similar to those encountered with
coroutines, particularly for old-style coroutines created with the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;types.coroutine&lt;/span&gt;&lt;/code&gt; decorator.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PGO:&lt;/strong&gt; Fixed a potential crash during runtime trace collection by
ensuring timely initialization of the output mechanism.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="package-support"&gt;
&lt;h2&gt;Package Support&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added inclusion of metadata for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jupyter_client&lt;/span&gt;&lt;/code&gt; to
support its own usage of metadata. (Added in 2.5.1)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;llama_cpp&lt;/span&gt;&lt;/code&gt; package. (Added
in 2.5.1)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;litellm&lt;/span&gt;&lt;/code&gt; package. (Added in
2.5.2)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lab_lamma&lt;/span&gt;&lt;/code&gt; package. (Added
in 2.5.2)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;docling&lt;/span&gt;&lt;/code&gt; metadata. (Added in
2.5.5)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pypdfium&lt;/span&gt;&lt;/code&gt; on Linux. (Added in
2.5.5)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;debian&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.5.5)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pdfminer&lt;/span&gt;&lt;/code&gt; package. (Added in
2.5.5)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Included missing dependencies for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch._dynamo.polyfills&lt;/span&gt;&lt;/code&gt; package. (Added in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rtree&lt;/span&gt;&lt;/code&gt; on Linux. The previous
static configuration only worked on Windows and macOS; this update
detects it from the module code. (Added in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added missing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywebview&lt;/span&gt;&lt;/code&gt; JavaScript data files.
(Added in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package. (Added in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Placed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; DLLs at the top level for improved
support in the Nuitka VM. (Added in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Allowed excluding browsers when including
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;playwright&lt;/span&gt;&lt;/code&gt;. (Added in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlfluff&lt;/span&gt;&lt;/code&gt;
package. (Added in 2.5.8)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opencv&lt;/span&gt;&lt;/code&gt; conda package,
disabling unnecessary workarounds for its dependencies. (Added in
2.5.8)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;soundfile&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;coincurve&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;apscheduler&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Removed the error and workaround forcing that required
bundle mode for PyQt5 on macOS, as standalone mode now appears to
function correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;seleniumbase&lt;/span&gt;&lt;/code&gt; package downloads.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Module:&lt;/strong&gt; Implemented 2-phase loading for all modules in Python 3.5
and higher. This improves loading modules as sub-packages in Python
3.12+, where the loading context is no longer accessible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Introduced the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;app&lt;/span&gt;&lt;/code&gt; value for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mode&lt;/span&gt;&lt;/code&gt; parameter.
This creates an app bundle on macOS and a onefile binary on other
platforms, replacing the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-create-app-bundle&lt;/span&gt;&lt;/code&gt; option. (Added
in 2.5.5)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Added a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;package&lt;/span&gt;&lt;/code&gt; mode, similar to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;module&lt;/span&gt;&lt;/code&gt;, which
automatically includes all sub-modules of a package without requiring
manual specification with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Module:&lt;/strong&gt; Added an option to completely disable the use of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;stubgen&lt;/span&gt;&lt;/code&gt;. (Added in 2.5.1)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Homebrew:&lt;/strong&gt; Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tcl9&lt;/span&gt;&lt;/code&gt; with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt;
plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Package Resolution:&lt;/strong&gt; Improved handling of multiple distributions
installed for the same package name. Nuitka now attempts to identify
the most recently installed distribution, enabling proper recognition
of different versions in scenarios like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python-opencv&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python-opencv-headless&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.13.1 Compatibility:&lt;/strong&gt; Addressed an issue where a
workaround introduced for Python 3.10.0 broke standalone mode in
Python 3.13.1. (Added in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Introduced a new feature for absolute source paths
(typically derived from variables or relative to constants). This
offers greater flexibility compared to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;by_code&lt;/span&gt;&lt;/code&gt; DLL feature,
which may be removed in the future. (Added in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; conditions in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;variable&lt;/span&gt;&lt;/code&gt;
sections within Nuitka Package configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; App bundles now automatically switch to the containing
directory when not launched from the command line. This prevents the
current directory from defaulting to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;/&lt;/span&gt;&lt;/code&gt;, which is rarely correct
and can be unexpected for users. (Added in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Relaxed the restriction on setting the compiled
frame &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f_trace&lt;/span&gt;&lt;/code&gt;. Instead of outright rejection, the deployment flag
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-deployment-flag=frame-useless-set-trace&lt;/span&gt;&lt;/code&gt; can be used to allow
it, although it will be ignored.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Added the ability to detect extension module entry
points using an inline copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pefile&lt;/span&gt;&lt;/code&gt;. This enables
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--list-package-dlls&lt;/span&gt;&lt;/code&gt; to verify extension module validity on the
platform. It also opens possibilities for automatic extension module
detection on major operating systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Watch:&lt;/strong&gt; Added support for using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;conda&lt;/span&gt;&lt;/code&gt; packages instead of PyPI
packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Introduced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--list-package-exe&lt;/span&gt;&lt;/code&gt; to complement
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--list-package-dlls&lt;/span&gt;&lt;/code&gt; for package analysis when creating Nuitka
Package Configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows ARM:&lt;/strong&gt; Removed workarounds that are no longer necessary for
compilation. While the lack of dependency analysis might require
correction in a hotfix, this configuration should now be supported.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; Implemented experimental code for more compact code
object usage, leading to more scalable C code and constants usage.
This is expected to speed up C compilation and code generation in the
future once fully validated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Added support for C23 embedding of the constants blob.
This will be utilized with Clang 19+ and GCC 15+, except on Windows
and macOS where other methods are currently employed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compilation:&lt;/strong&gt; Improved performance by avoiding redundant path
checks in cases of duplicated package directories. This significantly
speeds up certain scenarios where file system access is slow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Enhanced detection of static libpython, including for
self-compiled, uninstalled Python installations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="anti-bloat"&gt;
&lt;h2&gt;Anti-Bloat&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Improved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_docstrings&lt;/span&gt;&lt;/code&gt; support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xgboost&lt;/span&gt;&lt;/code&gt; package.
(Added in 2.5.7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided unnecessary usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PIL&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided unnecessary usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yaml&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Excluded &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tcltest&lt;/span&gt;&lt;/code&gt; TCL code when using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt;, as these TCL
files are unused.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; from the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;comm&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; from the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pdbp&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Added categories for plugins in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--help&lt;/span&gt;&lt;/code&gt; output.
Non-package support plugin options are now shown by default.
Introduced a dedicated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--help-plugins&lt;/span&gt;&lt;/code&gt; option and highlighted it
in the general &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--help&lt;/span&gt;&lt;/code&gt; output. This allows viewing all plugin
options without needing to enable a specific plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Improved warnings for onefile and OS-specific options. These
warnings are now displayed unless the command originates from a
Nuitka-Action context, where users typically build for different
modes with a single configuration set.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nuitka-Action:&lt;/strong&gt; The default &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mode&lt;/span&gt;&lt;/code&gt; is now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;app&lt;/span&gt;&lt;/code&gt;, building an
application bundle on macOS and a onefile binary on other platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; The executable path in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output now uses the
report path. This avoids exposing the user’s home directory,
encouraging more complete output sharing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; The Python flavor name is now included in the startup
compilation message.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Improved handling of missing Windows version information. If
only partial version information (e.g., product or file version) is
provided, an explicit error is given instead of an assertion error
during post-processing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Corrected an issue where the container argument for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;run-inside-nuitka-container&lt;/span&gt;&lt;/code&gt; could not be a non-template file.
(Fixed in 2.5.2)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; The PyPI upload &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sdist&lt;/span&gt;&lt;/code&gt; creation now uses a virtual
environment. This ensures consistent project name casing, as it is
determined by the setuptools version. While currently using the
deprecated filename format, this change prepares for the new format.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;osc&lt;/span&gt;&lt;/code&gt; binary is now used from the virtual
environment to avoid potential issues with a broken system
installation, as currently observed on Ubuntu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt; Added an experimental option to disable the automatic
conversion to short paths on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Improved handling of external data files that overwrite the
original file. Nuitka now prompts the user to provide an output
directory to prevent unintended overwrites. (Added in 2.5.6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Introduced the alias &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-data-files-external&lt;/span&gt;&lt;/code&gt; for
the external data files option. This clarifies that the feature is
not specific to onefile mode and encourages its wider use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Allowed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;none&lt;/span&gt;&lt;/code&gt; as a valid value for the macOS icon option.
This disables the warning about a missing icon when intentionally not
providing one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Added an error check for icon filenames without suffixes,
preventing cases where the file type cannot be inferred.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Corrected the examples for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data&lt;/span&gt;&lt;/code&gt; with
file patterns, which used incorrect delimiters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Added a warning about using gcc with LTO when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;make&lt;/span&gt;&lt;/code&gt; is
unavailable, as this combination will not work. This provides a
clearer message than the standard gcc warnings, which can be
difficult for Python users to interpret.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt; Added an option to preserve printing during reference
count tests. This can be helpful for debugging by providing
additional trace information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt; Added a small code snippet for module reference leak
testing to the Developer Manual.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Temporarily disabled tests that expose regressions in Python 3.13.1
that mean not to follow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved test organization by using more common code for package
tests. The scanning for test cases and main files now utilizes shared
code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for testing variations of a test with different extra
flags. This is achieved by exposing a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NUITKA_TEST_VARIANT&lt;/span&gt;&lt;/code&gt;
environment variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved detection of commercial-only test cases by identifying them
through their names rather than hardcoding them in the runner. These
tests are now removed from the standard distribution to reduce
clutter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Utilized &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mode&lt;/span&gt;&lt;/code&gt; options in tests for better control and clarity.
Standalone mode tests now explicitly check for the application of the
mode and error out if it’s missing. Mode options are added to the
project options of each test case instead of requiring global
configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a test case to ensure comprehensive coverage of external data
file usage in onefile mode. This helps detect regressions that may
have gone unnoticed previously.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Increased test coverage for coroutines and async generators,
including checks for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect.isawaitable&lt;/span&gt;&lt;/code&gt; and testing both
function and context objects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Unified the code used for generating source archives for PyPI
uploads, ensuring consistency between production and standard
archives.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Harmonized the usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;include&lt;/span&gt; &lt;span class="pre"&gt;&amp;lt;...&amp;gt;&lt;/span&gt;&lt;/code&gt; vs &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;include&lt;/span&gt; &lt;span class="pre"&gt;&amp;quot;...&amp;quot;&lt;/span&gt;&lt;/code&gt; based
on the origin of the included files, improving code style
consistency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed code duplication in the exception handler generator code by
utilizing the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;DROP_GENERATOR_EXCEPTION&lt;/span&gt;&lt;/code&gt; functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated Python version checks to reflect current compatibility.
Checks for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;gt;=3.4&lt;/span&gt;&lt;/code&gt; were changed to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;gt;=3&lt;/span&gt;&lt;/code&gt;, and outdated references
to Python 3.3 in comments were updated to simply “Python 3”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Simplified and streamlined the code for the command
options. An &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OrderedDict&lt;/span&gt;&lt;/code&gt; is now used to ensure more stable build
outputs and prevent unnecessary differences in recorded output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;executeToolChecked&lt;/span&gt;&lt;/code&gt; function by adding an argument to
indicate whether decoding of returned &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; output to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt;
is desired. This eliminates redundant decoding in many places.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This a major release that it consolidates Nuitka big time.&lt;/p&gt;
&lt;p&gt;The scalability work has progressed, even if no immediately visible
effects are there yet, the next releases will have them, as this is the
main area of improvement these days.&lt;/p&gt;
&lt;p&gt;The memory leaks found are very important and very old, this is the
first time that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncio&lt;/span&gt;&lt;/code&gt; should be working perfect with Nuitka, it
was usable before, but compatibility is now much higher.&lt;/p&gt;
&lt;p&gt;Also, this release puts out a much nicer help output and handling of
plugins help, which no longer needs tricks to see a plugin option that
is not enabled (yet), during &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--help&lt;/span&gt;&lt;/code&gt;. The user interface is hopefully
more clean due to it.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-26.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2025-02-13T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-25.html</id>
    <title>Nuitka Release 2.5</title>
    <updated>2024-11-27T00:00:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-2-5"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release focused on Python 3.13 support, but also on improved
compatibility, made many performance optimizations, enhanced error
reporting, and better debugging support.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Fixed a regression in onefile mode that incorrectly
handled program and command line paths containing spaces. Fixed in
2.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Corrected an issue where console output handles were
being opened with closed file handles. Fixed in 2.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Restored the ability to use trailing slashes on the
command line to specify the target directory for data files on
Windows. Fixed in 2.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Fixed a parsing error that occurred with relative
imports in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files, which could affect some extension modules
with available source code. Fixed in 2.4.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modules:&lt;/strong&gt; Ensured that extension modules load correctly into
packages when using Python 3.12. Fixed in 2.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Improved command line handling for onefile mode to
ensure full compatibility with quoting. Fixed in 2.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Directories:&lt;/strong&gt; Allowed the use of non-normalized paths on the
command line when specifying data directories. Fixed in 2.4.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.11+:&lt;/strong&gt; Fixed an issue where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; module functions
could raise &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; when examining compiled functions on
the stack. Fixed in 2.4.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;importlib_metadata:&lt;/strong&gt; Improved compatibility with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_metadata&lt;/span&gt;&lt;/code&gt; by handling cases where it might be broken,
preventing potential compilation crashes. Fixed in 2.4.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Fixed a crash that occurred when using the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_asserts&lt;/span&gt;&lt;/code&gt; YAML configuration option. Fixed in 2.4.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Improved error tolerance when reading &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; log files
to prevent crashes on Windows caused by non-ASCII module names or
paths. Fixed in 2.4.11 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Prevented the C standard option from being applied to C++
compilers, resolving an issue with the splash screen on Windows when
using Clang. Fixed in 2.4.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Enhanced handling of DLL self-dependencies to accommodate
cases where DLLs use both &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.so&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.dylib&lt;/span&gt;&lt;/code&gt; extensions for
self-references. Fixed in 2.4.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Fixed a memory leak that occurred when using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;deepcopy&lt;/span&gt;&lt;/code&gt; on compiled methods. Fixed in 2.4.9 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MSYS2:&lt;/strong&gt; Excluded the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bin&lt;/span&gt;&lt;/code&gt; directory from being considered a
system DLL folder when determining DLL inclusion. Fixed in 2.4.9
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.10+:&lt;/strong&gt; Fixed a crash that could occur when a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt;
statement failed to match a class with arguments. Fixed in 2.4.9
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MSYS2:&lt;/strong&gt; Implemented a workaround for non-normalized paths returned
by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.normpath&lt;/span&gt;&lt;/code&gt; in &lt;strong&gt;MSYS2&lt;/strong&gt; Python environments. Fixed in
2.4.11 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.12:&lt;/strong&gt; Resolved an issue where Nuitka’s constant code was
triggering assertions in Python 3.12.7. Fixed in 2.4.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Ensured that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; option includes both
Python modules and extension modules that are sub-modules of the
specified package. Fixed in 2.4.11 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Prevented encoding issues with CMD files used for
accelerated mode on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Improved the standard library scan to avoid assuming
the presence of specific files, which might have been deleted by the
user or a Python distribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;suffix&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;suffixes&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;stem&lt;/span&gt;&lt;/code&gt;
attributes to Nuitka resource readers to improve compatibility with
file objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Backported the error message change for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt;
&lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; used at the module level, using dynamic detection instead of
hardcoded text per version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Fixed an issue where calling built-in functions
with keyword-only arguments could result in errors due to incorrect
argument passing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Fixed reference leaks that occurred when using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list.insert&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list.index&lt;/span&gt;&lt;/code&gt; with 2 or 3 arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Prioritized relative paths over absolute paths for the
result executable when absolute paths are not file system encodable.
This helps address issues related to non-ASCII short paths on some
Chinese systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Improved compatibility with C extensions by
handling cases where the attribute slot is not properly implemented,
preventing potential segfaults.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Prevent the leakage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.frozen&lt;/span&gt;&lt;/code&gt; when using
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; module and its plugin, resolving a
long-standing TODO and potentially breaking compatibility with
packages that relied on this behavior.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Fixed an issue where matching calls with
keyword-only arguments could lead to incorrect optimization and
argument passing errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Corrected the handling of iterators in for loops
to avoid assuming the presence of slots, preventing potential issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Added support for cyclic DLL dependencies, where DLLs have
circular references.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Ensured the use of updated expressions during
optimization phase for side effects to prevent crashes caused by
referencing obsolete information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.10+:&lt;/strong&gt; Fixed a crash that could occur in complex cases
when re-formulating &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; statements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.4-3.5:&lt;/strong&gt; Corrected an issue in Nuitka’s custom
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyDict_Next&lt;/span&gt;&lt;/code&gt; implementation that could lead to incorrect results
in older Python 3 versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.10+:&lt;/strong&gt; Ensured that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AttributeError&lt;/span&gt;&lt;/code&gt; is raised with the
correct keyword arguments, avoiding a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TypeError&lt;/span&gt;&lt;/code&gt; that occurred
previously.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Added a data file function that avoids loading packages,
preventing potential crashes caused by incompatible dependencies
(e.g., &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; versions).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Ensured that Nuitka’s package reader closes data
files after reading them to prevent resource warnings in certain
Python configurations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Exposed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; contained vendor packages in
standalone distributions to match the behavior of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accelerated Mode:&lt;/strong&gt; Enabled the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;django&lt;/span&gt;&lt;/code&gt; module parameter in
accelerated mode to correctly detect used extensions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Prevented resource warnings for unclosed files
when trace outputs are sent to files via command line options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Enabled the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xmlrpc.server&lt;/span&gt;&lt;/code&gt; without
requiring the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Fixed an issue in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; configuration where
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;change_function&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;change_classes&lt;/span&gt;&lt;/code&gt; ignored “when” clauses,
leading to unintended changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.12 (Linux):&lt;/strong&gt; Enhanced static &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; handling for
Linux. Static &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; is now used only when the inline copy is
available (not in official Debian packages). The inline copy of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hacl&lt;/span&gt;&lt;/code&gt; is used for all Linux static &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; uses with Python
3.12 or higher.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standalone:&lt;/strong&gt; Further improved the standard library scan to avoid
assuming the presence of files that might have been manually deleted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Fixed the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-raw-dir&lt;/span&gt;&lt;/code&gt; option, which was not
functioning correctly. Only the Nuitka Package configuration was
being used previously.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="package-support"&gt;
&lt;h2&gt;Package Support&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;arcade:&lt;/strong&gt; Improved standalone configuration for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;arcade&lt;/span&gt;&lt;/code&gt;
package. Added in 2.4.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;license-expression:&lt;/strong&gt; Added a missing data file for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;license-expression&lt;/span&gt;&lt;/code&gt; package in standalone distributions. Added in
2.4.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;pydantic:&lt;/strong&gt; Included a missing implicit dependency required for
deprecated decorators in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt; package to function
correctly in standalone mode. Fixed in 2.4.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;spacy:&lt;/strong&gt; Added a missing implicit dependency for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;spacy&lt;/span&gt;&lt;/code&gt;
package in standalone distributions. Added in 2.4.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;trio:&lt;/strong&gt; Updated standalone support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;trio&lt;/span&gt;&lt;/code&gt; package. Added in 2.4.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;tensorflow:&lt;/strong&gt; Updated standalone support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; package. Added in 2.4.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;pygame-ce:&lt;/strong&gt; Added standalone support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygame-ce&lt;/span&gt;&lt;/code&gt;
package. Added in 2.4.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;toga:&lt;/strong&gt; Added standalone support for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt;
package on Windows. Added in 2.4.9 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;django:&lt;/strong&gt; Implemented a workaround for a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;django&lt;/span&gt;&lt;/code&gt; debug feature
that attempted to extract column numbers from compiled frames. Added
in 2.4.9 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PySide6:&lt;/strong&gt; Improved standalone support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; on macOS by
allowing the recognition of potentially unusable plugins. Added in
2.4.9 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;polars:&lt;/strong&gt; Added a missing dependency for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;polars&lt;/span&gt;&lt;/code&gt; package in
standalone distributions. Added in 2.4.9 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;django:&lt;/strong&gt; Enhanced handling of cases where the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;django&lt;/span&gt;&lt;/code&gt; settings
module parameter is absent in standalone distributions. Added in
2.4.9 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;win32ctypes:&lt;/strong&gt; Included missing implicit dependencies for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32ctypes&lt;/span&gt;&lt;/code&gt; modules on Windows in standalone distributions. Added
in 2.4.9 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;arcade:&lt;/strong&gt; Added a missing data file for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;arcade&lt;/span&gt;&lt;/code&gt; package in
standalone distributions. Added in 2.4.9 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PySide6:&lt;/strong&gt; Allowed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; extras to be optional on macOS in
standalone distributions, preventing complaints about missing DLLs
when they are not installed. Added in 2.4.11 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;driverless-selenium:&lt;/strong&gt; Added standalone support for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;driverless-selenium&lt;/span&gt;&lt;/code&gt; package. Added in 2.4.11 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;tkinterdnd2:&lt;/strong&gt; Updated standalone support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkinterdnd2&lt;/span&gt;&lt;/code&gt; package. Added in 2.4.11 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;kivymd:&lt;/strong&gt; Updated standalone support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;kivymd&lt;/span&gt;&lt;/code&gt; package. Added in 2.4.11 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;gssapi:&lt;/strong&gt; Added standalone support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gssapi&lt;/span&gt;&lt;/code&gt; package.
Added in 2.4.11 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;azure.cognitiveservices.speech:&lt;/strong&gt; Added standalone support for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;azure.cognitiveservices.speech&lt;/span&gt;&lt;/code&gt; package on macOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;mne:&lt;/strong&gt; Added standalone support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mne&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;fastapi:&lt;/strong&gt; Added a missing dependency for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;fastapi&lt;/span&gt;&lt;/code&gt; package
in standalone distributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;pyav:&lt;/strong&gt; Updated standalone support for newer versions of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyav&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;py_mini_racer:&lt;/strong&gt; Added standalone support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;py_mini_racer&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;keras:&lt;/strong&gt; Improved standalone support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;keras&lt;/span&gt;&lt;/code&gt; by extending its
sub-modules path to include the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;keras.api&lt;/span&gt;&lt;/code&gt; sub-package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;transformers:&lt;/strong&gt; Updated standalone support for newer versions of
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;win32com.server.register:&lt;/strong&gt; Updated standalone support for newer
versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com.server.register&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.12+:&lt;/strong&gt; Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;
for Python 3.12 and later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;cv2:&lt;/strong&gt; Enabled automatic scanning of missing implicit imports for
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; package in standalone distributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;lttbc:&lt;/strong&gt; Added standalone support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lttbc&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;win32file:&lt;/strong&gt; Added a missing dependency for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32file&lt;/span&gt;&lt;/code&gt;
package in standalone distributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;kivy:&lt;/strong&gt; Fixed an issue where the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;kivy&lt;/span&gt;&lt;/code&gt; clipboard was not working
on Linux due to missing dependencies in standalone distributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;paddleocr:&lt;/strong&gt; Added missing data files for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;paddleocr&lt;/span&gt;&lt;/code&gt; package
in standalone distributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;playwright:&lt;/strong&gt; Added standalone support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;playwright&lt;/span&gt;&lt;/code&gt;
package with a new plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PySide6:&lt;/strong&gt; Allowed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; extras to be optional on macOS in
standalone distributions, preventing complaints about missing DLLs
when they are not installed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python 3.13:&lt;/strong&gt; Added experimental support for Python 3.13.&lt;/p&gt;
&lt;div class="admonition warning"&gt;
&lt;p class="admonition-title"&gt;Warning&lt;/p&gt;
&lt;p&gt;Python 3.13 support is not yet recommended for production use due
to limited testing. On Windows, only MSVC and ClangCL are
currently supported due to workarounds needed for incompatible
structure layouts.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Introduced a new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mode&lt;/span&gt;&lt;/code&gt; selector to replace the options
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--standalone&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--module&lt;/span&gt;&lt;/code&gt;, and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-create-app-bundle&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;app&lt;/span&gt;&lt;/code&gt; mode creates an app bundle on macOS and a onefile
binary on other operating systems to provide the best deployment
option for each platform.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Added a new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hide&lt;/span&gt;&lt;/code&gt; choice for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-console-mode&lt;/span&gt;&lt;/code&gt; option. This generates a console program
that hides the console window as soon as possible, although it may
still briefly flash.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Added the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-B&lt;/span&gt;&lt;/code&gt; option to disable the use of
bytecode cache (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyc&lt;/span&gt;&lt;/code&gt;) files during imports. This is mainly
relevant for accelerated mode and dynamic imports in non-isolated
standalone mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modules:&lt;/strong&gt; Enabled the generation of type stubs (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files)
for compiled modules using an inline copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;stubgen&lt;/span&gt;&lt;/code&gt;. This
provides more accurate and informative type hints for compiled code.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Nuitka also adds implicit imports to compiled extension modules,
ensuring that dependencies are not hidden.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Changed the data files configuration to a list of items,
allowing the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; conditions for more flexible control.
Done in 2.4.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onefile:&lt;/strong&gt; Removed the MSVC requirement for the splash screen in
onefile mode. It now works with MinGW64, Clang, and ClangCL. Done for
2.4.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reports:&lt;/strong&gt; Added information about the file system encoding used
during compilation to help debug encoding issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Improved the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;attach&lt;/span&gt;&lt;/code&gt; mode for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-console-mode&lt;/span&gt;&lt;/code&gt; when forced redirects are used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distutils:&lt;/strong&gt; Added the ability to disable Nuitka in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt; builds using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;build_with_nuitka&lt;/span&gt;&lt;/code&gt; setting.
This allows falling back to the standard &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;build&lt;/span&gt;&lt;/code&gt; backend without
modifying code or configuration. This setting can also be passed on
the command line using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--config-setting&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distutils:&lt;/strong&gt; Added support for commercial file embedding in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Linux:&lt;/strong&gt; Added support for using uninstalled self-compiled Python
installations on Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Enabled the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; plugin to react to active Qt
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkinter&lt;/span&gt;&lt;/code&gt; plugins for backend selection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Runtime:&lt;/strong&gt; Added a new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;original_argv0&lt;/span&gt;&lt;/code&gt; attribute to the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; value to provide access to the original start value
of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.argv[0]&lt;/span&gt;&lt;/code&gt;, which might be needed by applications when Nuitka
modifies it to an absolute path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reports:&lt;/strong&gt; Added a list of DLLs that are actively excluded because
they are located outside of the PyPI package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Allowed plugins to override the compilation mode for
standard library modules when necessary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Implemented experimental support for “dual types”,
which can significantly speed up integer operations in specific cases
(achieving speedups of 12x or more in some very specific loops). This
feature is still under development but shows promising potential for
future performance gains, esp. when combined with future PGO (Profile
Guided Optimization) work revealing likely runtime types more often
and more types being covered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Improved the speed of module variable access.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;For Python 3.6 to 3.10, this optimization utilizes dictionary
version tags but may be less effective when module variables
are frequently written to.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Python 3.11+, it relies on dictionary key versions, making
it less susceptible to dictionary changes but potentially
slightly slower for cache hits compared to Python 3.10.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Accelerated string dictionary lookups for Python
3.11+ by leveraging knowledge about the key and the module
dictionary’s likely structure. This also resolves a previous TODO
item, where initial 3.11 support was not as fast as our support for
3.10 was in this domain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Optimized module dictionary updates to occur only
when values actually change, improving caching efficiency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Enhanced exception handling by removing bloat in the
abstracted differences between Python 3.12 and earlier versions. This
simplifies the generated C code, reduces conversions, and improves
efficiency for all Python versions. This affects both C compile time
and runtime performance favorably and solves a huge TODO for Python
3.12 performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Removed the use of CPython APIs calls for accessing
exception context and cause values, which can be slow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Utilized Nuitka’s own faster methods for creating
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; values, avoiding slower CPython API calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Implemented a custom variant of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_PyGen_FetchStopIterationValue&lt;/span&gt;&lt;/code&gt; to avoid CPython API calls in
generator handling, further improving performance on generators,
coroutines and asyncgen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Aligned with CPython’s change in reference counting
implementation on Windows for Python 3.12+, which improves
performance with LTO (Link Time Optimization) enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimization:&lt;/strong&gt; Expanded static optimization to include unary
operations, improving the handling of number operations and preparing
for full support of dual types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimization:&lt;/strong&gt; Added static optimization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.stat&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.lstat&lt;/span&gt;&lt;/code&gt; calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Passed the exception state directly into unpacking
functions, eliminating redundant exception fetching and improving
code efficiency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Introduced a dedicated helper for unpacking length
checks, resulting in faster and more compact code helping scalability
as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Generated more efficient code for raising built-in
exceptions by directly creating them through the base exception’s
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;new&lt;/span&gt;&lt;/code&gt; method instead of calling them as functions. This can speed
up some things by a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Optimized exception creation by avoiding unnecessary
tuple allocations for empty exceptions. This hack avoids hitting the
memory allocator as much.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Replaced remaining uses of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyTuple_Pack&lt;/span&gt;&lt;/code&gt; with
Nuitka’s own helpers to avoid CPython API calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Generation:&lt;/strong&gt; Replaced implicit exception raise nodes with
direct exception creation nodes for improved C code generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Aligned with CPython’s change in managing object
reference counters on Windows for Python 3.12+, improving performance
with LTO enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Removed remaining CPython API calls when creating
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; values in various parts of the code, including specialization
code, helpers, and constants loading.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Avoided scanning for DLLs in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; environment
variable when they are not intended to be used from the system. This
prevents potential crashes related to non-encodable DLL paths and
makes those scans faster too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Updated to a newer MinGW64 version from 13.2 to 14.2 for
potentially improved binary code generation with that compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Size:&lt;/strong&gt; Reduced the size of constant blobs by avoiding
module-level constants for the global values &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-1&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;0&lt;/span&gt;&lt;/code&gt;, and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Generation:&lt;/strong&gt; Improved code generation for variables by
directly placing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NameError&lt;/span&gt;&lt;/code&gt; exceptions into the thread state when
raised, making for more compact C code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimization:&lt;/strong&gt; Statically optimized the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.ps1&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.ps2&lt;/span&gt;&lt;/code&gt; values to not exist (unless in module mode), potentially
enabling more static optimization in packages that detect interactive
usage checking them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Limited the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; locking to no-GIL and
Scons builds where threading is actively used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimization:&lt;/strong&gt; Implemented a faster check for non-frame statement
sequences by decoupling frames and normal statement sequences and
using dedicated accessors. This improves performance during the
optimization phase.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="anti-bloat"&gt;
&lt;h2&gt;Anti-Bloat&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Prevented the inclusion of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_metadata&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt;
package. Added in 2.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandera&lt;/span&gt;&lt;/code&gt; package. Added in
2.4.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shap&lt;/span&gt;&lt;/code&gt; package. Added
in 2.4.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prevented attempts to include both Python 2 and Python 3 code for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;aenum&lt;/span&gt;&lt;/code&gt; package, avoiding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; warnings. Added in 2.4.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced handling for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sympy&lt;/span&gt;&lt;/code&gt; package. Added in 2.4.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allowed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyqtgraph&lt;/span&gt;&lt;/code&gt; package. Added in 2.4.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;time_machine&lt;/span&gt;&lt;/code&gt; package. Added in 2.4.9
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anyio&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated anti-bloat measures for newer versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt;
package with increased coverage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygame.tests&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygame&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allowed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;absl.testing&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allowed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tufup&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoided test modules when using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bsdiff4&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Treated the use of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wheel&lt;/span&gt;&lt;/code&gt; module the same as using the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Development Environment:&lt;/strong&gt; Added experimental support for a
devcontainer to the repository, providing an easier way to set up a
Linux-based development environment. This feature is still under
development and may require further refinement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Issue Reporting:&lt;/strong&gt; Clarified the issue reporting process on GitHub,
emphasizing the importance of testing reproducers against Python
first to ensure the issue is related to Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Issue Reporting:&lt;/strong&gt; Discouraged the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deployment&lt;/span&gt;&lt;/code&gt; in issue
reports, as it hinders the automatic identification of issues, that
should be the first thing to remove.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Improved the clarity of help message of the option for
marking data files as external, emphasizing that files must be
included before being used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Added checks to the Qt plugins to ensure that specified
plugin families exist, preventing unnoticed errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Implemented heuristic detection of terminal link support,
paving the way for adding links to options and groups in the command
line interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Removed obsolete caching-related options from the help
output, as they have been replaced by more general options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Improved error messages when retrieving information from
packages during compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; Implemented a workaround for an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt; bug that
prevented it from handling UTF-8 comments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; Updated GitHub actions to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format-20&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; Updated to the latest version of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt; for code
formatting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release Process:&lt;/strong&gt; Updated the release script tests for Debian and
PyPI to use the correct runner names. (Changed in 2.4.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Disabled progress bar locking, as Nuitka currently doesn’t
utilize threads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Added heuristic detection of terminal link support and
introduced an experimental terminal link as a first step towards a
more interactive command line interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt; Fixed a crash in the “explain reference counts”
feature that could occur with unusual &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; values mistaken for
modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt; Included reference counts of tracebacks when dumping
reference counts at program end.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt; Added assertions and traces to improve debugging of
input/output handling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; Added checks for configuration module names in Nuitka
package configuration to catch errors caused by using filenames
instead of module names.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI:&lt;/strong&gt; Removed obsolete options controlling cache behavior,
directing users to the more general cache options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scons:&lt;/strong&gt; Ensured that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CC&lt;/span&gt;&lt;/code&gt; environment variable is used
consistently for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; and onefile bootstrap builds, as well
as the Python build, preventing inconsistencies in compiler usage and
outputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distutils:&lt;/strong&gt; Added the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compiled-package-hidden-by-package&lt;/span&gt;&lt;/code&gt;
mnemonic for use in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; to handle the expected warning when
a Python package is replaced with a compiled package and the Python
code is yet to be deleted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dependency Management:&lt;/strong&gt; Started experimental support for
downloading Nuitka dependencies like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ordered-set&lt;/span&gt;&lt;/code&gt;. This feature is
not yet ready for general use.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added Python 3.13 to the GitHub Actions test matrix.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Significantly enhanced construct-based tests for clearer results. The
new approach executes code with a boolean flag instead of generating
different code, potentially leading to the removal of custom
templating.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; conversion code from the test suite, as it is
being removed from newer Python versions. Tests are now split with
version requirements as needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed an issue where the test runner did not discover and use Python
3.12+, resulting in insufficient test coverage for those versions on
GitHub Actions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensured that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compare_with_cpython&lt;/span&gt;&lt;/code&gt; test function defaults to
executing the system’s Python interpreter instead of relying on the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHON&lt;/span&gt;&lt;/code&gt; environment variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up continuous integration with Azure Pipelines to run Nuitka
tests against the factory branch on each commit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enforced the use of static &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; for construct-based tests to
eliminate DLL call overhead and provide more accurate performance
measurements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved the robustness of many construct tests, making them less
sensitive to unrelated optimization changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed a test that was only applicable to Nuitka Commercial, as it
was not useful to always skip it in the standard version. Commercial
tests are now also recognized by their names.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added handling for segmentation faults in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; test cases,
providing debug output for easier diagnosis of these failures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prevented resource warnings for unclosed files in a reflected test.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WASI:&lt;/strong&gt; Corrected the signatures of C function getters and setters
for compiled types in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;WASI&lt;/span&gt;&lt;/code&gt; to ensure they match the calling
conventions. Casts are now performed locally to the compiled types
instead of in the function signature. Call entries also have the
correct signature used by Python C code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WASI:&lt;/strong&gt; Improved code cleanliness by adhering to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyCFunction&lt;/span&gt;&lt;/code&gt;
signatures in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;WASI&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Generation:&lt;/strong&gt; Fixed a regression in code generation that
caused misaligned indentation in some cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Formatting:&lt;/strong&gt; Changed some code for identical formatting with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format-20&lt;/span&gt;&lt;/code&gt; to eliminate differences between the new and old
versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Caching:&lt;/strong&gt; Enforced proper indentation in Nuitka cache files stored
in JSON format.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Cleanliness:&lt;/strong&gt; Replaced checks for Python 3.4 or higher with
checks for Python 3, simplifying the code and reflecting the fact
that Python 3.3 is no longer supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Cleanliness:&lt;/strong&gt; Removed remaining Python 3.3 specific code from
frame templates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Cleanliness:&lt;/strong&gt; Performed numerous spelling corrections and
renamed internal helper functions for consistency and clarity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Renamed the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;get_module_directory&lt;/span&gt;&lt;/code&gt; helper function in
the Nuitka Package configuration to remove the leading underscore,
improving readability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Moved the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numexpr.cpuinfo&lt;/span&gt;&lt;/code&gt; workaround to the
appropriate location in the Nuitka Package configuration, resolving
an old TODO item.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This a major release that brings support for Python 3.13, relatively
soon after its release.&lt;/p&gt;
&lt;p&gt;Our plugin system and Nuitka plugin configuration was used a lot for
support of many more third-party packages, and numerous other
enhancements in the domain of avoiding bloat.&lt;/p&gt;
&lt;p&gt;This release focuses on improved compatibility, new break through
performance optimizations, to build on in the future, enhanced error
reporting, and better debugging support.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-25.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2024-11-27T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-24.html</id>
    <title>Nuitka Release 2.4</title>
    <updated>2024-07-30T09:09:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-2-4"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release largely contains bug fixes for the previous changes, but
also finishes full compatibility with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; statements of 3.10,
something that was long overdue since there were always some
incompatible behaviors there.&lt;/p&gt;
&lt;p&gt;In terms of bug fixes, it’s also huge. An upgrade is required,
especially for new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; that made compiled programs segfault
at startup.&lt;/p&gt;
&lt;nav class="contents page-toc local" id="table-of-contents"&gt;
&lt;p class="topic-title"&gt;Table of Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#bug-fixes" id="id1"&gt;Bug Fixes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#package-support" id="id2"&gt;Package Support&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#new-features" id="id3"&gt;New Features&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#optimization" id="id4"&gt;Optimization&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#anti-bloat" id="id5"&gt;Anti-Bloat&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#organizational" id="id6"&gt;Organizational&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#tests" id="id7"&gt;Tests&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#cleanups" id="id8"&gt;Cleanups&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#summary" id="id9"&gt;Summary&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id1" role="doc-backlink"&gt;Bug Fixes&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;UI: Fix, we had reversed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;disable&lt;/span&gt;&lt;/code&gt; / &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;force&lt;/span&gt;&lt;/code&gt; and wrong option
name recommendation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-console-mode&lt;/span&gt;&lt;/code&gt; when the user used
old-style options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Fix, must not check for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;len&lt;/span&gt;&lt;/code&gt; greater or equal of 0 or
for sequence &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; cases. That is unnecessary and incompatible
and can raise exceptions with custom sequences not implementing
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__len__&lt;/span&gt;&lt;/code&gt;. Fixed in 2.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; sequence with final star arguments failed
in some cases to capture the rest. The assigned value then was
empty.when it shouldn’t have been. Fixed in 2.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8+: Fix, calls to variable args functions now need to be done
differently, or else they can crash, as was observed with 3.10 in PGO
instrumentation, at least. Fixed in 2.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PGO: Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-run&lt;/span&gt;&lt;/code&gt; did not execute the program created as
expected. Fixed in 2.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Support extension modules used as DLLs by other DLLs or
extension modules. That makes newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; and potentially
more packages work again. Fixed in 2.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Matches classes were not fully compatible.&lt;/p&gt;
&lt;p&gt;We need to check against case-defined class &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__match_args__&lt;/span&gt;&lt;/code&gt;, not
the matched value type &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__match_args&lt;/span&gt;&lt;/code&gt; that is not necessarily the
same.&lt;/p&gt;
&lt;p&gt;Also, properly annotating the exception exit of subscript matches;
the subscript value can indeed raise an exception.&lt;/p&gt;
&lt;p&gt;Collect keyword and positional match values in one go and detect
duplicate attributes used, which we previously did not.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, do not crash when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang&lt;/span&gt;&lt;/code&gt; is not reporting its version
correctly. It happened if &lt;strong&gt;Clang&lt;/strong&gt; usage was required with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--clang&lt;/span&gt;&lt;/code&gt; option but not installed. Fixed in 2.3.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Fix, detecting the &lt;strong&gt;Debian&lt;/strong&gt; flavor of Python was not
working anymore, and as a result, the intended defaults were no
longer applied by &lt;strong&gt;Nuitka&lt;/strong&gt;, leading to incorrect suggestions that
didn’t work. Fixed in 2.3.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ubuntu: Fix, the static link library for Python 3.12 is not usable
unless we provide parts of &lt;strong&gt;HACL&lt;/strong&gt; for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sha2&lt;/span&gt;&lt;/code&gt; module so as not
to cause link errors. Fixed in 2.3.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, importing newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; was crashing.
Fixed in 2.3.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11+: Added support for newer Python with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt;.
Fixed in 2.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Support locating Windows icons for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywebview&lt;/span&gt;&lt;/code&gt;. Fixed
in 2.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;spacy&lt;/span&gt;&lt;/code&gt; related packages. Fixed in
2.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.12: Fix, our workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; support cannot use the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imp&lt;/span&gt;&lt;/code&gt; module anymore. Fixed in 2.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__&lt;/span&gt;&lt;/code&gt; files that are
extension modules. Architecture checks for macOS were false negatives
for them, and the case insensitive import scan failed to find them on
Windows. Fixed in 2.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependencies for standard library extension
modules, mainly exhibited on macOS. Fixed in 2.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix build failures on mapped network drives. Fixed in 2.3.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.12: Fix, need to set frame &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;prev_inst&lt;/span&gt;&lt;/code&gt; or else &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f_lasti&lt;/span&gt;&lt;/code&gt;
is random. Some packages; for example PySide6; use this to check what
bytecode calls them or how they import them and it could crash when
attempting it. Fixed in 2.3.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, fork bomb in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cpuinfo&lt;/span&gt;&lt;/code&gt; package no longer happens. Fixed in
2.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka-Python: Fix, cannot ask for shared library prefixes. Fixed in
2.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Make sure &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;keras&lt;/span&gt;&lt;/code&gt; package dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt;
is visible. Fixed in 2.3.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Fix, for static executables we should ignore errors setting a
DLL load path. Fixed in 2.3.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, nuitka resource readers also need to have
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.parent&lt;/span&gt;&lt;/code&gt; attribute. Fixed in 2.3.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to force no-locale language outputs for tools outputs on
non-Windows. Our previous methods were not forcing enough.&lt;/p&gt;
&lt;p&gt;For non-Windows this makes Nuitka work on systems with locales active
for message outputs only. Fixed in 2.3.10 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, was not using proper result value for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SET_ATTRIBUTE&lt;/span&gt;&lt;/code&gt; to check
success in a few corner cases. Fixed in 2.3.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Retry deleting dist and build folders, allowing users to
recognize still running programs and not crashing on Anti-Virus
software still locking parts of them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict.fromkeys&lt;/span&gt;&lt;/code&gt; didn’t give compatible error messages for no
args given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, output correct unsupported exception messages for in-place
operations&lt;/p&gt;
&lt;p&gt;For in-place &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt;, it was also incompatible, since it must not
mention the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pow&lt;/span&gt;&lt;/code&gt; function.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, included metadata could lead to instable code generation. We
were using a dictionary for it, but that is not as stable order for
the C compiler to fully benefit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, including data files for packages that are extension modules was
not working yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Detect the DLL path of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; (if used) by looking at
dependencies of the running Python binary rather than encoding what
CPython does. Doing that covers other Python flavors as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to prefer extension modules over Python code for packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, immutable constant values are not to be treated as very trusted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__loader__&lt;/span&gt;&lt;/code&gt; attribute of a module should be an
object and not only the class, otherwise only static methods can
work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.name&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.path&lt;/span&gt;&lt;/code&gt; attributes to Nuitka loader
objects for enhanced compatibility with code that expects source code
loaders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.argv[0]&lt;/span&gt;&lt;/code&gt; needs to be absolute for best usability.&lt;/p&gt;
&lt;p&gt;For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dirname(sys.argv[0])&lt;/span&gt;&lt;/code&gt; to be usable even if the program is
launched via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; environment by a shell, we cannot rely on how
we are launched since that won’t be a good path, unlike with Python
interpreter, where it always is.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, adding missing dependencies for some crypto
packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.12: Need to write to thread local variable during import.
This however doesn’t work for Windows and non-static libpython
flavors in general.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Enforce using system &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;codesign&lt;/span&gt;&lt;/code&gt; as the Anaconda one is not
working for us.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, we need to read &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files as source code. Otherwise unicode
characters can cause crashes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, some packages query private values for distribution
objects, so use the same attribute name for the path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multidist: Make sure to follow the multidist reformulation modules.
Otherwise in accelerated mode, these could end up not being included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to hold a reference of the iterable while converting it to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, this wasn’t properly ignoring &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; values in load
descriptions as intended.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Need to allow DLLs from all Homebrew paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Do not crash during report writing for very early errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11+: Fix, need to make sure we have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;split&lt;/span&gt;&lt;/code&gt; as a constant
value when using exception groups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: More robust against problematic distribution folders with no
metadata, these apparently can happen with OS upgrades.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, was leaking exception in case of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-m&lt;/span&gt;&lt;/code&gt; mode that
could cause errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Close standard file handles on process forks as
CPython does. This should enhance things for compilations using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;attach&lt;/span&gt;&lt;/code&gt; on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="package-support"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;Package Support&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data file for older &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bokeh&lt;/span&gt;&lt;/code&gt; version. Fixed in
2.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Support older &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt; versions as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;panel&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for the newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;kivy&lt;/span&gt;&lt;/code&gt; version and added
macOS support as well. Fixed in 2.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Include all &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;kivy.uix&lt;/span&gt;&lt;/code&gt; packages with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;kivy&lt;/span&gt;&lt;/code&gt;, so their
typical config driven usage is not too hard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lxml.sax&lt;/span&gt;&lt;/code&gt; module. Fixed
in 2.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zeroconf&lt;/span&gt;&lt;/code&gt; package.
Fixed in 2.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; version 2. Fixed in 2.3.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: More complete support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tables&lt;/span&gt;&lt;/code&gt; package. Fixed in
2.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy.signal&lt;/span&gt;&lt;/code&gt; package.
Fixed in 2.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;moviepy&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imageio_ffmeg&lt;/span&gt;&lt;/code&gt;
packages. Fixed in 2.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt;. Fixed in 2.3.10
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bpy&lt;/span&gt;&lt;/code&gt; package. For full support
more work will be needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nes_py&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gym_tetris&lt;/span&gt;&lt;/code&gt; packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dash&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plotly&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;usb1&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;azure.cognitiveservices.speech&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tinycudann&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com.server.register&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jaxtyping&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;open3d&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; submodule import function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;paddleocr&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;New Features&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Experimental support for Python 3.13 beta 3. We try to follow its
release cycle closely and aim to support it at the time of CPython
release. We also detect no-GIL Python and can make use of it. The GIL
status is output in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; format and the GIL usage is
available as a new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{GIL}&lt;/span&gt;&lt;/code&gt; variable for project options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Added experimental option
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--experimental=force-system-scons&lt;/span&gt;&lt;/code&gt; to enforce system Scons to be
used. That allows for the non-use of inline copy, which can be
interesting for experiments with newer Scons releases. Added in 2.3.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: A new non-deployment handler helps when segmentation
faults occurred. The crashing program then outputs a message pointing
to a page with helpful information unless the deployment mode is
active.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Begin merging changes for WASI support. Parts of the C changes were
merged and for other parts, command line option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--target=wasi&lt;/span&gt;&lt;/code&gt; was
added, and we are starting to address cross platform compilation for
it. More work will be necessary to fully merge it, right not it
doesn’t work at all yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PGO: Added support for using it in standalone mode as well, so once
we use it more, it will immediately be practical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--list-package-dlls&lt;/span&gt;&lt;/code&gt; use plugins as well, and make
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;delvewheel&lt;/span&gt;&lt;/code&gt; and announce its DLL path internally, too. Listing
DLLs for packages using plugins can use these paths for more complete
outputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-qt&lt;/span&gt;&lt;/code&gt; plugin was usable in accelerated mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added included metadata and reasons for it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;spacy&lt;/span&gt;&lt;/code&gt; with a new plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Use existing source files as if they were &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt;
files for extension modules. That gives us dependencies for code that
installs source code and extension modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Make version information, onefile mode, and onefile cached
mode indication available in Nuitka Package Configuration, too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Warn about using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tendo.singleton&lt;/span&gt;&lt;/code&gt; in non-cached onefile
mode.&lt;/p&gt;
&lt;p&gt;Tendo uses the running binary name for locking by default. So it’s
not going to work if that changes for each execution, make the user
aware of that, so they can use cached mode instead.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Include the micro pass counts and tracing merge statistics
so we can see the impact of new optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Allow to specify modes in the Nuitka Package Configuration
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;annotations&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doc_strings&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asserts&lt;/span&gt;&lt;/code&gt;. These overrule
global configuration, which is often not practical. Some modules may
require annotations, but for other packages, we will know they are
fine without them. Simply disabling annotations globally barely
works. For some modules, removing annotations can give a 30%
compile-time speedup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added module configuration for Django to find commands
and load its engine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow negative values for –jobs to be relative to the system core
count so that you can tell Nuitka to use all but two cores with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--jobs=-2&lt;/span&gt;&lt;/code&gt; and need not hardcode your current code count.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.12: Annotate libraries that are currently not supported&lt;/p&gt;
&lt;p&gt;We will need to provide our own Python3.12 variant to make them work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11+: Catch calls to uncompiled function objects with compiled
code objects. We now raise a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RuntimeError&lt;/span&gt;&lt;/code&gt; in the bytecode making
it easier to catch them rather than segfaulting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Optimization&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Statically optimize constant subscripts of variables with immutable
constant values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Forward propagate very trusted values for variable references
enabling a lot more optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8+: Calls of C functions are faster and more compact code
using vector calls, too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Mark our compiled types as immutable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.12: Constant returning functions are dealing with immortal
values only. Makes their usage slightly faster since no reference
count handling is needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Faster attribute descriptor lookups. Have our own
replacement of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyDesc_IsData&lt;/span&gt;&lt;/code&gt; that had become an API call, making
it very slow on Windows specifically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using Python API function for determining sequence sizes when
getting a length size for list creations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data Composer: More compact and portable Python3 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; (Python2
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt;) value representation.&lt;/p&gt;
&lt;p&gt;Rather than fixed native length 8 or 4 bytes, we use variable length
encoding which for small values uses only a single byte.&lt;/p&gt;
&lt;p&gt;This also avoids using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;struct.pack&lt;/span&gt;&lt;/code&gt; with C types, as we might be
doing cross platform, so this makes part of the WASI changes
unnecessary at the same time.&lt;/p&gt;
&lt;p&gt;Large values are also more compact because middle 31-bit portions can
be less than 4 bytes and save space on average.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data Composer: Store bytecode blob size more efficient and portable,
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prepare having knowledge of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__prepare__&lt;/span&gt;&lt;/code&gt; result to be dictionaries
per compile time decisions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added more hard trust for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;typing&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;typing.Text&lt;/span&gt;&lt;/code&gt; is a constant too. In debug mode, we now check
all exports of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;typing&lt;/span&gt;&lt;/code&gt; for constant values. This will allow to
find missing values sooner in the future.&lt;/p&gt;
&lt;p&gt;Added the other types to be known to exist. That should help
scalability for types intensive code somewhat by removing error
handling for them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Should use static libpython with Anaconda as it works there
too, and reduces issues with Python3.12 and extension module imports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Statically optimize by OS in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sysconfig&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Consequently, standalone distributions can exclude OS-specific
packages such as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_aix_support&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_osx_support&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid changing code names for complex call helpers&lt;/p&gt;
&lt;p&gt;The numbering of complex call helper as normally applied to all
functions are, caused this issue. When part of the code is used from
the bytecode cache, they never come to exist and the C code of
modules using them then didn’t match.&lt;/p&gt;
&lt;p&gt;This avoids an extra C re-compilation for some modules that were
using renumbered function the second time around a compilation
happens. Added in 2.3.10 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using C-API when creating &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt; value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster indentation of generated code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="anti-bloat"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Anti-Bloat&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Add new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt; bloat mode to trigger warnings when using it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recognize usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.distutils&lt;/span&gt;&lt;/code&gt; as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; bloat for
more direct reporting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid compiling large &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opcua&lt;/span&gt;&lt;/code&gt; modules that generate huge C files
much like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncua&lt;/span&gt;&lt;/code&gt; package. Added in 2.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shiboken2&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shiboken6&lt;/span&gt;&lt;/code&gt; modules from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt;
package when the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-qt&lt;/span&gt;&lt;/code&gt; plugin is used. Added in 2.3.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changes for not using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt;
version 2. Added in 2.3.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;packaging&lt;/span&gt;&lt;/code&gt; dependencies from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PIL&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;webbrowser&lt;/span&gt;&lt;/code&gt; module from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;keras&lt;/span&gt;&lt;/code&gt; package. Added in 2.3.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_oxs_support&lt;/span&gt;&lt;/code&gt; (used by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sysconfig&lt;/span&gt;&lt;/code&gt;)
module on macOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;werkzeug&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.3.10
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module. Fixed in 2.3.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt; from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xmlrpc.server&lt;/span&gt;&lt;/code&gt;. Fixed in 2.3.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_docstrings&lt;/span&gt;&lt;/code&gt; support for numpy2 as well. Fixed in 2.3.10
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib.memory&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gsplat&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jax&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;networkx&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Organizational&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3.12: Added annotations of official support for &lt;strong&gt;Nuitka&lt;/strong&gt; PyPI
package and test runner options that were still missing. Fixed in
2.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Change runner scripts. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka3&lt;/span&gt;&lt;/code&gt; is no more. Instead, we
have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka2&lt;/span&gt;&lt;/code&gt; where it applies. Also, we now use CMD files rather
than batch files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Check filenames for data files for illegal paths on the
respective platforms. Some user errors with data file options become
more apparent this way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Check spec paths more for illegal paths as well. Also do not
accept system paths like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{TEMP}&lt;/span&gt;&lt;/code&gt; and no path separator after it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Handle report writing interrupt with CTRL-C more gracefully. No
need to present this this as a general problem, rather inform the
user that he did it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;NoGIL: Warn if using a no-GIL Python version, as this mode is not yet
officially supported by &lt;strong&gt;Nuitka&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added badges to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;README.rst&lt;/span&gt;&lt;/code&gt; of &lt;strong&gt;Nuitka&lt;/strong&gt; to display package
support and more. Added in 2.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Use the retry decorator when removing directories in general. It
will be more thorough with properly annotated retries on Windows. For
the dist folder, mention the running program as a probable cause.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Check &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;replacements&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;replacements_plain&lt;/span&gt;&lt;/code&gt; Nuitka
package configuration values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Catch backlashes in paths provided in Nuitka Package
Configuration values for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dest_path&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;relative_path&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dirs&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raw_dirs&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;empty_dirs&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Disable pagination in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gdb&lt;/span&gt;&lt;/code&gt; with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debugger&lt;/span&gt;&lt;/code&gt;
option.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PGO: Warn if the PGO binary does not run successfully.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: The new console mode option is a Windows-specific option now,
move it to that group.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Detect “rye python” on macOS. Added in 2.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Be forgiving about release candidates; Ubuntu shipped one in a
LTS release. Changed in 2.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Allow fine-grained debug control for immortal checks&lt;/p&gt;
&lt;p&gt;Can use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-debug-immortal-assumptions&lt;/span&gt;&lt;/code&gt; to allow for corrupted
immortal objects, which might be done by non-Nuitka code and then
break the debug mode.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Avoid leaking compile time Nuitka environment variables to the
child processes.&lt;/p&gt;
&lt;p&gt;They were primarily visible with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--run&lt;/span&gt;&lt;/code&gt;, but we should avoid it
for everything.&lt;/p&gt;
&lt;p&gt;For non-Windows, we now recognize if we are the exact re-execution
and otherwise, reject them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Delete the existing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;virtualenv&lt;/span&gt;&lt;/code&gt; in case of errors updating
or upgrading it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Keep track of Nuitka compiled program exit code in newly added
result files, too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Redo compilations in case of previous errors when executing
the compile program.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Wasn’t detecting files to ignore for PyLint on Windows
properly, also detect crashes of PyLint.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Tests&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added test to cover the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Make actual use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt; in its standalone test to ensure
correctness on that OS, too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make compile extension module test work on macOS, too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; in our tests since newer Python no longer
contains it by default, we split up tests with mixed contents into
two tests instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11+: Make large constants test executable for as well. We no
longer can easily create those values on the fly and output them due
to security enhancements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.3: Remove support from the test runner as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: Added construct-based tests for coroutines so we can compare
their performance as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Cleanups&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Make try/finally variable releases through common code. It will allow
us to apply special exception value trace handling for only those for
scalability improvements, while also making many re-formulations
simpler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; configuration values &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;replacements&lt;/span&gt;&lt;/code&gt;
where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;replacements_plain&lt;/span&gt;&lt;/code&gt; is good enough. A lot of config pre-date
its addition.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid Python3 and Python3.5+ specific Jinja2 modules on versions
before that, and consequently, avoid warning about the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved code object extraction of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin from Python
module template to C code helper for shared usage and better editing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also call &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;va_end&lt;/span&gt;&lt;/code&gt; for standards compliance when using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;va_start&lt;/span&gt;&lt;/code&gt;. Some C compilers may need that, so we better do it even
if what we have seen so far doesn’t need it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t pass main filename to the tree building anymore, and make
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.Options&lt;/span&gt;&lt;/code&gt; functions usage explicit when importing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change comments that still mentioned Python 3.3 as where a change in
Python happened since we no longer support this version. Now, we
consider what’s first seen in Python 3.4 is a Python3 change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanup, change Python 3.4 checks to 3.0 checks as Python3.3 is no
longer supported. Cleans up version checks, as we now treat &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;gt;=3.4&lt;/span&gt;&lt;/code&gt;
either as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;gt;=3&lt;/span&gt;&lt;/code&gt; or can drop checks entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The usual flow of spelling cleanups, this time for C codes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Summary&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This release cycle was a longer than usual, with much new optimization
and package support requiring attention.&lt;/p&gt;
&lt;p&gt;For optimization we got quite a few things going, esp. with more forward
propagation, but the big ones for scalability are still all queued up
and things are only prepared.&lt;/p&gt;
&lt;p&gt;The 3.13 work was continuing smoothly and seems to be doing fine. We are
still on track for supporting it right after release.&lt;/p&gt;
&lt;p&gt;The parts where we try and address WASI prepare cross-compilation, but
we will not aim at it generally immediately, and target our own Nuitka
standalone backend Python that is supposed to be added in coming
releases.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-24.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2024-07-30T09:09:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-23.html</id>
    <title>Nuitka Release 2.3</title>
    <updated>2024-06-12T00:00:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-2-3"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release bumps the long-awaited 3.12 support to a complete level.
Now, Nuitka behaves identically to CPython 3.12 for the most part.&lt;/p&gt;
&lt;p&gt;In terms of bug fixes, it’s also huge. Especially for Unicode paths and
software with Unicode extension module names and Unicode program names,
and even non-UTF8 code names, there have been massive amounts of
improvements.&lt;/p&gt;
&lt;nav class="contents page-toc local" id="table-of-contents"&gt;
&lt;p class="topic-title"&gt;Table of Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#bug-fixes" id="id1"&gt;Bug Fixes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#new-features" id="id2"&gt;New Features&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#optimization" id="id3"&gt;Optimization&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#organizational" id="id4"&gt;Organizational&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#tests" id="id5"&gt;Tests&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#cleanups" id="id6"&gt;Cleanups&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#summary" id="id7"&gt;Summary&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id1" role="doc-backlink"&gt;Bug Fixes&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python-magic-bin&lt;/span&gt;&lt;/code&gt; package. Fixed in
2.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix: The cache directory creation could fail when multiple
compilations started simultaneously. Fixed in 2.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;arm64&lt;/span&gt;&lt;/code&gt; builds, DLLs can also have an architecture
dependent suffix; check that as well. Makes the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;soundfile&lt;/span&gt;&lt;/code&gt;
dependency scan work. Fixed in 2.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix: Modules where lazy loaders handling adds hard imports when a
module is first processed did not affect the current module,
potentially causing it not to resolve hidden imports. Fixed in 2.2.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libomp&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; needs to cause the
extension module not to be included and not to look elsewhere. Fixed
in 2.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Fix, added support for keyword arguments of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ModuleNotFoundError&lt;/span&gt;&lt;/code&gt;. Fixed in 2.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Detect more versioned DLLs and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;arm64&lt;/span&gt;&lt;/code&gt; specific filenames.
Fixed in 2.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, was not annotating exception exit when converting an import to a
hard submodule import. Fixed in 2.2.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, branches that became empty can still have traces that need to be
merged.&lt;/p&gt;
&lt;p&gt;Otherwise, usages outside the branch will not see propagated
assignment statements. As a result, these falsely became unassigned
instead. Fixed in 2.2.2 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, uninstalled self-compiled Python didn’t have proper
installation prefix added for DLL scan, resulting in runtime DLLs not
picked up from there. Fixed in 2.2.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; version 6.7. It
needed correction on macOS and has a new data file type. Fixed in
2.2.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Complete support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyocd&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.2.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module: Fix, the created &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files were incomplete.&lt;/p&gt;
&lt;p&gt;The list of imported modules created in the finalization step was
incomplete, we now go over the actual done modules and mark all
non-included modules as dependencies.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, need to avoid using Unicode paths towards the linker on
Windows. Instead, use a temporary output filename and rename it to
the actual filename after Scons has completed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid passing Unicode paths to the dependency walker on
Windows, as it cannot handle those. Also, the temporary filenames in
the build folder must be in short paths, as it cannot handle them in
case that is a Unicode path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; on Windows, the log filename must be a short
path too, if the build folder is a Unicode path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Make sure the Scons build executes inside a short path as
well, so that a potential Unicode path is visible to the C compiler
when resolving the current directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The encoding of Unicode paths for accelerated mode values of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; was not making sure that hex sequences were correctly
terminated, so in some cases, it produced ambiguous C literals.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Execute binaries created with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-uac-admin&lt;/span&gt;&lt;/code&gt; with
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--run&lt;/span&gt;&lt;/code&gt; options with proper UAC prompt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to allow for non-UTF8 Unicode in variable names, function
names, class names, and method names.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; statements that captured the rest of
mapping checks were not working yet.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;key1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;}:&lt;/span&gt;
      &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="c1"&gt;# rest was not assigned here&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: When deleting build folders, make sure the retries leading
to a complete deletion always.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, could crash with non-&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; program paths on
Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid giving &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxWarning&lt;/span&gt;&lt;/code&gt; from reading source code&lt;/p&gt;
&lt;p&gt;For example, the standard &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module of Python 3.12 gives
warnings about illegal escape sequences that nobody cares about
apparently.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; warnings by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;options-nanny&lt;/span&gt;&lt;/code&gt; were still
given even if the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-qt&lt;/span&gt;&lt;/code&gt; plugin was used, since the variable name
referenced there was not actually set yet by that plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, when using the uninstalled self-compiled Python, we
need &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python.exe&lt;/span&gt;&lt;/code&gt; to find DLL dependencies. Otherwise it doesn’t
locate the MSVC runtime and Python DLL properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;freetype&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;New Features&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Support for Python 3.12 is finally there. We focused on scalability
first and because we did things the correct way immediately, rather
than rushing to get it working and improving only later.&lt;/p&gt;
&lt;p&gt;As a result, the correctness and performance of &lt;strong&gt;Nuitka&lt;/strong&gt; with
previous Python releases are improved as well.&lt;/p&gt;
&lt;p&gt;Some things got delayed, though. We need to do more work to take
advantage of other core changes. Concerning exceptions normalized at
creation time, the created module code doesn’t yet take advantage.
Also, more efficient two-digit long handling is possible with Python
3.12, but not implemented. It will take more time before we have
these changes completed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Experimental support for Python 3.13 beta 1 is also there, and
potentially surprising, but we will try and follow its release cycle
closely and aim to support it at the time of release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nuitka&lt;/strong&gt; has followed all of its core changes so far, and basic
tests are passing; the accelerated, module, standalone, and onefile
modes all work as expected. The only thing delayed is the uncompiled
generator integration, where we need to replicate the exact CPython
behavior. We need to have perfect integration only for working with
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncio&lt;/span&gt;&lt;/code&gt; loop, so we wait with it until release candidates
appear.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added support to include directories entirely unchanged by
adding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raw_dir&lt;/span&gt;&lt;/code&gt; values for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;data-files&lt;/span&gt;&lt;/code&gt; section, see .&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: The new command line option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-raw-dir&lt;/span&gt;&lt;/code&gt; was added to
allow including directories entirely unchanged.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module: Added support for creating modules with Unicode names. Needs
a different DLL entry function name and to make use of two-phase
initialization for the created extension module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for OpenBSD standalone mode.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Optimization&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3: Avoid API calls for allocators&lt;/p&gt;
&lt;p&gt;Most effective with Python 3.11 or higher but also many other types
like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; keys, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; objects are
faster to create with all Python3 versions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5+: Directly use the &lt;strong&gt;Python&lt;/strong&gt; allocator functions for
object creation, avoiding the DLL API calls. The coverage is complete
with Python3.11 or higher, but many object types like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; benefit even before that version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Faster creation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; objects.&lt;/p&gt;
&lt;p&gt;With Python 3.12, the object is created directly and set as the
current exception without normalization checks.&lt;/p&gt;
&lt;p&gt;We also added a new specialized function to create the exception
object and populate it directly, avoiding the overhead of calling of
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; type.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: When accessing freelists, we were not passing for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tstate&lt;/span&gt;&lt;/code&gt; but locally getting the interpreter object, which can be
slower by a few percent in some configurations. We now use the free
lists more efficient with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8+: Call uncompiled functions via vector calls.&lt;/p&gt;
&lt;p&gt;We avoid an API call that ends up being slower than using the same
function via the vector call directly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4+: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_PyObject_LengthHint&lt;/span&gt;&lt;/code&gt; API calls in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list.extend&lt;/span&gt;&lt;/code&gt; and have our variant that is faster to call.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added specialization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.normpath&lt;/span&gt;&lt;/code&gt;. We might benefit from
compile time analysis of it once we want to detect file accesses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using module constants accessor for global constant values&lt;/p&gt;
&lt;p&gt;For example, with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;()&lt;/span&gt;&lt;/code&gt;, we used the module-level accessor for no
reason, as it is already available as a global value. As a result,
constant blobs shrink, and the compiled code becomes slightly smaller
, too.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; from the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sparse&lt;/span&gt;&lt;/code&gt; module. Added in
2.2.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Organizational&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;UI: Major change in console handling.&lt;/p&gt;
&lt;p&gt;Compiled programs on Windows now have a third mode, besides console
or not. You can now create GUI applications that attach to an
available console and output there.&lt;/p&gt;
&lt;p&gt;The new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--console&lt;/span&gt;&lt;/code&gt; controls this and allows to enforce
console with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;force&lt;/span&gt;&lt;/code&gt; value and disable using it with the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;disable&lt;/span&gt;&lt;/code&gt; value, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;attach&lt;/span&gt;&lt;/code&gt; value activates the new behavior.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Redirection of outputs to a file in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;attach&lt;/span&gt;&lt;/code&gt; mode only works if
it is launched correctly, for example, interactively in a shell,
but some forms of invocation will not work; prominently,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;subprocess.call&lt;/span&gt;&lt;/code&gt; without inheritable outputs will still output
to a terminal.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;On macOS, the distinction doesn’t exist anymore; technically it
wasn’t valid for a while already; you need to use bundles for
non-console applications, though, by default otherwise a console is
forced by macOS itself.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;patchelf&lt;/span&gt;&lt;/code&gt; usage in buggy version &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;0.18.0&lt;/span&gt;&lt;/code&gt; and ask the
user to upgrade or downgrade it, as this specific version is known to
be broken.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Make clear that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--nofollow-import-to&lt;/span&gt;&lt;/code&gt; option accepts
patters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added warning for module mode and usage of the options to force
outputs as they don’t have any effect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Check the success of Scons in creating the expected binary
immediately after running it and not only once we reach
post-processing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Detect empty user package configuration files&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Do not output module &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ast&lt;/span&gt;&lt;/code&gt; when a plugin reports an error for
the module, for example, a forbidden import.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Actions: Update from deprecated action versions to the latest
versions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Tests&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Use &lt;a class="reference internal" href="../../user-documentation/user-manual.html#nuitka-project-options"&gt;&lt;span class="std std-ref"&gt;Nuitka Project Options&lt;/span&gt;&lt;/a&gt; for the
user plugin test rather than passing by environment variables to the
test runner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a new search mode, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skip&lt;/span&gt;&lt;/code&gt;, to complement &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;resume&lt;/span&gt;&lt;/code&gt; which
resumes right after the last test &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;resume&lt;/span&gt;&lt;/code&gt; stopped on. We can use
that while support for a Python version is not complete.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Cleanups&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Solved a TODO about using unified code for setting the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt;, coroutines, generators, and asyncgen used to be
different.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified how the binary result filename is passed to Scons for modules
and executables to use the same &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;result_exe&lt;/span&gt;&lt;/code&gt; key.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Summary&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This release marks a huge step in catching up with compatibility of
Python. After being late with 3.12 support, we will now be early with
3.13 support if all goes well.&lt;/p&gt;
&lt;p&gt;The many Unicode support related changes also enhanced Nuitka to
generate 2 phase loading extension modules, which also will be needed
for sub-interpreter support later on.&lt;/p&gt;
&lt;p&gt;From here on, we need to re-visit compatibility. A few more obscured
3.10 features are missing, the 3.11 compatibility is not yet complete,
and we need to take advantage of the new caching possibilities to
enhance performance for example with attribute lookups to where it can
be with the core changes there.&lt;/p&gt;
&lt;p&gt;For the coming releases until 3.13 is released, we hope to focus on
scalability a lot more and get a much needed big improvement there, and
complete these other tasks on the side.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-23.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2024-06-12T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-22.html</id>
    <title>Nuitka Release 2.2</title>
    <updated>2024-04-12T11:37:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-2-2"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release focused on compatibility and significant optimization
progress for loops, such as list operations within. The main line of
change is to be able to support Python 3.12 in the next release.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pypdfium2&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.1.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cefpython3&lt;/span&gt;&lt;/code&gt; work on Linux. Fixed in 2.1.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ArchLinux: Added platform linker option to be usable with their
current Arch Python package. Fixed in 2.1.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes.CDLL&lt;/span&gt;&lt;/code&gt; optimization used a misspelled argument name for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;use_last_error&lt;/span&gt;&lt;/code&gt;, such that keyword argument calls were statically
optimized into &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TypeError&lt;/span&gt;&lt;/code&gt; at compile-time. Fixed in 2.1.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list.insert&lt;/span&gt;&lt;/code&gt; was not properly annotating exceptions. Raises
by producing the inserted value raised or the index was not annotated
and, therefore, could fail to be caught locally. Fixed in 2.1.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;selenium&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.1.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hydra&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.1.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Updated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dotenv&lt;/span&gt;&lt;/code&gt; workaround for newer version. Fixed in
2.1.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;strong&gt;PySide6&lt;/strong&gt; slots failed to be moved between threads. For that
we need to make function renames visible in the owning class as well.
Fixed in 2.1.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com.server.register&lt;/span&gt;&lt;/code&gt;. Fixed in
2.1.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Handle “string” import errors of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;uvicorn&lt;/span&gt;&lt;/code&gt; gracefully.
Fixed in 2.1.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin needs also needs to expose the
compiled type names as built-ins for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pickle&lt;/span&gt;&lt;/code&gt; module to find
them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gruut&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.1.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt; to also include
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga_winforms&lt;/span&gt;&lt;/code&gt; metadata. Fixed in 2.1.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; package. Fixed in
2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; needs to emit a dependency on the
backend to be included. Otherwise it could be missing at run-time in
some cases. Fixed in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Respect &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;XDG_CACHE_HOME&lt;/span&gt;&lt;/code&gt; variable on non-Windows
platforms. Some users might configure that to not to be &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;~/.cache&lt;/span&gt;&lt;/code&gt;,
respect that. Fixed in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Some cases of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list.insert&lt;/span&gt;&lt;/code&gt; were not properly handling all
index types. Fixed in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, optimized &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list.remove&lt;/span&gt;&lt;/code&gt; failed to handle tuple arguments
properly. Removing tuple values from lists could cause errors. Fixed
in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependencies for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyarrow.datasets&lt;/span&gt;&lt;/code&gt;. Fixed in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask.dataframe&lt;/span&gt;&lt;/code&gt; module. Fixed in
2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added DLLs for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorrt_libs&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.1.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing metadata of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xarray&lt;/span&gt;&lt;/code&gt;
package. Fixed in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt;. Fixed in 2.1.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, older &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt;&lt;/code&gt; could give warning about C code to
work with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt; which caused build errors on older systems.
Fixed in 2.1.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals&lt;/span&gt;&lt;/code&gt; representing nodes could not be cloned, and as a
result, some code re-formulations failed to compile in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;
constructs. Fixed in 2.1.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;names&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.1.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;randomname&lt;/span&gt;&lt;/code&gt; package. Fixed in
2.1.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, the standalone standard library scan was not fully
ignoring git folders, subfolders were still looked at and could cause
issues. Fixed in 2.1.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt;. Fixed in 2.1.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bitsandbytes&lt;/span&gt;&lt;/code&gt;. Fixed in 2.1.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, when locating binaries, do not use directories but only
files.&lt;/p&gt;
&lt;p&gt;A directory on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; that was named &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt;&lt;/code&gt; could be mistaken to
be a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt;&lt;/code&gt; binary causing errors. Fixed in 2.1.6 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, by default, scan only for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.bin&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.exe&lt;/span&gt;&lt;/code&gt;
binaries for Nuitka Package Configuration EXE dependency patterns.
This was the intended value, but it had not taken effect yet. Fixed
in 2.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__.containing_dir&lt;/span&gt;&lt;/code&gt; should be an absolute path.
For it to be usable after a change of directory is done by the
program that is required. Fixed in 2.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for more parts of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;networkx&lt;/span&gt;&lt;/code&gt; package.
Fixed in 2.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix working with UNC paths and re-parse points at compile
time.&lt;/p&gt;
&lt;p&gt;Now Nuitka should work with mapped and even unmapped to drive paths
like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;\\some-hostname\unc-test&lt;/span&gt;&lt;/code&gt; as they are common in some VM
setups.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Make sure the download path is an external use path in scons
as well, otherwise the home directory could be an unusable path for
MinGW64, causing it not to find files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sspilib&lt;/span&gt;&lt;/code&gt; that prevented
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requests-ntlm&lt;/span&gt;&lt;/code&gt; from working on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5+: Add support for using dictionary un-packings in class
declarations. That is a rarely used in actual Python code, but was
found missing by tests recently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11: Fix, code objects &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;co_qualname&lt;/span&gt;&lt;/code&gt; attribute was not
actually the qualified name, but the same as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;co_name&lt;/span&gt;&lt;/code&gt; only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Fix, must not consider the Anaconda &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib&lt;/span&gt;&lt;/code&gt; directory as a
system directory, because then those DLLs that are not included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, cannot trust dynamic hard modules as much otherwise,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;huggingface_hub.utils.tqdm&lt;/span&gt;&lt;/code&gt; ended up being a module and not the
class it’s supposed to be.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, on newer macOS the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libc++&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libz&lt;/span&gt;&lt;/code&gt; DLLs cannot be
found anymore, we need to ignore that actively as our code insists on
full resolution to catch bugs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zaber_motion&lt;/span&gt;&lt;/code&gt; was not really working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added required data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyviz_comms&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added required data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;panel&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added required data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bokeh&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fixup &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; for Anaconda.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to make parent module usages more explicit.&lt;/p&gt;
&lt;p&gt;Otherwise, plugin mechanisms like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-follow&lt;/span&gt;&lt;/code&gt; from a parent module
cannot affect its child modules, as they can end up being followed to
only after them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin in module mode cannot assume the main
module name to be the one from compile time, need to look the actual
one up at runtime.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Python 3.12, this is passing basic
tests, but known to crash a lot at run-time still, you are
recommended to use pre-releases of Nuitka, as official support is not
going to happen before 2.3 release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow.function&lt;/span&gt;&lt;/code&gt; JIT&lt;/p&gt;
&lt;p&gt;With preserved source code of decorated functions and we can provide
it at run-time to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; JIT so it can do its tracing
executions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Nuitka Package Configuration, we now have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;change_class&lt;/span&gt;&lt;/code&gt;
similar to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;change_function&lt;/span&gt;&lt;/code&gt; to replace a full class definition
with something else, this can be used to modify classes to become
stubs or even unusable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the experimental &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;pyqtSlot&lt;/span&gt;&lt;/code&gt; decorator, we also should handle
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;asyncSlot&lt;/span&gt;&lt;/code&gt; the same way. Added in 2.1.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new kind of warning of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plugin&lt;/span&gt;&lt;/code&gt; category and use it in the
Nuitka Package Configuration to inform &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; users to select
a GUI backend via plugin selection. Added in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Zig: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zig&lt;/span&gt;&lt;/code&gt; as CC value. Due to it not supporting
C11 fully yet, we need to use the C++ workaround and cannot compile
for Python 3.11 or higher yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; value, we now have a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__.main&lt;/span&gt;&lt;/code&gt;
that is the name of the compiled module. For modules, &lt;strong&gt;Nuitka&lt;/strong&gt;
determines this at run time; in other modes, it is the name of the
main module.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt; specific API in contains tests, rather than generic
sequence one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lower &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;value&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt; &lt;span class="pre"&gt;something&lt;/span&gt;&lt;/code&gt; tests for known &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;
values to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;frozenset&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt; respectively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recognize exact type shapes of loop variables where possible. This
enables appends to list to be optimized to their dedicated nodes
among other things, with those often being a lot faster than generic
code. This speeds up e.g. list &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;append&lt;/span&gt;&lt;/code&gt; tests by a significant
amount.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Have dedicated helper for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list.remove&lt;/span&gt;&lt;/code&gt;, such that it
is not using a Python DLL call where that is slow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ArchLinux: Enable static libpython by default, it is usable indeed.
Added in 2.1.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;antlr&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;celery&lt;/span&gt;&lt;/code&gt; package. Added in 2.1.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package
for more modules. Added in 2.1.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid testing packages for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; package
as well. Added in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Avoid recompiling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;azure&lt;/span&gt;&lt;/code&gt; package which is not
performance relevant. Added in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid packages owned by Nuitka plugins in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matploblib&lt;/span&gt;&lt;/code&gt; backends
unless the corresponding plugin is actually active. Added in 2.1.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;deepspeed&lt;/span&gt;&lt;/code&gt; package. Added in
2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package. Added
in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; usage causing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cupy&lt;/span&gt;&lt;/code&gt;
usage. Added in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Recognize &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;keras&lt;/span&gt;&lt;/code&gt; testing modules as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt;
bloat.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster code generation due to enhancements in how identifiers are
cached for module names and the indentation codes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Handle &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_docstrings&lt;/span&gt;&lt;/code&gt; issue for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torio&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imgui_bundle&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove testing module usage when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; is used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unitest&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tf_keras&lt;/span&gt;&lt;/code&gt; package as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bokeh&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;UI: Catch conflicts between data files and EXE/DLLs/extension module
filenames. Previously, you could overwrite binaries with data files,
but that is now rejected as an explicit error.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Avoid using the program name without suffix inside the dist
folder, as that avoids collisions with data file directories of the
same name, e.g., if the package and main binary have the same name,
they would clash previously, but adding a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.bin&lt;/span&gt;&lt;/code&gt; suffix to the
binary avoids that entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Don’t force &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{VERSION}&lt;/span&gt;&lt;/code&gt; in specs to be resolved to four digits.&lt;/p&gt;
&lt;p&gt;That made it hard for users, who will be surprised to see &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1.0&lt;/span&gt;&lt;/code&gt;
become &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1.0.0.0&lt;/span&gt;&lt;/code&gt; when that is only needed for Windows version
information really.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Catch wrong values for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--jobs&lt;/span&gt;&lt;/code&gt; value sooner, negative and
non-integer values error exit immediately. Added in 2.1.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Nicer usage name when invoked with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The recommended form of invocation of Nuitka should not have an ugly
invocation reference mentioning &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__.py&lt;/span&gt;&lt;/code&gt; instead put the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; notion there.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Reorder options for the plugins group to be more readable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Remove obsolete plugins from standard plugin documentation.
Removed in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: The Windows release was coming from the compiling &lt;strong&gt;Python&lt;/strong&gt; and
as such wrong, for example, &lt;strong&gt;Windows 11&lt;/strong&gt; always showed up as
&lt;strong&gt;Windows 10&lt;/strong&gt;, and some older versions of &lt;strong&gt;Python&lt;/strong&gt; didn’t know
Windows 10, yet, so this could be confusing in issue analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Do not warn about static libpython for Python debug mode
compilation. It is misleading as often it doesn’t work for that
configuration, and it’s only a distraction since debugging Python
reference counts is not about performance. Changed in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Catch newlines in spec values. They break code C code generation
potentially; they also are likely copy&amp;amp;paste mistakes that won’t do
what the user expects. Added in 2.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Updated to the latest version of black.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt; can corrupt outputs, catch
that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Generate Scons debug script&lt;/p&gt;
&lt;p&gt;It can serve to quickly re-execute a Scons compilation without
re-executing Nuitka again. This is best used where there is no Python
level change but only C changes and no expectation of producing a
usable result.&lt;/p&gt;
&lt;p&gt;Because no post-processing is applied, and as a consequence this is
not usable to produce binaries that work. In the future, we might
expand this to be able to run post-processing still.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Disabling all freelists is now honored for more code,
tuples and empty dictionaries as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Add macOS version to help output, which is sometimes vital for
issue analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Add the OS release to reports as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Exclude parent path imports from compilation reports for
module usages that are found and end up not being excluded.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Reporting more problems, catching more errors, and adding the
ability to create PRs from changes. However, it does not yet do it
automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code: Have plugins C files in the include path as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Tests: Fix, cannot assume &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; to be installed, some RPM
based systems don’t have it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run commercial code signing test only on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow for standalone testing file access to the Azure agent folders.
For tests on Azure, it’s like the home directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure optimization tests are named to make it clear that they are
tests.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Remove useless &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--execute-with-pythonpath&lt;/span&gt;&lt;/code&gt; option, we don’t use
that anymore at all.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The JIT mechanism added for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; should be possible to
generalize and will be applied to other JITs, like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; and others
in the future as well.&lt;/p&gt;
&lt;p&gt;The road to Python 3.12 is not fully complete, but the end feels closer
now, and the subsequent release hopefully will add the official support
for it.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-22.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2024-04-12T11:37:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-21.html</id>
    <title>Nuitka Release 2.1</title>
    <updated>2024-03-23T15:11:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-2-1"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release had focus on new features and new optimization. There is a
also a large amount of compatibility with things newly added to support
anti-bloat better, and workaround problems with newer package versions
that would otherwise need source code at run-time.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Windows: Using older MSVC before 14.3 was not working anymore. Fixed
in 2.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin didn’t work for functions
with closure variables taken. Fixed in 2.0.1 already.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get_local_closure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;_local_multiply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_local_multiply&lt;/span&gt;

&lt;span class="n"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_local_closure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;fn2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dill&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dill&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fn2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, sometimes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;kernel32.dll&lt;/span&gt;&lt;/code&gt; is actually reported as a
dependency, remove assertion against that. Fixed in 2.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: The help output for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--output-filename&lt;/span&gt;&lt;/code&gt; was not formatted
properly. Fixed in 2.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scapy&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.0.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PonyORM&lt;/span&gt;&lt;/code&gt; implicit dependencies. Fixed in 2.0.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cryptoauthlib&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;betterproto&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tracerite&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn.util&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;qt_material&lt;/span&gt;&lt;/code&gt; packages. Fixed
in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing data file for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; package. Fixed in
2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing DLLs for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;speech_recognition&lt;/span&gt;&lt;/code&gt; package.
Fixed in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing DLL for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gmsh&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.0.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Using reporting path in macOS dependency scan error message,
otherwise these contain home directory paths for no good reason.
Fixed in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Fix, could crash when compiling directories with trailing slashes
used. At least on Windows, this happened for the “/” slash value.
Fixed in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module: Fix, convenience option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--run&lt;/span&gt;&lt;/code&gt; was not considering
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--output-dir&lt;/span&gt;&lt;/code&gt; directory to load the result module. Without this,
the check for un-replaced module was always triggering for module
source in current directory, despite doing the right thing and
putting it elsewhere. Fixed in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Avoid values for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; of modules that are unicode
and solve a TODO that restores consistency over modules mode
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; values. Fixed in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, short paths with and without dir name cached wrongly,
which could lead to shorted paths even where not asked for them.
Fixed in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, comparing list values that changed could segfault. This is a bug
fix Python did, that we didn’t follow yet and that became apparent
after using our dedicated list helpers more often. Fixed in 2.0.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tiktoken&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.0.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, namespace packages had wrong runtime &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt;
value. Fixed in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11: Fix, was using tuples from freelist of the wrong size&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;CPython changed the index for the size, to not use zero, which was
wasteful when introduced with 3.10, but to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;size-1&lt;/span&gt;&lt;/code&gt; but we did
not follow that and then used a tuple one bit larger than
necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As a result, code producing a lot short living tuples could end up
creating new ones over and over, causing bad memory allocations
and slow performance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixed in 2.0.2 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, need to allow non-existent and versioned dependencies of
DLLs to themselves. Fixed in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix PGO (Profile Guided Optimization) build errors with
MinGW64, this feature is not yet ready for general use, but these
errors shouldn’t happen. Fixed in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, do not load &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_metadata&lt;/span&gt;&lt;/code&gt; unless really
necessary.&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; plugin used to load it, and that then had
harmful effects for our handling of distribution information in some
configurations. Fixed in 2.0.3 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Avoid warnings from plugin evaluated code, it could happen
that a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UserWarning&lt;/span&gt;&lt;/code&gt; would be displayed during compilation. Fixed
in 2.0.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, loading pickles with compiled functions in module mode was not
working. Fixed in 2.0.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;h2o&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.0.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, variable assignment from variables that started to raise were
not recognized.&lt;/p&gt;
&lt;p&gt;When a variable assignment from a variable became a raise expression,
that wasn’t caught and propagated as it should have been. Fixed in
2.0.3 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NUITKA_PYTHONPATH&lt;/span&gt;&lt;/code&gt; usage more robust. Fixed in 2.0.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, PySide2/6 argument name for slot connection and disconnect
should be &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;slot&lt;/span&gt;&lt;/code&gt;, wasn’t working with keyword argument calls. Fixed
in 2.0.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;paddle&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;paddleocr&lt;/span&gt;&lt;/code&gt; packages.
Fixed in 2.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;diatheke&lt;/span&gt;&lt;/code&gt;. Fixed in 2.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zaber-motion&lt;/span&gt;&lt;/code&gt; package. Fixed in
2.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plyer&lt;/span&gt;&lt;/code&gt; package. Fixed in 2.0.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, added handling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OSError&lt;/span&gt;&lt;/code&gt; for metadata read, otherwise
corrupt packages can have Nuitka crashing. Fixed in 2.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to annotate potential exception exit when making a fixed
import from hard module attribute. Fixed in 2.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, didn’t consider Nuitka project options with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--main&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--script-path&lt;/span&gt;&lt;/code&gt;. This is of course the only way Nuitka-Action does
call it, so they didn’t work there at all. Fixed in 2.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, need to close progress bar when about to error exit.
Otherwise error outputs will be garbled by incomplete progress bar.
Fixed in 2.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to convert relative from imports to hard imports too, or
else packages needed to be followed are not included. Fixed in 2.0.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygame_menu&lt;/span&gt;&lt;/code&gt; data files. Fixed in 2.0.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, wasn’t working when compiling on network mounted drive
letters. Fixed in 2.0.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; parser was crashing on some comments with a leading
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; in the line, recognize these better. Fixed in 2.0.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Actions: Fix, some yaml configs could fail to load plugins. Fixed in
2.0.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; packages that otherwise
require source code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, inline copies of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; etc. left sub-modules behind, removing
only the top level &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.modules&lt;/span&gt;&lt;/code&gt; entry may not be enough.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;constants&lt;/span&gt;&lt;/code&gt; in Nuitka package
configurations. We can now using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; clauses, define variable
values to be defined, e.g. to specify the DLL suffix, or the DLL
path, based on platform dependent properties.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;relative_path&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;suffix&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;prefix&lt;/span&gt;&lt;/code&gt; in DLL Nuitka
package configurations allowed to be an expression rather than just a
constant value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Make not only booleans related to the python version
available, but also strings &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python_version_str&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python_version_full_str&lt;/span&gt;&lt;/code&gt;, to use them when constructing e.g. DLL
paths in Nuitka Package Configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added helper function &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iterate_modules&lt;/span&gt;&lt;/code&gt; for producing the
submodules of a given package, for using in expressions of Nuitka
package configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added support for Tcl/Tk detection on Homebrew Python.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;module&lt;/span&gt;&lt;/code&gt; attribute to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; values&lt;/p&gt;
&lt;p&gt;So far it was impossible to distinguish non-standalone, i.e.
accelerated mode and module compilation by looking at the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; attribute, so we add an indicator for module mode
that closes this gap.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;appdirs&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib&lt;/span&gt;&lt;/code&gt; for use in Nuitka
package config expressions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added ability to specify modules to not follow when a module
is used. This &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nofollow&lt;/span&gt;&lt;/code&gt; configuration is for rare use cases only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added values &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;extension_std_suffix&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;extension_suffix&lt;/span&gt;&lt;/code&gt; for use in expressions, to e.g. construct DLL
suffix patterns from it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added more control over caching with per cache category
environment variables, as &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html#control-where-caches-live"&gt;documented in the User Manual.&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added support for reporting module detections&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;delvewheel&lt;/span&gt;&lt;/code&gt; plugin now puts the version of that packaging tool
used by a particular module in the report rather than tracing it to
the user, that in the normal case won’t care. This is more for
debugging purposes of Nuitka.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Scalability: Do not make loop analysis at all for very trusted value
traces, their point is to not change, and waiting for that to be
confirmed has no point.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use very trusted value traces in functions not just as mere assign
traces or else expected optimization will not be done on them in many
cases. With this a lot more cases of hard values are optimized
leading also to generally more compact and correct results in terms
of imports, metadata, code avoided on the wrong OS, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: When specializing assignments, make sure to have the
proper value trace immediately.&lt;/p&gt;
&lt;p&gt;When changing to a hard value, the value trace was still an assign
trace and not very trusted for one for micro pass of the module.&lt;/p&gt;
&lt;p&gt;This had the effect to need one more micro pass to get to benefiting
of the unescapable nature of those values, which meant more micro
passes than necessary and those being more complex due to escaped
traces, and therefore taking longer for affected modules.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: The code trying avoid merge traces of merge traces, and
to instead flatten merge traces was only handling part of these
correctly, and correcting it reduced optimization time for some
functions from infinite to instant. Less memory usage should also
come out of this, even where this was not affecting compile time as
much. Added in 2.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Some codes that checked for variables were testing for
temporary variable and normal variable both one after another, making
some optimization steps and code generation slower than necessary due
to the extra calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: A variable assignment from variable that were later
recognized to become a raise was not recognized as such, and this
then wasn’t caught and propagated as it should, preventing more
optimization of the affected code. Make sure to convert more directly
when observing things to change, rather than doing it one pass later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The fix proper reuse of tuples released to the freelist with matching
sizes causes less memory usage and faster performance for the 3.11
version. Added in 2.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Statically optimize &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exit&lt;/span&gt;&lt;/code&gt; into exception raise of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SystemExit&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This should make a bunch of dead code obvious to Nuitka, it can now
tell this aborts execution of a branch, potentially eliminating
imports, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Enable python static link library for Homebrew too. Added in
2.0.1 already. Added in 2.0.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid compiling bloated module namespace of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;altair&lt;/span&gt;&lt;/code&gt; package. Added
in 2.0.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;kubernetes&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; unless
used otherwise. Added in 2.0.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid including setuptools for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt;. Added in 2.0.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;fire&lt;/span&gt;&lt;/code&gt; package. Added in 2.0.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Cython&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt; package.
Added in 2.0.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Changes to avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;triton&lt;/span&gt;&lt;/code&gt; in newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; as well.
Added in 2.0.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_scm&lt;/span&gt;&lt;/code&gt; in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyarrow&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Made more packages equivalent to using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;
which we want to avoid, all of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Cython&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cython&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyximport&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;paddle.utils.cpp_extension&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch.utils.cpp_extension&lt;/span&gt;&lt;/code&gt; were
added for better reports of the actual causes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Moved the changelog of Nuitka to the website, just point to there
from Nuitka repo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Proper error message from Nuitka when scons build fails with a
detail mnemonic page. Read more on for detailed information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Reject all MinGW64 that are not are not the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;WinLibs&lt;/span&gt;&lt;/code&gt; that
Nuitka itself downloaded. As these packages break very easily, we
need to control if it’s a working set of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;make&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;binutils&lt;/span&gt;&lt;/code&gt; and gcc with all the necessary workarounds and features
like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;LTO&lt;/span&gt;&lt;/code&gt; working on Windows properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Added auto-format of PNG and JPEG images. This aims at
making it simpler to add images to our repositories, esp. Nuitka
Website. This now makes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;optipng&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jpegoptim&lt;/span&gt;&lt;/code&gt; calls as
necessary. Previously this was manual steps for the website to be
applied.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Be more clear about compiler version needs on Windows
for Python 3.11.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added examples for error message with low C compiler
memory, such that maybe they can be found via search by users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Removed sections that are unnecessary or better
maintained as separate pages on the website.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Avoid empty &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-auto-follow&lt;/span&gt;&lt;/code&gt; values, for silently ignoring
it there is a dedicated string &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ignore&lt;/span&gt;&lt;/code&gt; that must be used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Enforce normalized paths for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dest_path&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;relative_path&lt;/span&gt;&lt;/code&gt;. Users were uncertain if a leading dot made sense,
but we now disallow it for clarity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Check more keys with expressions for syntax errors, to catch
these mistakes in configuration sooner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Scanning through all files with the auto-format tool should
now be faster, and CPython test suite directories (test submodules)
if present are ignored.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Remove month from manpage generation, that’s only noise in
diffs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed digital art folders, these were only making checkouts larger
for no good reason. We will have better ones on the website in the
future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Allow C warnings when compiling for running in debugger
automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: The macOS app bundle option is not experimental at all. This has
been untrue for years now, remove that cautioning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Discontinue support for PyQt6.&lt;/p&gt;
&lt;p&gt;With newer PyQt6 we would have to package frameworks properly, and we
don’t have that yet and it will be a lot of developer time to get it.&lt;/p&gt;
&lt;p&gt;Instead point people to PySide6 which is the better choice and is
perfectly supported by Qt company and Nuitka.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed version numbering, month of creation, etc. from the man pages
generated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Credits.rst&lt;/span&gt;&lt;/code&gt; file to be on the website and maintain it there
rather than syncing of from the Nuitka repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bumped copyright year and split the license text such that it is now
at the bottom of the files rather than eating up the first page, this
is aimed at making the code more readable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;With &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exit&lt;/span&gt;&lt;/code&gt; being optimized, we were able to make our trick to
avoid following &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; because of accidentally finding the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setup&lt;/span&gt;&lt;/code&gt; as an import more simple.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Don&amp;#39;t allow importing this, and make recognizable that&lt;/span&gt;
&lt;span class="c1"&gt;# the above imports are not to follow. Sometimes code imports&lt;/span&gt;
&lt;span class="c1"&gt;# setup and then Nuitka ends up including itself.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Cannot import &amp;#39;setup&amp;#39; module of Nuitka&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Don’t scan for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; on Windows, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;WinLibs&lt;/span&gt;&lt;/code&gt; package
contains it nowadays, and since it’s now required to be used, there
is no point for this code anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minor cleanups coming from trying out &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ruff&lt;/span&gt;&lt;/code&gt; as a linter on Nuitka,
it found a few uses of not using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt;, but that was it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Removed test with chinese filenames, we need to avoid chinese names
in the repo. These have been seen as preventing installation on some
systems that are not capable of handling them in the git, zip, pip
tooling, so lets avoid them entirely now that Nuitka handles these
just fine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: More macOS standalone tests that need to be bundles were
getting the project configuration to do it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release added much needed tools for our Nuitka Package
configuration, but also cleans up scalability and optimization that was
supposed to work, but did not yet, or not anymore.&lt;/p&gt;
&lt;p&gt;The usability improved again, as it does always, but the big
improvements for scalability that will implement existing algorithms
more efficient, are yet to come, this release was mainly driven by the
need to get &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; to work in its latest version out of the box with
stable Nuitka, but this couldn’t be done as a hotfix&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-21.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2024-03-23T15:11:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-20.html</id>
    <title>Nuitka Release 2.0</title>
    <updated>2024-02-05T00:00:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-2-0"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release had focus on new features and new optimization. There is a
really large amount of compatibility with things newly added, but also
massive amounts of new features, and esp. for macOS and Windows, lot of
platform specified new abilities and corrections.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, workaround for private functions as Qt slots not having names
mangled. Fixed in 1.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, when using Nuitka with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pdm&lt;/span&gt;&lt;/code&gt; it was not detected as using pip
packages. Fixed in 1.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt; our lazy loader parser didn’t handle all cases
properly yet. Fixed in 1.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyocd&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.9.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added DLL for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cmsis_pack_manager&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, the specs expanded at run time in some causes could
contain random characters. Fixed in 1.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{&amp;quot;a&amp;quot;:b,&lt;/span&gt; &lt;span class="pre"&gt;...}.get(&amp;quot;b&amp;quot;)&lt;/span&gt;&lt;/code&gt; could crash at runtime. Fixed in 1.9.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproj&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.9.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added more metadata requirements for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt;
package. Fixed in 1.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, could crash when including packages from the command
line, if they had yaml configuration that requires checking the using
module, e.g. anti-bloat work. Fixed in 1.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;delphifmx&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.9.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android: Fix, cannot exclude &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libz&lt;/span&gt;&lt;/code&gt; on that platform, it’s not a
full Linux OS. Fixed in 1.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add needed DLLs for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bitsandbytes&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib&lt;/span&gt;&lt;/code&gt; was not working anymore. Fixed in
1.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, could crash when working with junctions that switch
drives. Fixed in 1.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, was crashing with poetry installed environments. Fixed in 1.9.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;chromadb&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, could crash in report creation on modules excluded that were
asked via command line for inclusion. Fixed in 1.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Fix for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;streamlit&lt;/span&gt;&lt;/code&gt;, it was causing
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; for the compilation. Fixed in 1.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Arch: Added support for their OS release file location too. Fixed in
1.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, MinGW64 doesn’t accept chinese module names a C source
files. Use short paths for these instead. Fixed in 1.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing DLL for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libusb_package&lt;/span&gt;&lt;/code&gt; package. Fixed
in 1.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, properly skip directories with non-module top level names when
trying to find top level packages of distributions. Fixed in 1.9.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, avoid memory leak bug in triggered by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rich&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11+: Fix, didn’t detect non-keywords on star dict calls in
some cases. Fixed in 1.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, avoid crashes due to unrecognized installers on macOS and
Windows, some packages that are built via legacy fallbacks of certain
pip versions do not leave any indication of their origin at all.
Fixed in 1.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, need to indicate that the program is long path aware or
else it cannot work with the paths. Fixed in 1.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;extern&lt;/span&gt;&lt;/code&gt; namespace might not exist in the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; module, make the code work with versions that
remove it and use the proper external package names then. Fixed in
1.9.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, need to also have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.exists&lt;/span&gt;&lt;/code&gt; method in our files
reader objects. Fixed in 1.9.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, PyQt5 standalone can fail due to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libqpdf&lt;/span&gt;&lt;/code&gt; too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin support module mode too,
previously this only worked for executables only. Fixed in 1.9.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data file for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;curl_cffi&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.9.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix warnings given by MinGW64 in debug mode for onefile
compilation. Fixed in 1.9.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: The handling of DLL permission changes was not robust
against using unicode filenames. Fixed in 1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, could crash on Debian packages when detecting their
installer. Fixed in 1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added required data file for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;astor&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Fix, in case of build crashes during optimization, the bug
report creation could be crashing because the module is not in the
list of done modules yet. Fixed in 1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest.mock&lt;/span&gt;&lt;/code&gt; was not yet available, code
attempting to use it was crashing the compilation. Fixed in 1.9.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accelerated: Fix, tensorflow configuration removing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; usage
needs to apply only to standalone mode. Fixed in 1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;get_dist_name&lt;/span&gt;&lt;/code&gt; Nuitka Package Configuration
function could crash in some rare configurations. Fixed in 1.9.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added necessary data file for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygame&lt;/span&gt;&lt;/code&gt; package. Added
in 1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, was not properly handling standard library
overloading module names for decisions. Inclusion and compilation
mode were made as if the module was part of the standard library,
rather than user code. This is now properly checking if it’s also an
actual standard library module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, crashing on missing absence message with no UPX binary
was found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, couldn’t load extension modules from UNC paths, so
standalone distributions failed to launch from network drives. This
now works again and was a regression from adding support for symlinks
on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for non-legacy &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pillow&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imageio&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added required &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;easyOCR&lt;/span&gt;&lt;/code&gt; data file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka-Python: Fix, do not demote to non-LTO for “too many” modules
there in the default auto mode, it doesn’t work without it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; could fail. Apparently it tries to
lookup Nuitka during installation, which then could fail, due to
hacks we due to make sure wheels are platform dependent. That hack is
of course not really needed for install, since no collision is going
to happen there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, the standard &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; plugin that uses native UI
was not included yet, and it was also not working due to bindings
requiring uncompiled functions, which is now worked around.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Add back PySide6 workaround for overloading names like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;update&lt;/span&gt;&lt;/code&gt; with slots.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;geopandas&lt;/span&gt;&lt;/code&gt; data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, code objects must be made from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; exactly,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; however was used in some configurations after recent
improvements to the run time path handling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;boto&lt;/span&gt;&lt;/code&gt;, the predecessor of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;boto3&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing DLL for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; factorization
module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, PySide2 and PySide6 signal disconnection without
arguments were not working yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, need to Avoid picking up &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang&lt;/span&gt;&lt;/code&gt; from PATH on Windows
with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--clang&lt;/span&gt;&lt;/code&gt; provided, as only our WinLibs version is really
working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, version of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; when included (which we try to avoid
very much) was &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; which breaks some users of it, now it’s the
correct version so checks of e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_scm&lt;/span&gt;&lt;/code&gt; can succeed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, icon options for platforms were conflated, so what should be
windows only icon could get used on other platforms as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, could not create compiled methods from compiled methods. Also
now errors out for invalid types given properly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added support for module decisions, these are &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;parameters&lt;/span&gt;&lt;/code&gt;
provided by the user which can be used to influence the Nuitka per
package configuration with a new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;get_parameter&lt;/span&gt;&lt;/code&gt; function. We are
using these to control important choices in the user, sometimes
warning it to make that decision, if the default can be considered
problematic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;variables&lt;/span&gt;&lt;/code&gt; in Nuitka package
configurations. We can now query at compile time, values from
installed packages and use them, e.g. to know what backend is to be
used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added module decision to disable Torch JIT. This is
generally the right idea, but the decision is still asked for since
some packages and programs want to do Torch Tracing, and that is then
disabled as well. This makes a bunch of transformers programs work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added module decision to disable Numba JIT. This makes
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; work in some cases, but not all. Some packages go very deep
with JIT integration, but simpler uses will now compile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-onefile-external-data&lt;/span&gt;&lt;/code&gt; allows you to specify
file patterns that you included by other data files others, but to
put those files not inside, but on the outside of the onefile binary.
This makes it easier to create deployments fully within Nuitka
project configuration, and to change your mind back and forth without
adding/removing the data file option.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added new value &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;auto&lt;/span&gt;&lt;/code&gt; for detecting signing identity, if
only one is available in the system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--copyright&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--trademark&lt;/span&gt;&lt;/code&gt;
information to be in app bundles as well, this was previously Windows
only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for using junctions in the Python environment,
these are used e.g. when installing via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scoop&lt;/span&gt;&lt;/code&gt;. Added in 1.9.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--cf-protection&lt;/span&gt;&lt;/code&gt; to select the control flow
protection mode for the GCC compiler and deviate from default values
of some environments to less strict values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added output filename to report, mainly intended for
automatically locating the compilation result independent of options
used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Now provides a checksum for yaml files, but not yet verifies
them at runtime, to ask the user to run the checker tool to update it
when they make modifications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Detect when we create too large compiled executables. There
is a limit of 2GB that you might e.g. violate by attempting to embed
very large files. This doesn’t cover onefile yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: The tool can now create PRs with the changes in Nuitka-Watch
for merging, this is for using it in the CI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Scanning for Python versions now requires &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pipenv&lt;/span&gt;&lt;/code&gt; to be
installed in them to be found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Added ability to create branch and PR from watch run results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;overridden-environment-variables&lt;/span&gt;&lt;/code&gt; feature to
package configuration. These are environment variable changes that
only last during the import of that module and are undone later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;force-environment-variables&lt;/span&gt;&lt;/code&gt; feature to package
configuration. These are environment variable changes done on module
import that are not undone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka-Action: Nuitka options that can be given multiple times,
cannot be specified multiple times in your workflow. As a workaround,
Nuitka now allows in Actions, to use new lines as separator. This is
best done with this kind of quoting a multiline string.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;include-data-dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;|&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;a=b&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;c=d&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Nuitka Package Configuration &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-auto-follow&lt;/span&gt;&lt;/code&gt; now applies
recursively, i.e. that a top level package can have it, and not every
sub-package that uses a package but should not be automatically
followed, does have to say this. With this e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;networkx&lt;/span&gt;&lt;/code&gt;
configuration became simpler, and yet covered automatically older
versions as well, and future changes too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for compiling in case sensitive folders. When
this option is enabled, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.normcase&lt;/span&gt;&lt;/code&gt; can make filenames
not found, so with a few cleanups, for lazy code that wasn’t really
using the APIs designed for comparisons and filename suffix testing,
this works now better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; value has a new attribute &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;containing_dir&lt;/span&gt;&lt;/code&gt;
that allows to find where a module, accelerate executable, a
standalone dist folder, a macOS app bundle, or the onefile binary
lives in a consistent fashion. This allows esp. better use than
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.argv[0]&lt;/span&gt;&lt;/code&gt; which points deep into the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.app&lt;/span&gt;&lt;/code&gt; bundle, and can
be used cross platform.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Scalability: Avoid variables that are not shared to be treated as if
they were, marking their type shape as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tshape_unknown&lt;/span&gt;&lt;/code&gt; in the
first micro pass. These micro passes are not visible, but basically
constitute a full visit of the module tree over and over, until no
more optimization is changing it. This can lead to quicker
resolution, as that unknown type shape effectively disallowed all
optimization for variables and reduce the number of necessary micro
passes by one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escaped variables did provide a type shape &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tshape_unknown&lt;/span&gt;&lt;/code&gt; and
while a lot of optimization looks for value knowledge, and gets by
the escaped nature of the value, sometimes, this was seriously
inhibiting some of the type based optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Loop type shape analysis now succeeds in detecting the types for this
code example, which is sort of a break-through for future performance
enhancements in generated code.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Initial the value of &amp;quot;i&amp;quot; is &amp;quot;NUITKA_NINT_UNASSIGNED&amp;quot; in its&lt;/span&gt;
&lt;span class="c1"&gt;# indicator part. The C compiler will remove that assignment&lt;/span&gt;
&lt;span class="c1"&gt;# as it&amp;#39;s only checked in the assignment coming up.&lt;/span&gt;
&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="c1"&gt;# Assignment from a constant, produces a value where both the C&lt;/span&gt;
&lt;span class="c1"&gt;# and the object value are value. This is indicated by a value&lt;/span&gt;
&lt;span class="c1"&gt;# of &amp;quot;NUITKA_NINT_BOTH_VALID&amp;quot;. The code generation will assign&lt;/span&gt;
&lt;span class="c1"&gt;# both the object member from a prepared value, and the clong&lt;/span&gt;
&lt;span class="c1"&gt;# member to 0.&lt;/span&gt;

&lt;span class="c1"&gt;# For the conditional check, &amp;quot;NUITKA_NINT_CLONG_VALID&amp;quot; will&lt;/span&gt;
&lt;span class="c1"&gt;# always be set, and therefore function will resort to comparing&lt;/span&gt;
&lt;span class="c1"&gt;# that clong member against 9 simply, that will always be very&lt;/span&gt;
&lt;span class="c1"&gt;# fast. Depending on how well the C compiler can tell if an overflow&lt;/span&gt;
&lt;span class="c1"&gt;# can even occur, such that an object might get created, it can even&lt;/span&gt;
&lt;span class="c1"&gt;# optimize that statically. In this case it probably could, but we&lt;/span&gt;
&lt;span class="c1"&gt;# do not rely on that to be fast.&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# RICH_COMPARE_LT_CBOOL_NINT_CLONG&lt;/span&gt;
   &lt;span class="c1"&gt;# Here, we might change the type of the object. In Python2,&lt;/span&gt;
   &lt;span class="c1"&gt;# this can change from ``int`` to ``long``, and our type&lt;/span&gt;
   &lt;span class="c1"&gt;# analysis tells us that. We can consider another thing,&lt;/span&gt;
   &lt;span class="c1"&gt;# not &amp;quot;NINT&amp;quot;, but &amp;quot;NINTLONG&amp;quot; or so, to special case that&lt;/span&gt;
   &lt;span class="c1"&gt;# code. We ignore Python2 here, but multiple possible types&lt;/span&gt;
   &lt;span class="c1"&gt;# will be an issue, e.g. list or tuple, float or complex.&lt;/span&gt;
   &lt;span class="c1"&gt;# So this calls a function, that returns a value of type&lt;/span&gt;
   &lt;span class="c1"&gt;# &amp;quot;NINT&amp;quot; (actually it will become an in-place operation&lt;/span&gt;
   &lt;span class="c1"&gt;# but lets ignore that too).&lt;/span&gt;
   &lt;span class="c1"&gt;# That function is &amp;quot;BINARY_OPERATION_ADD_NINT_NINT_CLONG&amp;quot;(i, 1)&lt;/span&gt;
   &lt;span class="c1"&gt;# and it is going to check if the CLONG is valid, add the one,&lt;/span&gt;
   &lt;span class="c1"&gt;# and set to result to a new int. It will reset the&lt;/span&gt;
   &lt;span class="c1"&gt;# &amp;quot;NUITKA_NINT_OBJECT_VALID&amp;quot; flag, since the object will not be&lt;/span&gt;
   &lt;span class="c1"&gt;# bothered to create.&lt;/span&gt;
   &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="c1"&gt;# Since &amp;quot;NUITKA_INT_OBJECT_VALID&amp;quot; not given, need to create the&lt;/span&gt;
&lt;span class="c1"&gt;# PyObject and return it.&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11+: Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tomllib&lt;/span&gt;&lt;/code&gt; from standard library for our distutils
integration into pyproject based builds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid late specialization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; returns in generators and do
it during tree building already, to remove noise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added successful detection of static libpython for self compiled
Python Linux and macOS. This makes it work with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyenv&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyx&lt;/span&gt;&lt;/code&gt; files when scanning for data
files, these are code files too, in this case source files that are
definitely unused most of the time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Make static libpython default with CPython for more compact
standalone distribution and faster binaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove non-existent entries from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt;, avoiding many file
system lookups during import scans.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;triton&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; package in more
cases. Added in 1.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;knetworkx&lt;/span&gt;&lt;/code&gt; package in more
cases. Added in 1.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distributed&lt;/span&gt;&lt;/code&gt; package. Added
in 1.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt;. Added in 1.9.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;triton&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bitsandbytes&lt;/span&gt;&lt;/code&gt; package.
Added in 1.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tf_keras&lt;/span&gt;&lt;/code&gt; package as well. Added
in 1.9.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mock.mock&lt;/span&gt;&lt;/code&gt; module. Added in
1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid importing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_scm&lt;/span&gt;&lt;/code&gt; during compilation when using the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; inline copy, this also avoids a warning on Ubuntu. Added in
1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doctest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt; in their &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tifffile&lt;/span&gt;&lt;/code&gt;
inline copy as well. Added in 1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;h5py.tests&lt;/span&gt;&lt;/code&gt; with older &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;h5py&lt;/span&gt;&lt;/code&gt; as well. Added
in 1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distributed.utils_test&lt;/span&gt;&lt;/code&gt; is also considered using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pip&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module for older &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; versions
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid more &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; usages in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt;
packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nose&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nose&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;networkx&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nose&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywt&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;UI: Change template paths over from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%VAR%&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{VAR}&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The old spec values are migrated transparently and continue to work,
but get a warning when used.&lt;/p&gt;
&lt;p&gt;The new code detects unknown variable names and more formatting
issues than before.&lt;/p&gt;
&lt;p&gt;Using only the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{PID}&lt;/span&gt;&lt;/code&gt; value for process ID, is now making it
temporary value for onefile, that was previously a bug.&lt;/p&gt;
&lt;p&gt;The main benefit and reason of doing this, is that Windows
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CMD.EXE&lt;/span&gt;&lt;/code&gt; does expand those values before Nuitka sees them as even
with quoting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%TEMP%&lt;/span&gt;&lt;/code&gt; is the current one on the building machine, a
recipe for disaster. As some people still use that, and e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.system&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;subprocess&lt;/span&gt;&lt;/code&gt; with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shell=True&lt;/span&gt;&lt;/code&gt; will use it too,
this is just not sustainable for a good user experience.&lt;/p&gt;
&lt;p&gt;As a result, compile time and run time variables now clash, there is
e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{VERSION}&lt;/span&gt;&lt;/code&gt; (program version information given) and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{Version}&lt;/span&gt;&lt;/code&gt; (Nuitka version), and we should clean that up too.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Project: Added Code of Conduct. Adapted from the one used in the
Linux kernel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Warnings given by Nuitka used to be in red color, changed those
to be yellow for consistency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added pointer for Nuitka-Action &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka-Action"&gt;Nuitka-Action&lt;/a&gt; for users interested in
using Nuitka in GitHub workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.gitignore&lt;/span&gt;&lt;/code&gt; to build folder that just causes these folders
to be ignored by git.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added information on how to debug fork bombs from
created binaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: The output of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--experimental=--report-refcounts&lt;/span&gt;&lt;/code&gt; that
we use to show leaks of compiled time objects at program exit, now
counts and reports on functions, generator objects and compiled cells
as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Warnings from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yamllint&lt;/span&gt;&lt;/code&gt; not disabled are errors. These
were only output, but didn’t cause the autoformat to error exit yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Enhanced formatting of info traces, drop the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;:INFO&lt;/span&gt;&lt;/code&gt; part that
shouts, and reserve that for errors and warnings. Also format info
messages to make sure they fit into the line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Changed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-source-changes&lt;/span&gt;&lt;/code&gt; to accept module pattern to
make it easier to only see the ones currently being worked on. To get
the old behavior of showing everything, use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; as a pattern.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Allow using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;~&lt;/span&gt;&lt;/code&gt; in data files source path for command line
options and expand it properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Enhanced schema for our package configuration yaml files to
detect suffixes with leading dots, that is not wanted. These now fail
checks, but we also tolerate them now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Check module names used in the package configuration yaml
files for validity, this catches e.g. trailing dots.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Make sure to really prefer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format&lt;/span&gt;&lt;/code&gt; from Visual Code
and MSVC for formatting C code, otherwise a system installed one
could be used that gives slightly different outputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Allow disabling to enforce no warnings for C compilation&lt;/p&gt;
&lt;p&gt;Currently only for gcc, where we need it until loop tracing is
better, we can now use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--experimental=allow-c-warnings&lt;/span&gt;&lt;/code&gt; options to
make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; work for some known currently unavoidable warnings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-create-app-bundle&lt;/span&gt;&lt;/code&gt; imply standalone mode, it’s
not working or useful for accelerated mode anyway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for using self-compiled Python versions
that are not installed on Linux and macOS. This avoids having to do
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;make&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; and can ease debugging with changes made in Python
core itself. Added in 1.9.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Added ability to simple re-date hotfixes. Previously the
version bump commit needed to be dropped, now a fixup commit is easy
to generate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Man pages are no longer built during package builds, but are
available statically in the git, which should make it easier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Disable verbose output in package installation of Nuitka, it
never was any use, and just makes things hard to read.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Check user yaml file present immediately. Otherwise it was
crashing when parsing yaml files first time with less comprehensible
exceptions. Added in 1.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Updated to latest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rstfmt&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt;
versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Remove references to PDF documentation that no longer exists.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Do not crash when collecting modified files due to deleted
files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Detect the Alpine flavor of Python as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Detect &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;manylinux&lt;/span&gt;&lt;/code&gt; Pythons as a Python flavors as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Detect self compiled uninstalled Python as a dedicated flavor.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;For the Nuitka-Action part of the available options is now generated
from Nuitka option definitions itself, adding some previously missing
options as a result. As a result, adding
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-onefile-external-data&lt;/span&gt;&lt;/code&gt; was automatic this time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The warnings for onefile only options without onefile mode provided
have been moved to common code, and in some cases were having wrong
texts corrected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use enum definitions in the Nuitka Package Configuration schema
rather than manual &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;oneOf&lt;/span&gt;&lt;/code&gt; types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The User Manual was proof read and had a bunch of wordings improved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanup, avoid “unused but set variable” warning from the C compiler
for hard some forms of hard imports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prefer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.getenv&lt;/span&gt;&lt;/code&gt; over &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.environ.get&lt;/span&gt;&lt;/code&gt; for readability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed parts of the C codes that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format&lt;/span&gt;&lt;/code&gt; had a hard time
with to something more normal.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;When locating the standalone binary created, use a compilation report
and resolve the path specified there. This allows macOS app bundles
to be used in these tests as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made the PyQt tests executable on macOS too adding necessary options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added reference test case for unpacking into a list, this was not
covered but under suspect of reference leaking which turns out to be
wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Much enhanced usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;virtualenv&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; test
cases. We make more sure to delete them even in case of issues. We
disable warnings during Nuitka package installation. The code to
execute a case was factored out and became more clear. We now handle
errors in execution with stating what case actually failed, this was
a bit hard to tell previously. Also do not install Nuitka when a
pyproject case is used, since the build tool installs Nuitka itself.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release deserves the 2.0 marker, as it is ground breaking in many
ways. The loop type analysis stands out on the optimization front. This
will open an avenue for much optimized code at least for some benchmark
examples this summer.&lt;/p&gt;
&lt;p&gt;The new features for package configuration, demonstrate abilities to
avoid plugins for Nuitka, where those previously would have been used.
The new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;variables&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;parameters&lt;/span&gt;&lt;/code&gt; made it unnecessary to have
them, and still add compile time variable use and user decisions and
information, without them.&lt;/p&gt;
&lt;p&gt;The scope of supported Python configurations got expanded a bit, and the
the usual slew of anti-bloat work and new packages supported, makes
Nuitka an ever more round package.&lt;/p&gt;
&lt;p&gt;The improved user dialog with less noisy messages and slightly better
coloring, continues a trend, where Nuitka becomes more and more easy to
use.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-20.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2024-02-05T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-15.html</id>
    <title>Nuitka this week #15</title>
    <updated>2024-01-30T00:00:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-15"&gt;

&lt;p&gt;This is a weekly update, or at least it’s supposed to be of what’s going
on in Nuitka land, for you to learn about ongoing developments and
important changes to the project.&lt;/p&gt;
&lt;p&gt;In this issue, I am first going to cover a bit of backlog from news
update missed in the past, but also covering very exciting changes from
this week.&lt;/p&gt;
&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-15" id="id2"&gt;Nuitka this week #15&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-action" id="id3"&gt;Nuitka Action&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#community" id="id4"&gt;Community&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#optimization-work" id="id5"&gt;Optimization Work&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-2-0" id="id6"&gt;Nuitka 2.0&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#technical-writer" id="id7"&gt;Technical Writer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-website-as-a-devcontainer" id="id8"&gt;Nuitka Website as a DevContainer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-website-refinements" id="id9"&gt;Nuitka Website Refinements&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-package-configuration" id="id10"&gt;Nuitka Package Configuration&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#teasers" id="id11"&gt;Teasers&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter-and-mastodon" id="id12"&gt;Twitter and Mastodon&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id13"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="nuitka-action"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Nuitka Action&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A GitHub Action is a component used in GitHub workflows. These are yaml
driven configurations that can cause GitHub to do automatic building of
your software.&lt;/p&gt;
&lt;p&gt;Many of the more professional users build their binaries as part of
GitHub workflows, and Nuitka and Nuitka commercial are both used in that
way a lot. Many times people do it on their own, i.e. install Nuitka by
hand, and call it by hand, which is kind of not the preferred way for
many people.&lt;/p&gt;
&lt;p&gt;Enter the great &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka-Action"&gt;Nuitka Action&lt;/a&gt; which was originally
created by &lt;a class="reference external" href="https://github.com/jimkring"&gt;Jim Kring&lt;/a&gt;, who handed over
the maintenance of it to the Nuitka organization that has further
refined it. This was a great contribution that makes it everything
easier for Nuitka users on GitHub if they want to use it.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Build Executable&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Nuitka/Nuitka-Action@main&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;nuitka-version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;main&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;script-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;kasa_cli&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;onefile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;true&lt;/span&gt;

&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Upload Artifacts&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;actions/upload-artifact@v3&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;${{ runner.os }} Build&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;|&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;build/*.exe&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;build/*.bin&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;build/*.app/**/*&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Options of Nuitka are exposed as yaml attributes. The documentation of
this mapping could be very much enhanced, but basically it’s just
dropping the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--&lt;/span&gt;&lt;/code&gt; part from e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile&lt;/span&gt;&lt;/code&gt; and for toggles, you
say &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;true&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now one interesting limitation of GitHub Action, I have come across this
week and that is that it’s not easily possible to specify an option
twice. For some values in Nuitka, that however is necessary. Where
module names are acceptable, a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;,&lt;/span&gt;&lt;/code&gt; separation os supported, but with
file paths, we don’t do that, e.g. not with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-data-dir&lt;/span&gt;&lt;/code&gt; (note
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data&lt;/span&gt;&lt;/code&gt; is much better to use) but that is the one it
came up for.&lt;/p&gt;
&lt;p&gt;But now we support splitting by new-line from GitHub actions for
everything that produces a list value as a Nuitka option. See below for
a very nice example of how the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;|&lt;/span&gt;&lt;/code&gt; in Yaml makes that even easy to
read.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Build Executable&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Nuitka/Nuitka-Action@main&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;nuitka-version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;main&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;script-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;kasa_cli&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;onefile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;true&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;include-data-dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;|&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;source_path_dir1=dest_path_dir1&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;source_path_dir2=dest_path_dir2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;source_path_dir3=dest_path_dir3&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;This works with Nuitka 2.0 or higher.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The Nuitka-Action is permanently refined. Just today we updated its
caching action to latest, and there is an ongoing activity to improve
options. We started to generate options from Nuitka help output
directly, so that it is easier to add support for new Options in Nuitka,
and to generally make them more consistent.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="community"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Community&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On the Discord server, you can get in touch with an ever more vibrant
community of Nuitka users. You are welcome to join us on the &lt;a class="reference external" href="https://discord.gg/nZ9hr9tUck"&gt;Discord
server for Nuitka community&lt;/a&gt; where you
can hang out with the developers and ask questions. It’s not intended as
an interactive manual. You are supposed to read the docs for yourself
first. And issues are best reported to GitHub.&lt;/p&gt;
&lt;p&gt;I am also now occasionally on the Python Discord server. Mostly when I
get summoned to answer questions that my community thinks make sense,
and have been awarded the community role there, which is pretty nice. I
seem to make new connections there.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="optimization-work"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Optimization Work&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For me this is extremely exciting, this has been on my nerves for a long
time, and I didn’t have the time to figure it out. Now for the
scalability work, I wanted to make sure the algorithm used for loop type
analysis is actually going to be sustainable, before I optimize the
implementation to scale better.&lt;/p&gt;
&lt;p&gt;And low and behold, one of my oldest code examples, the one I mean to
demonstrate C type performance from Python code with, has failed to get
proper results for a long time now. But this changed this week and it’s
part of the 2.0 release, making it my mind worth the bump itself.
Checkout this annotated code.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Initially the value of undefined &amp;quot;i&amp;quot; is &amp;quot;NUITKA_NINT_UNASSIGNED&amp;quot;&lt;/span&gt;
&lt;span class="c1"&gt;# in its indicator part. The C compiler will remove that assignment&lt;/span&gt;
&lt;span class="c1"&gt;# as it&amp;#39;s only checked in the assignment coming up.&lt;/span&gt;

&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="c1"&gt;# Assignment from a constant, produces a value where both the C&lt;/span&gt;
&lt;span class="c1"&gt;# and the object value are value. This is indicated by a value&lt;/span&gt;
&lt;span class="c1"&gt;# of &amp;quot;NUITKA_NINT_BOTH_VALID&amp;quot;. The code generation will assign&lt;/span&gt;
&lt;span class="c1"&gt;# both the object member from a prepared value, and the clong&lt;/span&gt;
&lt;span class="c1"&gt;# member to 0.&lt;/span&gt;

&lt;span class="c1"&gt;# For the conditional check, &amp;quot;NUITKA_NINT_CLONG_VALID&amp;quot; will&lt;/span&gt;
&lt;span class="c1"&gt;# always be set, and therefore function will resort to comparing&lt;/span&gt;
&lt;span class="c1"&gt;# that clong member against 9 simply, that will always be very&lt;/span&gt;
&lt;span class="c1"&gt;# fast. Depending on how well the C compiler can tell if an overflow&lt;/span&gt;
&lt;span class="c1"&gt;# can even occur, such that an object might get created, it can even&lt;/span&gt;
&lt;span class="c1"&gt;# optimize that statically. In this case it probably could, but we&lt;/span&gt;
&lt;span class="c1"&gt;# do not rely on that to be fast.&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# RICH_COMPARE_LT_CBOOL_NINT_CLONG&lt;/span&gt;
    &lt;span class="c1"&gt;# Here, we might change the type of the object. In Python2,&lt;/span&gt;
    &lt;span class="c1"&gt;# this can change from ``int`` to ``long``, and our type&lt;/span&gt;
    &lt;span class="c1"&gt;# analysis tells us that. We can consider another thing,&lt;/span&gt;
    &lt;span class="c1"&gt;# not &amp;quot;NINT&amp;quot;, but &amp;quot;NINTLONG&amp;quot; or so, to special case that&lt;/span&gt;
    &lt;span class="c1"&gt;# code. We ignore Python2 here, but multiple possible types&lt;/span&gt;
    &lt;span class="c1"&gt;# will be an issue, e.g. list or tuple, float or complex.&lt;/span&gt;
    &lt;span class="c1"&gt;# So this calls a function, that returns a value of type&lt;/span&gt;
    &lt;span class="c1"&gt;# &amp;quot;NINT&amp;quot; (actually it will become an in-place operation&lt;/span&gt;
    &lt;span class="c1"&gt;# but lets ignore that too).&lt;/span&gt;
    &lt;span class="c1"&gt;# That function is &amp;quot;BINARY_OPERATION_ADD_NINT_NINT_CLONG&amp;quot;(i, 1)&lt;/span&gt;
    &lt;span class="c1"&gt;# and it is going to check if the CLONG is valid, add the one,&lt;/span&gt;
    &lt;span class="c1"&gt;# and set to result to a new int. It will reset the&lt;/span&gt;
    &lt;span class="c1"&gt;# &amp;quot;NUITKA_NINT_OBJECT_VALID&amp;quot; flag, since the object will not be&lt;/span&gt;
    &lt;span class="c1"&gt;# bothered to create.&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="c1"&gt;# Since &amp;quot;NUITKA_INT_OBJECT_VALID&amp;quot; not given, need to create the&lt;/span&gt;
&lt;span class="c1"&gt;# PyObject and return it.&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now that the loop analysis works, I will be much happier to make the
value trace collection faster. I will describe it when I do it. From
here on for optimization, the C type &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NINT&lt;/span&gt;&lt;/code&gt; needs to be created and
code generation for the branching helper functions be added, and then
the should see this perform perfectly.&lt;/p&gt;
&lt;p&gt;Functions like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RICH_COMPARE_LT_CBOOL_NINT_CLONG&lt;/span&gt;&lt;/code&gt; will look like this.
We do not yet have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RICH_COMPARE_LT_CBOOL_LONG_CLONG&lt;/span&gt;&lt;/code&gt; which it will
fall back to, but we did &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RICH_COMPARE_LT_CBOOL_INT_CLONG&lt;/span&gt;&lt;/code&gt; for Python2
a while ago, and we could expand that no problem.&lt;/p&gt;
&lt;div class="highlight-C notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;extern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;RICH_COMPARE_LT_CBOOL_NINT_CLONG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nuitka_long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;operand1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operand2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;operand1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;validity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NUITKA_LONG_VALUE_VALID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operand1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;long_value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operand2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RICH_COMPARE_LT_CBOOL_LONG_CLONG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;operand1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;long_object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operand2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Once I get to that, performance will get a hot topic. From there then,
adding sources of type information, be it profile guided compilation, be
it type annotations, be it ever better compile time type inference, will
start to make a lot more sense.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="nuitka-2-0"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Nuitka 2.0&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The 2.0 release has been made. I am going to announce it separately. I
am usually waiting for a few days, to settle potentially regressions.
This time older C compiler support needed a fixup, there is always
something. And then I announce it when I feel that the regressions are
gone and that new users will not encounter obvious breakage at all.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="technical-writer"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Technical Writer&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When I first launched Nuitka commercial, I needed to get myself
financially supported, dropping my day job after 20 years. I am willing
to say that has happened.&lt;/p&gt;
&lt;p&gt;Now as you all know, Nuitka is technically excellent. I cannot say the
same thing of the documentation. Large parts of Nuitka commercial are
still not even publicly described. The User Manual of Nuitka is good,
but not nearly as good as it should be. The website is kind of
unorganized. It’s pretty obvious that my talent is not there. I have
received plenty of help over the years, but it’s not been enough to
match Nuitka and Nuitka commercial outstanding quality.&lt;/p&gt;
&lt;p&gt;So, what I did this week, after seeing that my financial projection for
the coming years seems to allow it, is to attempt and hire people on a
free lancing basis. The first step is a technical writer. She will know
very little of Python and even the terminal, but she will know how to
organize and improve the content of Nuitka.&lt;/p&gt;
&lt;p&gt;It will take time for her to get there and this is very fresh.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="nuitka-website-as-a-devcontainer"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Nuitka Website as a DevContainer&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As a first necessary step to make it easier to contribute to the Nuitka
documentation, the website repo, has gained DevContainer configuration.
It will install a small Ubuntu via docker (or podman if you configured
Visual Code like that), and run the pipenv environment and a daemon to
open the website.&lt;/p&gt;
&lt;p&gt;The docs for that are spotty right now, and the Technical Writer that is
using that, is tasked to improve this right now.&lt;/p&gt;
&lt;p&gt;It should become really easy that way to contribute enhancements to the
documentation.&lt;/p&gt;
&lt;p&gt;I have yet to figure out how to handle the release matching
documentation vs. website documentation for user manual. But the idea is
certainly that the Nuitka documentation is edited on the website.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="nuitka-website-refinements"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Nuitka Website Refinements&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With the DevContainer the need for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;translation&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staging&lt;/span&gt;&lt;/code&gt; sites
is gone. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka/Website&lt;/span&gt;&lt;/code&gt; has been disbanded, since it was only
used to control access to “live” rendered branches of the website, that
are no more.&lt;/p&gt;
&lt;p&gt;As part of the DevContainer process, the website build was changed to
Python 3.10 so that Ubuntu image is easier to use (was Debian 3.9 so
far). The used tools got all upgraded, and many small improvements came
out of it. Links got checked after the upgrade, finding a few broken
ones, and the translation dropdown is now only present when there are
actual translations. Previously e.g. all posts were having them, which
made no sense.&lt;/p&gt;
&lt;p&gt;Making the container smoother to use will be an ongoing process. How to
integration Nuitka &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;auto-format&lt;/span&gt;&lt;/code&gt; in an easy fashion is still being
looked at.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="nuitka-package-configuration"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Nuitka Package Configuration&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So I added a &lt;a class="reference external" href="https://nuitka.net/posts/nuitka-package-config-part3.html"&gt;post that explains variables,&lt;/a&gt; but the
one for parameters, I still need to do that and also update the actual
reference documentation.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="teasers"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Teasers&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Future TWN still have a lot to talk about, we will speak about
Nuitka-Python (our own Python fork with incredible capabilities), about
Nuitka-Watch (our way of making sure Nuitka works with PyPI packages and
hot-fixes to not regress), about compilation reports as a new feature,
Windows AV stuff, onefile improvements, and so on and so on. I got
interesting stuff for many weeks. Limiting myself for now or I will
never publish this.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter-and-mastodon"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Twitter and Mastodon&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I should be more active there, although often I fail due to not wanting
to talk about unfinished things, so actually I do not post there as
much.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen on Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://fosstodon.org/&amp;#64;kayhayen"&gt;Follow &amp;#64;kayhayen on Mastodon&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.
Esp. those, please do them.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it. I hope the technical
writer will aid us in better laying how ways for you to help.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-15.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very likely at least one &lt;em&gt;you&lt;/em&gt; can help with.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-15.html"/>
    <summary>This is a weekly update, or at least it’s supposed to be of what’s going
on in Nuitka land, for you to learn about ongoing developments and
important changes to the project.</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2024-01-30T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-package-config-part3.html</id>
    <title>Nuitka Package Configuration Part 3</title>
    <updated>2024-01-24T00:00:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-package-configuration-part-3"&gt;

&lt;p&gt;This is the third part of a post series under the tag &lt;a class="reference external" href="https://nuitka.net/blog/tag/package_config.html"&gt;package_config&lt;/a&gt; that explains the
Nuitka Package Configuration in more detail. To recap, Nuitka package
configuration is the way Nuitka learns about hidden dependencies, needed
DLLs, data files, and just generally avoids bloat in the compilation.
The details are here on a dedicate page on the web site in &lt;a class="reference external" href="https://nuitka.net/doc/nuitka-package-config.html"&gt;Nuitka
Package Configuration&lt;/a&gt; but reading on
will be just fine.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="problem-package"&gt;
&lt;h1&gt;Problem Package&lt;/h1&gt;
&lt;p&gt;Each post will feature one package that caused a particular problem. In
this case, we are talking about the package &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Problems like with this package are typically encountered in standalone
mode only, but they also affect accelerated mode, since it doesn’t
compile all the things desired in that case. Some packages, and in this
instance look at what OS they are running on, environment variables,
etc. and then in a relatively static fashion, but one that Nuitka cannot
see through, loads a what it calls “backend” module.&lt;/p&gt;
&lt;p&gt;We are going to look at that in some detail, and will see a workaround
applied with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; engine doing code modification on the
fly that make the choice determined at compile time, and visible to
Nuitka is this way.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="initial-symptom"&gt;
&lt;h1&gt;Initial Symptom&lt;/h1&gt;
&lt;p&gt;The initial symptom reported was that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt; did suffer from broken
version lookups and therefor did not work, and we encountered even two
things, that prevented it, one was about the version number. It was
trying to do &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; after resolving the version of toga by itself to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Traceback&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;oga1.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1176&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1147&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;690&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;oga\__init__.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;toga&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1176&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1147&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;690&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;oga&lt;/span&gt;&lt;span class="se"&gt;\a&lt;/span&gt;&lt;span class="s2"&gt;pp.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;toga&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1176&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1147&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;690&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;oga\widgets&lt;/span&gt;&lt;span class="se"&gt;\b&lt;/span&gt;&lt;span class="s2"&gt;ase.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;toga&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;widgets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1176&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1147&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;690&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;ravertino\__init__.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;travertino&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1176&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1147&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;690&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist\setuptools_scm\__init__.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;setuptools_scm&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1176&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1147&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;690&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist\setuptools_scm\_config.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;setuptools_scm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_config&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1176&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1147&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;690&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist\setuptools_scm\_integration\pyproject_reading.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;setuptools_scm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_integration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pyproject_reading&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1176&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1147&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_find_and_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;frozen importlib._bootstrap&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;690&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_load_unlocked&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist\setuptools_scm\_integration\setuptools.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;setuptools_scm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_integration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setuptools&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\py\dist\setuptools_scm\_integration\setuptools.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;_warn_on_old_setuptools&lt;/span&gt;
&lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;invalid&lt;/span&gt; &lt;span class="n"&gt;literal&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;unknown&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So, this is clearly something that we consider bloat in the first place,
to runtime lookup your own version number. The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_scm&lt;/span&gt;&lt;/code&gt;
is implying the use of setuptools, for which the version cannot be
determined, and that’s crashing.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-1-analysis-of-initial-crashing"&gt;
&lt;h1&gt;Step 1 - Analysis of initial crashing&lt;/h1&gt;
&lt;p&gt;So first thing, we did was to repair &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;, to know its
version. It is doing it a bit different, because it cannot use itself.
Our compile time optimization failed there, but also would be overkill.
We never came across this, since we avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; very hard
normally, but it’s not good to be incompatible.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;setuptools.version&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;anti-bloat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;workaround&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;version&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;setuptools&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;replacements&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pkg_resources.get_distribution(&amp;#39;setuptools&amp;#39;).version&amp;quot;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;repr(__import__(&amp;#39;setuptools.version&amp;#39;).version.__version__)&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We do not have to include all metadata for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; here, just to
get that one item, so we chose to make a simple string replacement here,
that just looks the value up at compile time and puts it into the source
code automatically. That removes the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources.get_distribution()&lt;/span&gt;&lt;/code&gt; call entirely.&lt;/p&gt;
&lt;p&gt;With that, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_scm&lt;/span&gt;&lt;/code&gt; was not crashing anymore. That’s good. But
we don’t really want it to be included, since it’s good for dynamically
detecting the version from git, and what not, but including the
framework for building C extensions, not a good idea in the general
case. Nuitka therefore said this:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Nuitka-Plugins:WARNING: anti-bloat: Undesirable import of &amp;#39;setuptools_scm&amp;#39; (intending to
Nuitka-Plugins:WARNING: avoid &amp;#39;setuptools&amp;#39;) in &amp;#39;toga&amp;#39; (at
Nuitka-Plugins:WARNING: &amp;#39;c:\3\Lib\site-packages\toga\__init__.py:99&amp;#39;) encountered. It may
Nuitka-Plugins:WARNING: slow down compilation.
Nuitka-Plugins:WARNING:     Complex topic! More information can be found at
Nuitka-Plugins:WARNING: https://nuitka.net/info/unwanted-module.html
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So that’s informing the user to take action. And in the case of optional
imports, i.e. ones where using code will handle the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ImportError&lt;/span&gt;&lt;/code&gt; just
fine and work without it, we can use do this.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;toga&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;anti-bloat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;remove&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;setuptools&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;usage&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;no-auto-follow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;setuptools_scm&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;when&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;use_setuptools&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;He we say, no &lt;strong&gt;not&lt;/strong&gt; automatically follow &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_scm&lt;/span&gt;&lt;/code&gt; reports,
&lt;strong&gt;unless&lt;/strong&gt; there is other code that still does it. In that way, the
import still happens if some other part of the code imports the module,
but only then. We no longer enforce the non-usage of a module here, we
just make that decision based on other uses being present.&lt;/p&gt;
&lt;p&gt;With this the bloat warning, and the inclusion of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_scm&lt;/span&gt;&lt;/code&gt;
into the compilation is removed, and you always want to make as small as
possible and remove those packages that do not contribute anything but
overhead, aka bloat.&lt;/p&gt;
&lt;p&gt;The next thing discovered was that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt; needs the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga-core&lt;/span&gt;&lt;/code&gt;
distribution to version check. For that, we use the common solution, and
tell that we want to include the metadata of it, for when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt; is
part of a compilation.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;toga&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;data-files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;include-metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;toga-core&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So that moved the entire issue of version looks to resolved.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-2-dynamic-backend-dependency"&gt;
&lt;h1&gt;Step 2 - Dynamic Backend dependency&lt;/h1&gt;
&lt;p&gt;Now on to the backend issue. What remained was a need for including the
platform specific backend. One that can even be overridden by an
environment variable. For full compatibility, we invented something new.
Typically what we would have done is to create a toga plugin for the
following snippet.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;toga.platform&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;setup_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;import&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;toga.platform&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;declarations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;toga_backend_module_name&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;toga.platform.get_platform_factory().__name__&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;anti-bloat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;change_function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;get_platform_factory&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;#39;importlib.import_module(%r)&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;get_variable(&amp;#39;toga_backend_module_name&amp;#39;)&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There is a whole new thing here, a new feature that was added
specifically for this to be easy to do. And with the backend selection
being complex and partially dynamic code, we didn’t want to hard code
that. So we added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;variables&lt;/span&gt;&lt;/code&gt; and their use in Nuitka
Package Configuration.&lt;/p&gt;
&lt;p&gt;The first block &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;variables&lt;/span&gt;&lt;/code&gt; defines a mapping of expressions in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;declarations&lt;/span&gt;&lt;/code&gt; that will be evaluated at compile time given the setup
code under &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setup_code&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This then allows us to have a variable with the name of the backend that
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt; decides to use. We then change the very complex function
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;get_platform_factory&lt;/span&gt;&lt;/code&gt; that we used used, for compilation, to be
replacement that Nuitka will be able to statically optimize and see the
backend as a dependency and use it directly at run time, which is what
we want.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="final-remarks"&gt;
&lt;h1&gt;Final remarks&lt;/h1&gt;
&lt;p&gt;I am hoping you will find this very helpful information and will join
the effort to make packaging for Python work out of the box. Adding
support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt; was a bit more complex, but with the new tool, once
identified to be that kind of backend issue, it might have become a lot
more easy.&lt;/p&gt;
&lt;p&gt;Lessons learned. We should cover packages that we routinely remove from
compilation, like setuptools, but e.g. also IPython. This will have to
added, such that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_scm&lt;/span&gt;&lt;/code&gt; cannot cloud the vision to actual
issues.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-package-config-part3.html"/>
    <summary>This is the third part of a post series under the tag package_config that explains the
Nuitka Package Configuration in more detail. To recap, Nuitka package
configuration is the way Nuitka learns about hidden dependencies, needed
DLLs, data files, and just generally avoids bloat in the compilation.
The details are here on a dedicate page on the web site in Nuitka
Package Configuration but reading on
will be just fine.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="package_config" label="package_config"/>
    <published>2024-01-24T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-14.html</id>
    <title>Nuitka this week #14</title>
    <updated>2024-01-12T00:00:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-14"&gt;

&lt;p&gt;This is a weekly update, or at least it’s supposed to be of what’s going
on in Nuitka land, for you to learn about ongoing developments and
important changes to the project.&lt;/p&gt;
&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-14" id="id2"&gt;Nuitka this week #14&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#communication-vs-coding" id="id3"&gt;Communication vs. Coding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-has-evolved-a-lot" id="id4"&gt;Nuitka has evolved a lot&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#community" id="id5"&gt;Community&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#optimization-work" id="id6"&gt;Optimization Work&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#current-evolutions" id="id7"&gt;Current Evolutions&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#teasers" id="id8"&gt;Teasers&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter-and-mastodon" id="id9"&gt;Twitter and Mastodon&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id10"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="communication-vs-coding"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Communication vs. Coding&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After GSoC 2019, it seems I dropped off with communication about Nuitka
quite a lot, e.g. I stopped “Nuitka This Week”. The reasons are
multi-facetted. I think part of the reason is that I was getting busy,
part of it clearly also was Corona. But also a more dreadful change in
my private life, where the real life Nuitka, my wife, became ill for a
long time. Effectively it’s only become really better mid last year.&lt;/p&gt;
&lt;p&gt;I think, this caused me to go full into code for Nuitka, and to launch
Nuitka commercial, but generally to become more quiet. I have already
relaxed this for a bit, e.g. about Python 3.11, I made a bunch of
postings.&lt;/p&gt;
&lt;p&gt;So this one is a bit general to start off, but I also provide fairly
recent details about what I worked on for 2.0 as well.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="nuitka-has-evolved-a-lot"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Nuitka has evolved a lot&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;From a usability standpoint, ever since I went &lt;a class="reference external" href="/posts/all-in-with-nuitka.html"&gt;all in with Nuitka&lt;/a&gt;, but also before, the out of the box
experience of Nuitka has become ever better. And even 2.0 will take it
noticeable further. It’s the premier choice for Python deployment if you
want efficiency. Its onefile mode is pretty great already and is
continuously getting better.&lt;/p&gt;
&lt;p&gt;It’s fair to say that Nuitka was great in 2019. I think in 2023 it
became almost amazing for deployment. This is in large part due to
working on the Yaml configuration and these things. In 2024 I hope to
get it really smooth.&lt;/p&gt;
&lt;p&gt;I actually made posts about the Yaml stuff, and I will resume the series
shortly, basically it allows people to help improve the deployment side
of Nuitka, e.g. missing DLLs and data files, hacks needed, etc. for
packages, and it’s quickly becoming better and more complete.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="community"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Community&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On the Discord server, I have been in touch with users of Nuitka a lot
more. You are welcome to join us on the &lt;a class="reference external" href="https://discord.gg/nZ9hr9tUck"&gt;Discord server for Nuitka
community&lt;/a&gt; where you can hang out with
the developers and ask questions. It’s not intended as an interactive
manual. You are supposed to read the docs for yourself first.&lt;/p&gt;
&lt;p&gt;I am also now occasionally on the Python Discord server. Mostly when I
get summoned to answer questions that my community thinks make sense,
and have been awarded the community role there, which is pretty nice. I
seem to make new connections there.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="optimization-work"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Optimization Work&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think, it’s in vain to explain what I did for performance in all that
time. Mostly, some technical debts for Python3 were collected, extending
to advantage in in speed of Nuitka over pure Python again. The advantage
compared on Python2 was not as present, and still is not, on Python3,
but for 3.10 it’s pretty good.&lt;/p&gt;
&lt;p&gt;The major breakthroughs have not happened. But I will be talking about
the plans, these sure are exciting. Lots of things are in place, some
are not, but I hope to get there.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="current-evolutions"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Current Evolutions&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So many things on my mind right now, for one, I guess, 4 plugin changes
that I have yet to document in new postings. Two are visible here in
this code.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;toga.platform&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# checksum: 4db91cac&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;setup_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;import&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;toga.platform&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;declarations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;toga_backend_module_name&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;toga.platform.get_platform_factory().__name__&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;anti-bloat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;change_function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;get_platform_factory&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;#39;importlib.import_module(%r)&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;get_variable(&amp;#39;toga_backend_module_name&amp;#39;)&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;First, the checksum. Nuitka is going to warn you about checking your
user yaml files for correctness in the future. Since it often finds
structural problems, very much needed, since yaml is whitespace
sensitive, and you never know what it is: a list, a dict, etc. but the
schema we created, can tell.&lt;/p&gt;
&lt;p&gt;Second, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;variables&lt;/span&gt;&lt;/code&gt; are a new section, and in fact so new, they are
not even documented. They can be used to query values from code at
compile time. In this case we are using it to get at the backend to use,
so we can tell it at runtime. Otherwise, it’s hidden to Nuitka, and
could e.g. still be subject to a changed decision from environment
variables, something we typically do not want.&lt;/p&gt;
&lt;p&gt;For the third and fourth thing, we need another example. Torch can use a
JIT to speed up some things, with a compilation very similar to what
Nuitka does. That however needs a compiler and the source code on the
target platform. Not an easy ask for all kinds of deployments. A new
feature makes this easier than before.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;torch&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# checksum: 84315db6&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;disable-jit&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;values&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;value&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(&amp;quot;yes&amp;quot;,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;no&amp;quot;)&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Torch&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;JIT&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;disabled&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;by&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;default,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;choice&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;explicit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;--module-parameter=torch-disable-jit=yes|no&amp;#39;&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;support_info&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;parameter&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;when&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;standalone&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;get_parameter(&amp;quot;disable-jit&amp;quot;,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;None)&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;None&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;import-hacks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;force-environment-variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;PYTORCH_JIT&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;when&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;get_parameter(&amp;quot;disable-jit&amp;quot;,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;no&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;if&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;standalone&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;else&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;yes&amp;quot;)&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;==&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;yes&amp;quot;&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So, what this does, is to make Nuitka accept parameters. The options
part is designed to complain when the default value is used in
standalone mode, kind of making the user acknowledge that it’s the
intended value. For accelerated mode, we do not disable the JIT, since
we can expect to be in the same environment with source code intact.&lt;/p&gt;
&lt;p&gt;With &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;get_parameter&lt;/span&gt;&lt;/code&gt; you get the option value, and can be conditional
on it in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; block. That is the 3rd new thing.&lt;/p&gt;
&lt;p&gt;The fourth new thing, is the forcing of environment variables. We have
so far done this, including in plugins like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; manually with
post-load-code. The above is the same, effectively doing
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.environ[&amp;quot;PYTORCH_JIT&amp;quot;]&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;/code&gt; if the JIT is to be disabled.&lt;/p&gt;
&lt;p&gt;These changes are designed to avoid having to do plugins again.
Historically for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;toga&lt;/span&gt;&lt;/code&gt; support, we should have created a new plugin,
but now it’s not necessary anymore, since the Yaml mechanism can cover
retrieval of compile time values from modules. And for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; and the
JIT, a plugin would have been needed to provide the command line control
for that decision.&lt;/p&gt;
&lt;p&gt;This increased power of the Yaml will make it even less often the case
that a plugin must be written. But of course docs will have to be added
and maybe more places will need to work with variables to make that true
even more often. More on that in the future.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="teasers"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Teasers&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Future TWN will speak about Nuitka-Python (our own Python fork with
incredible capabilities), about Nuitka-Watch (our way of making sure
Nuitka works with PyPI packages and hot-fixes to not regress), about
compilation reports as a new feature, Windows AV stuff, onefile
improvements, and so on and so on. I got interesting stuff for many
weeks. Limiting myself for now or I will never publish this.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter-and-mastodon"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Twitter and Mastodon&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I should be more active there, although often I fail due to not wanting
to talk about unfinished things, so actually I do not post there as
much.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen on Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://fosstodon.org/&amp;#64;kayhayen"&gt;Follow &amp;#64;kayhayen on Mastodon&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.
Esp. those, please do them.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-14.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very likely at least one &lt;em&gt;you&lt;/em&gt; can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-14.html"/>
    <summary>This is a weekly update, or at least it’s supposed to be of what’s going
on in Nuitka land, for you to learn about ongoing developments and
important changes to the project.</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2024-01-12T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-19.html</id>
    <title>Nuitka Release 1.9</title>
    <updated>2023-12-17T14:25:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-9"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has focused on improved startup time and compatibility with
lazy loaders which has resulted in some optimization. There are also the
usual amounts of bug fixes. For macOS and Linux there are lots of
improvements that should make standalone mode for them robust with many
more configurations.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Nuitka Action: Fix, the parsing code intended for the github action
was not working as advertised. Fixed in 1.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Follow &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;soundfile&lt;/span&gt;&lt;/code&gt; change for their DLL names. Fixed in
1.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS: Fix, the recent change to detect their Python flavor with 3.11
was done wrong. Fixed in 1.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Ignore MS API DLLs found from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PATH%&lt;/span&gt;&lt;/code&gt;. We only ignored
them because they come from the Windows system folder, but if any
program has them, then we did include them. Fixed in 1.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;calendar&lt;/span&gt;&lt;/code&gt; is used by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;time&lt;/span&gt;&lt;/code&gt; built-in module
actually and therefore must be included. Fixed in 1.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data file for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unstructured&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data file for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;grpc&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.8.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt;. Fixed in 1.8.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11: The dictionary copy code could crash on special kinds of
dictionaries. Fixed in 1.8.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data file required by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ens&lt;/span&gt;&lt;/code&gt; of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;web3&lt;/span&gt;&lt;/code&gt; package.
Fixed in 1.8.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; could not access attributes living in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt; module, but only things elsewhere, breaking minimal
examples. Fixed in 1.8.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Fix, the license of some packages in case it is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UNKNOWN&lt;/span&gt;&lt;/code&gt;
was not handling all the cases that wheels expose. Fixed in 1.8.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; was
behaving identical for packages. Made the former not include all of
the package, but only the top level and what that uses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lightning&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.8.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Fix, the platform tag was sometimes incorrect for wheels
built. Fixed in 1.8.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Make the PySide2/PySide6 signal connection workaround
more robust. It was not handling reuse of the same method properly
and insisted on changing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; which some objects apparently
dislike a lot. Fixed in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, need to use short path for the Python installation
prefix, as it might be Unicode path as well. Fixed in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, output spec &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%NONE%&lt;/span&gt;&lt;/code&gt; was not compiling anymore. Fixed in 1.8.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Avoid having short paths for DLL sources on Windows. Fixed
in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, catch provided metadata from command line
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-distribution-metadata&lt;/span&gt;&lt;/code&gt; without including the package at
runtime. Fixed in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Fix, was not properly initializing indicator variable
used in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; re-formulation. The generated code still work,
but this was an error on the logical level to use a variable
un-initialized. Fixed in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing DLLs for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rlottie-python&lt;/span&gt;&lt;/code&gt;. Fixed in 1.8.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependencies and also avoid
duplication of DLLs for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;av&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, was not handling errors when creating distribution objects.
Fixed in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Remove extended attributes from DLLs, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finder&lt;/span&gt;&lt;/code&gt; can add
them and it prevents code signing. Fixed in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Workaround for signing tkinter data files properly, we just
exclude the problematic ones, as they are going to be unused. Fixed
in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added hidden dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;curl_cffi&lt;/span&gt;&lt;/code&gt; package. Fixed
in 1.8.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added hidden dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; package. Fixed
in 1.8.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added more &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;kivymd&lt;/span&gt;&lt;/code&gt; data files. Fixed in 1.8.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;winloop&lt;/span&gt;&lt;/code&gt; package. Fixed
in 1.8.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, do not resolve main program executable filename to long
filename. Fixed in 1.8.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, ignore &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ucrtbase&lt;/span&gt;&lt;/code&gt; runtime DLLs found from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PATH%&lt;/span&gt;&lt;/code&gt;
as well. Fixed in 1.8.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin was regressed and
support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill&lt;/span&gt;&lt;/code&gt; version 0.3 was added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to include package name for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib&lt;/span&gt;&lt;/code&gt; usage with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-m&lt;/span&gt;&lt;/code&gt; to work properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for newest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib&lt;/span&gt;&lt;/code&gt; too, we no longer need
to error for using the latest one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, attribute lookups becoming hard through node factories didn’t
annotate possible exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;huggingface_hub&lt;/span&gt;&lt;/code&gt; vendored lazy
loader variant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;datasets&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Handle default plugin of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; a lot better. Be
more graceful when the query of the default one fails, and point to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MPLBACKEND&lt;/span&gt;&lt;/code&gt; usage. Otherwise inform the user of the backend used
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; so it can be checked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; on a package was including all of it rather
than just top level, which was what it should do. For including the
full package, there is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, need to check dependencies for the selected target arch
precisely, otherwise DLLs and extension modules for the other arch
can cause errors for our dependency analysis in standalone mode.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Also added support for getting DLL exported symbols on macOS
which then allows to properly distinguish extension modules
from mere DLLs on macOS, and not just Linux.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: Fix, the GTK DLL name changed again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.zip&lt;/span&gt;&lt;/code&gt; files being in python path
as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, when a sub-package module import is rejected for whatever
reason, the programs attempt to import it, still implies an attempt
to import the parent module. For extension modules in accelerated
mode, this is of course common, but the containing package if any, is
of course still to be included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, PySide6 in accelerated mode needs workarounds too, previously
only standalone mode was avoiding the corruptions it was causing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, make the PySide2/PySide6 signal connection workaround also fix
disconnection only. For signals that only ever got disconnected, but
never connected, the workaround was not applied.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: For standalone add more GI dlls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, inline copies of e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; could be detected during
compilation and even in place of the real package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added proper support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;timm&lt;/span&gt;&lt;/code&gt; without disabling JIT
generally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11: Fix, frozen stdlib modules must be turned off&lt;/p&gt;
&lt;p&gt;Otherwise the value of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.__file__&lt;/span&gt;&lt;/code&gt; becomes wrong, and maybe more
issues, as Nuitka is more compatible to full modules than the frozen
modules are for standalone mode at least.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Avoid RuntimeWarning when using inline copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt; and its lazy loader.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add config for font data files of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;qtawesome&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added workaround for PySide6 enums checking bytecode when
some older enum values are used. The PySide6 means to detect method
calls vs. type lookups to decide if to inject the default value for a
flag value. With our workaround, enums behave as expected without
that check being possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gradio&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Added support for non-latin (for example Chinese) module
names, these were not working correctly yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, star importing from modules with non-UTF8 encodable
names in the module dictionary crashed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, couldn’t list directories with unicode filenames in
them, so that e.g. a Python3 created build directory with unicode
module names was not possible to fully delete.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added missing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;as_posix&lt;/span&gt;&lt;/code&gt; method to our resource
reader objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing DLLs for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyAutoIt&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;flask_restx&lt;/span&gt;&lt;/code&gt; package, for
which &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data&lt;/span&gt;&lt;/code&gt; also wouldn’t work, due to its
strange handling when running in frozen mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added more metadata requirements for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yapf&lt;/span&gt;&lt;/code&gt; vendored &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib2to3&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, was crashing on module patterns of submodules not
existing in the yaml config implicit dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Plugins: Introduce an explicit hard import registry, that now can be
expanded at compile time by plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lazy&lt;/span&gt;&lt;/code&gt; delayed loading, which removes
the need for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;include-pyi-file&lt;/span&gt;&lt;/code&gt; as we inline its effect at compile
time. Also, the dependencies of these kinds of packages no longer
need to be overreaching and can analyze the code again. This is using
the hard import registry plugin interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Standalone builds with PyPI packages no longer include system
DLLs unless a new Yaml configuration for DLLs called
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;package-system-dlls&lt;/span&gt;&lt;/code&gt; is configured, which will be necessary for
GTK bindings probably. With this the included DLLs will more often be
only ones suitable for use on other OSes. This should make Linux
standalone somewhat easier, but still need to compile on old OS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: For distributions include the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;installer&lt;/span&gt;&lt;/code&gt; name, so we can
tell pip, conda or system packages apart better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: For included modules, we now also attribute the
distributions it directly uses modules from and the distribution the
module itself belongs to was added as an attribute as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added excluded module reasons to reporting, so that it can
be told directly, which imports were found, but not followed to. Also
added report reader capable of providing information from a
compilation report.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for FIPS compliance, a US security standard by NIST,
that caused parts of Python used by Nuitka to be flagged.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Added option to control the update mode, handles now rc
versions, so it can be used before and after Nuitka releases easily.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Added timeout for how long programs are allow to run.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Added ability to recognize fork loops happening, so test cases
of e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib&lt;/span&gt;&lt;/code&gt; do not suddenly go wild on a break change in that
or other packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--list-package-dlls&lt;/span&gt;&lt;/code&gt; now needs to check target arch
options, so we now delay the non-compiling options execution until
it’s set, which also makes it cleaner code. Also, we can now
distinguish real Python extension modules from mere DLLs on macOS
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Also ignore &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;av&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; DLL collisions, making it
more generic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; plugin more robust. Detect the tkinter
version used and scan for its paths. Use path used when compiling
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tcl&lt;/span&gt;&lt;/code&gt; from source and check data directory paths for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tcl&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk&lt;/span&gt;&lt;/code&gt; for expected files, and error out if they are not found. With
these changes self-compiled Python as e.g. used in our commercial
Linux container is supported too now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced support for self compiled Python by using link libraries
needed for static linked extension modules. This allows a better
commercial Linux container build mainly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Optimization: Enhanced handling of aliased variables.&lt;/p&gt;
&lt;p&gt;Was not converting variable assignments from variables created during
re-formulations to the dedicated nodes, potentially missing out on
optimizations specific to that case, because it was then not
recognized to be non-generic anymore later.&lt;/p&gt;
&lt;p&gt;Was not optimizing comparisons and truth checks for temporary
variable references, missing out a lot of opportunities for
optimization of code coming from re-formulations.&lt;/p&gt;
&lt;p&gt;When a variable is aliased, but the source variable is one that
cannot escape or is even very hard value, we were not annotating that
as well as possible, but now e.g. comparisons with constant values
that are immutable are done even if aliased.&lt;/p&gt;
&lt;p&gt;Remove knowledge of variables assigned to other variables only if
that value can actually escape, otherwise that has no real point.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use variable length encoding for data blob size values. This removes
size constraints in some cases, but also makes the representation of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; more compact, since they commonly have
only a few elements, but we used 4 bytes for length, where the
average should be close to one 1 byte per length item now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster CRC32 with zlib, leading to much faster program startup, and
faster checksums for cached mode of onefile, improving that a lot as
well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Updated MinGW64 to latest WinLibs package, should produce
even faster code and show stopping bugs in its &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;binutils&lt;/span&gt;&lt;/code&gt; have
apparently been fixed. This should now link a lot faster with LTO,
due to using multiple processes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;builtins.open&lt;/span&gt;&lt;/code&gt; as hard import to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;open&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Make sure we actually use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__slots__&lt;/span&gt;&lt;/code&gt; for our classes.
Variables, code generation context, iteration handles, and type
shapes didn’t really use those and that should speed their use up and
therefore reduce Python compile time and memory usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Removed one more automatic stdlib module &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;textwrap&lt;/span&gt;&lt;/code&gt; as
it otherwise uses a runner code with test code that is bloating with
hello world code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fedora: Enabled LTO linking by default as well, it’s working, but
Fedora Python is still not really good to use, since it doesn’t allow
static linking of libpython.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pooch&lt;/span&gt;&lt;/code&gt; package. Added in
1.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pdb&lt;/span&gt;&lt;/code&gt; usage from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyparsing&lt;/span&gt;&lt;/code&gt; package. Added in
1.8.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bitarray&lt;/span&gt;&lt;/code&gt;. module. Added
in 1.8.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lightning&lt;/span&gt;&lt;/code&gt; to cause use of its
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lightning.testing&lt;/span&gt;&lt;/code&gt; framework.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Added override that that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; but only it can use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt;, it will not work otherwise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gradio&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;altair&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyqtgraph&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;triton&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocess&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; with new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mmcv&lt;/span&gt;&lt;/code&gt; package as
well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid URLs in numpy messages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code Generation: Dedicated helper function for fixed imports, that
uses less C code for standard imports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libz&lt;/span&gt;&lt;/code&gt; on Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Use latest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rstchk&lt;/span&gt;&lt;/code&gt; versions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3.12: Mark as unsupported for now, it does not yet compile on
the C level again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added description of deployment mode, this was not
documented so far, but for some programs, dealing with them is now
required.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Improved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-plugin-directory&lt;/span&gt;&lt;/code&gt; documentation to
make it more clear what it is usable for and what not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Reject standard library paths for plugin directories given to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-plugin-directory&lt;/span&gt;&lt;/code&gt; which is a frequent user error.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: When interrupting during Scons build with CTRL-C do not give a
Nuitka call stack, there is no point in that one, rather just exit
with a message saying the user interrupted the scons build.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Make package data output from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--list-package-data&lt;/span&gt;&lt;/code&gt; more
understandable.&lt;/p&gt;
&lt;p&gt;We already had a count for DLLs too, and should not list directory
name in case it’s empty and has no data files, otherwise this can
confuse people.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Make the progress bar react to terminal resizes. This avoids many
of the distortions seen in Visual Code that seems to do it a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added a mnemonic warning for macOS architecture cross
compilation, that it will only work as well as Python does when
limited to that arch. Read more on &lt;a class="reference external" href="https://nuitka.net/info/macos-cross-compile.html"&gt;the info page&lt;/a&gt; for detailed
information. Added in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Error exit for wrong/non-existent input files first. Otherwise
e.g. complaints about not including anything can be given where
project options were intended to solve that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Enhanced error message in case of not included &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imageio&lt;/span&gt;&lt;/code&gt;
plugins. Added in 1.8.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Enhanced messages from options nanny, showing the condition that
was not passed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Improved download experience. When hitting CTRL-C during a
download, delete the incomplete file immediately, otherwise it’s
causing an error next run. Also added progress for downloads as well,
so they do not sit there silent without a way to know how much is
remaining.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Also report errors happening during plugin init nicely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code: Added ignore paths code spell checking. This only adds
the most obvious things, more to come later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code: Use environment for C include path configurations, and
add one for use on macOS, this cleaned up a lot of inconsistencies in
paths for the various existing platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Added experimental switch to disable free lists, so memory
corruption issues can become easier to debug.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Output clang and gcc versions in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Add hint how to disable the warning message that asks to disable
the console during debugging by explicit &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--enable-console&lt;/span&gt;&lt;/code&gt; usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Do not consider aliases of options for ambiguous option error.
Without this &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-progressbar&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-progress-bar&lt;/span&gt;&lt;/code&gt; being
both accepted, forced long version of options for no good reason.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: With &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; output failed query command that a plugin
made. In this way it is easier to check what is wrong about it for
the user already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Check if metadata included has the actual distribution package
included. Otherwise we error out, as this would result in a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RuntimeError&lt;/span&gt;&lt;/code&gt; when the program is attempting to use it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Harmonized help text quoting. We will also need that in order to
generate the help texts for Nuitka-Action in the future. Currently
this is not perfect yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Added trace that allows us to see how long &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_Exit&lt;/span&gt;&lt;/code&gt;
call takes, which might be a while in some cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Made the Nuitka requirements top level chapter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added promise to support newer Python versions as soon
as possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added section about how Linux standalone is hard and
needs special care.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11: Disallow to switch to g++ for too old gcc, with this
Python version we have to use C11.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Remove inconsistencies with C python hex version literals in
auto-format, which will also make searching code easier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: More clear error message for asking package data of a module name
that is not a package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Dedicated node for fixed and built-in imports were added, which allow
the general import node to be cleaner code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Removed remaining &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win_target&lt;/span&gt;&lt;/code&gt; mode, this is long obsolete.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spelling improvements by newer codespell, and generally, partially
ported to 1.8.4 already so the Actions pass again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Move python code of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; run time hook to
separate file.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Run the distutils tests on macOS as well, so it’s made sure wheel
creation is working there too, which it was though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid relative URLs in use during &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt; tests, these
fail to work on macOS at least.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add GI GTK/GDK/Cairo standalone test for use with &lt;strong&gt;MSYS2&lt;/strong&gt;.
Eventually this should be run inside Nuitka-Watch against &lt;strong&gt;MSYS2&lt;/strong&gt;
on a regular basis, but it doesn’t support this Python flavor yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test case with Chinese module names and identifiers that
exposed issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Completed the PGO test case and actually verify it does what we want.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added standalone test for setuptools. Since our anti-bloat works
makes it not compiled with most packages, when it is, make sure it
doesn’t expose Nuitka to some sort of issue by explicitly covering
it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Show tracebacks made in report creations on GitHub Actions and during
RPM builds.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This is again massive in terms of new features supported. The lazy
loader support is very important as it allows to handle more packages in
better ways than just including everything.&lt;/p&gt;
&lt;p&gt;The new added optimization are nice, esp. startup time will make a huge
difference for many people, but mainly the focus was on supporting
packages properly, and getting Nuitka-Watch to be able to detect
breaking of packages from PyPI closer to when it happens.&lt;/p&gt;
&lt;p&gt;And then of course, there is a tremendous amount of improvements for the
UI, with lots features become even more rounded.&lt;/p&gt;
&lt;p&gt;For Python 3.12 work has begun, but there is more to do for it. At this
time it’s not clear how long it takes to add it. Stay tuned.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-19.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2023-12-17T14:25:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-18.html</id>
    <title>Nuitka Release 1.8</title>
    <updated>2023-09-30T07:59:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-8"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opentelemetry&lt;/span&gt;&lt;/code&gt; package. Added in
1.7.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Fix, do not report plugin influence when there are not
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-auto-follow&lt;/span&gt;&lt;/code&gt; in an anti-bloat section. Fixed in 1.7.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Add missing usage tag &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;use_pytest&lt;/span&gt;&lt;/code&gt; for anti-bloat
changes that remove &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; related codes. Fixed in 1.7.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jsonschema&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.7.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, our &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iterdir&lt;/span&gt;&lt;/code&gt; implementation was crashing in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;files&lt;/span&gt;&lt;/code&gt; for packages that don’t actually have a directory for data
files to live in. Fixed in 1.7.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, parent package imports could pick the wrong name internally and
then collide with sub-packages of that package during collision.
Fixed in 1.7.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pymssql&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.7.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cvxpy&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.7.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependencies of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib2to3.refactor&lt;/span&gt;&lt;/code&gt;. Fixed
in 1.7.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib2to3.pgen&lt;/span&gt;&lt;/code&gt; were regressed.
Fixed in 1.7.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cairo&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.7.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;trio&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.7.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;markdown&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.7.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eventlet&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.7.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for more newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt; package. Fixed
in 1.7.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for more newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt; package. Fixed
in 1.7.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for more newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package.
Fixed in 1.7.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch_scatter&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.7.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing DLL for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wx.html2&lt;/span&gt;&lt;/code&gt; to work well on
Windows. Fixed in 1.7.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;pyqtSlot&lt;/span&gt;&lt;/code&gt; decoration could crash the compilation and was
effective even if no pyqt plugin was active. Fixed in 1.7.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11: Fix, need to support &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;BaseExceptionGroup&lt;/span&gt;&lt;/code&gt; for code
generation too, otherwise the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exceptiongroup&lt;/span&gt;&lt;/code&gt; backport was not
working. Fixed in 1.7.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: Fix usage of deprecated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sysconfig&lt;/span&gt;&lt;/code&gt; variable with mingw.
After their switch to Python 3.11, it is no longer available. Fixed
in 1.7.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Do not compile empty directories found in package scan as
namespaces. Fixed in 1.7.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7+: Fix, need to follow dict internal structure more
correctly, otherwise we over-allocate and copy more data than
necessary. Fixed in 1.7.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8: Fix, the new pyqt plugin workaround requires 3.9 or higher
and could causes compile time crashes with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;pyqtSlot&lt;/span&gt;&lt;/code&gt;
decorator. Fixed in 1.7.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modules: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; file created was using default encoding
which can vary and potentially even crash on other systems. Enforcing
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;utf-8&lt;/span&gt;&lt;/code&gt; now. Fixed in 1.7.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, only failed relative imports should become package relative.
This was giving wrong names for attempts imports in these cases.
Mostly only affected dependency caching correctness and reporting at
this time. Fixed in 1.7.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing metadata dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt;
package. Fixed in 1.7.9 already, but more added for release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to ignore folders that cannot be module names in stdlib.
Could e.g. crash when encountering folders like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.idea&lt;/span&gt;&lt;/code&gt; which
cannot be module names. Fixed in 1.7.9 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;langchain&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, forced output paths didn’t work without C11 mode. This mainly
affected older MSVC users, with newer MSVC and good enough Windows
SDK, it’s not using C++ anymore. Fixed in 1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, was using int values for boolean returns, something that was
giving warnings with at least older MSVC not in C11 mode. Fixed in
1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, failed hard name imports could crash with segfault trying to
release their value. Fixed in 1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xml.sax&lt;/span&gt;&lt;/code&gt; in
stdlib. Fixed in 1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mingw64&lt;/span&gt;&lt;/code&gt; mode was not working if MSVC was
installed, but not acceptable for use. Fixed in 1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;onnxruntime&lt;/span&gt;&lt;/code&gt; had too few DLLs included. Fixed in
1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;moviepy&lt;/span&gt;&lt;/code&gt;. Fixed in 1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Fix, matching empty sequences was not considering
length, leading to incorrect code execution for that case.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="p"&gt;[]:&lt;/span&gt;
         &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="c1"&gt;# non-empty sequences matched here&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Fix, some error outputs didn’t work nicely with progress bars,
need to use our own print function that temporarily disables them or
else outputs get corrupted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Sync output for data composer. This is to avoid race
conditions that we might have been seeing occasionally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.flags.optimize&lt;/span&gt;&lt;/code&gt; value for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-OO&lt;/span&gt;&lt;/code&gt; didn’t match what Python does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, packages have no &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; if imported from
frozen, these was causing issues for some packages that scan all
modules and expect those to be there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; built-in could crash if its argument self-destructs
during usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2/PySide6&lt;/span&gt;&lt;/code&gt; workaround for connecting compiled class
methods without crashing were not handling its optional &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt;
argument.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced non-commercial PySide2 support by adding yet another class
to be hooked. This was ironically contributed by a commercial user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;delvewheel&lt;/span&gt;&lt;/code&gt; version as used in
newest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; and probably more packages in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil.iter_modules&lt;/span&gt;&lt;/code&gt; function now works
without importing the module first. The makes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Faker&lt;/span&gt;&lt;/code&gt; work on
Windows as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Detect top level packages even with broken packaging. Some
packages will not reveal through installed files or top level what
package they are for, and as a result, they cannot be uninstalled,
but we need to still be able guess what package they are responsible
for, so we go by their PyPI name, which works for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: More robust way of allowing iteration of compiled
packages via file path.&lt;/p&gt;
&lt;p&gt;Rather than pre-populating the cache, we should provide the hook
function to check if we are responsible for a given path. With this,
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Faker&lt;/span&gt;&lt;/code&gt; package works on Windows as well now, and probably
other packages benefit too. This then works on paths rather than
strings, which due to short paths, etc. can be non-unique on Windows
easily.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opencc&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, import name resolving done for things like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;six&lt;/span&gt;&lt;/code&gt; and others should be done as soon as possible, and not just
during optimization, or else some imports can become just wrong as a
result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11: Added support for the new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;closure&lt;/span&gt;&lt;/code&gt; keyword only
argument in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pythonnet&lt;/span&gt;&lt;/code&gt; on Linux as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Fix, do not give false alarms for root pip installed
packages, they get a similar path component, but are not actually
Debian packages of course, this was mostly affecting builds inside
containers of course.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for comparing results from our resource
reader file interfaces. This is needed for when people want to e.g.
sort the the file list.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Fix, didn’t catch &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;await&lt;/span&gt;&lt;/code&gt; on module level as a syntax
error.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib&lt;/span&gt;&lt;/code&gt; with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;loky&lt;/span&gt;&lt;/code&gt; backend as
well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;chromadb&lt;/span&gt;&lt;/code&gt; adding missing
dependencies and data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resources.files()&lt;/span&gt;&lt;/code&gt; was not fully
compatible&lt;/p&gt;
&lt;p&gt;Need to provide basename for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.name&lt;/span&gt;&lt;/code&gt; attribute rather than an
absolute path. And in some cases, a leading trailing slashes was
produced for the full path, which caused trouble for file iteration
of filenames.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_resources&lt;/span&gt;&lt;/code&gt; as well.
We now need to expose the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;files&lt;/span&gt;&lt;/code&gt; functionality even before Python
3.9 for this to be possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rapidfuzz&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyOpenGL&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added support to specify embedding of metadata for given
packages via the package configuration. With this, entry points,
version, etc. can even be resolved if not currently possible at
compile time to so through the code with static optimization. Added
in 1.7.1 already.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;opentelemetry.propagate&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;data-files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;include-metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;opentelemetry-api&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Add PEP 660 editable install support. With this &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pdm&lt;/span&gt;&lt;/code&gt;
can be used for building wheels with Nuitka compilation. Added in
1.7.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Haiku: Added support for accelerated mode, standalone will need more
work, also recognize its form of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site-packages&lt;/span&gt;&lt;/code&gt; folder, named
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vendor-packages&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable misleading initial import exception handling in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt;,
all what it says detracts only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added python flags given for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_asserts&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_docstrings&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_annotations&lt;/span&gt;&lt;/code&gt; to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; attribute values of
modules and functions to fully expose the information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Added capability to specify what &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; binary to use in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-watch&lt;/span&gt;&lt;/code&gt; so we can use enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-watch&lt;/span&gt;&lt;/code&gt; from develop
branch with older versions of Nuitka with no issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Now evaluates the minimum version needed for Nuitka, and skips
test cases, allowing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-watch&lt;/span&gt;&lt;/code&gt; to be run with versions that do
not yet handle cases that e.g. develop already can, i.e. next Nuitka
version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch: Now evaluates if a compilation with Nuitka needs to be done at
all, as it’s only necessary if the PyPI config changed, or if Nuitka
version changed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added source path for modules, so it’s easier to tell where
something came from, and esp. in case of bugs in the import location
of Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: In case of a crash, always write report file for use in bug
reporting. This is now done even if no report was asked for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Include error exit message from Nuitka in case of explicit
exits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deployment&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-deployment-flag&lt;/span&gt;&lt;/code&gt; that
disables certain debugging helpers.&lt;/p&gt;
&lt;p&gt;Right now, we use this to control a hook that prevents execution of
itself with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-c&lt;/span&gt;&lt;/code&gt; which is used by e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib&lt;/span&gt;&lt;/code&gt; and that
potentially can turns Nuitka created programs into a fork bombs, when
they use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.executable&lt;/span&gt; &lt;span class="pre"&gt;-c&lt;/span&gt; &lt;span class="pre"&gt;...&lt;/span&gt;&lt;/code&gt;. This can be disabled with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-deployment-flag=self-execution&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deployment&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The plan is to expand this to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;FileNotFoundError&lt;/span&gt;&lt;/code&gt; and similar
exception exits pointing to compilation issues with helpful more
annotations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Catch attempts to exec compiled function bytecodes.&lt;/p&gt;
&lt;p&gt;This segfaults otherwise with at least Python3.11 and is probably a
good idea to catch for all versions, as it doesn’t do anything.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Remove unnecessary &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.\&lt;/span&gt;&lt;/code&gt; in CMD files generated, these will
otherwise show up in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.argv[0]&lt;/span&gt;&lt;/code&gt; too, making them more ugly than
necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Also respect &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CFLAGS&lt;/span&gt;&lt;/code&gt; setting. It’s rarely used, but for
completeness sake we should have that too. The effects are the same
as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CCFLAGS&lt;/span&gt;&lt;/code&gt; it seems.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added type shape for built-in hash operation, these must indeed be of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; type either way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;future&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; package. Added in 1.7.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt;&lt;/code&gt; package. Added in
1.7.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;streamlit&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; work with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_docstrings&lt;/span&gt;&lt;/code&gt; mode.
Added in 1.7.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid more &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;polyfactory&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Expand the list of modules that are in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt;
group by the ones Python provides itself, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test.support&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test.test_support&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;future.moves.test.support&lt;/span&gt;&lt;/code&gt;, so the
culprits are more easily recognizable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Treat &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ipykernel&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jupyter_client&lt;/span&gt;&lt;/code&gt; as equal to
IPython for usage, so the bloat warning about IPython becomes more
meaningful in that case too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plumbum&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Statically optimize the value of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.byteorder&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-auto-follow&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tornado&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib&lt;/span&gt;&lt;/code&gt;
package. The user is informed of that happening if nothing else
imports tornado in case he wants to enable it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid including standard library &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zipapp&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;calendar&lt;/span&gt;&lt;/code&gt; automatically and remove their runners through
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; configuration. This got rid of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;argparse&lt;/span&gt;&lt;/code&gt; for hello
world compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not auto include standard library &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;json.tool&lt;/span&gt;&lt;/code&gt; which
is a binary only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid automatic inclusion a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_json&lt;/span&gt;&lt;/code&gt; extension module
for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;json&lt;/span&gt;&lt;/code&gt; module and do not automatically include it as part
of stdlib anymore, this can reduce the size of standalone
distributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid the standard library &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;audioop&lt;/span&gt;&lt;/code&gt; extension module
by making all audio related modules non-automatically included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_contextvars&lt;/span&gt;&lt;/code&gt; standard library extension
module. Explicit and implicit imports of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;contextvar&lt;/span&gt;&lt;/code&gt; module will
continue to work and hopefully give proper errors until we do
ourselves raise such errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid also the “_crypt” standard library extension
module, and make the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;crypt&lt;/span&gt;&lt;/code&gt; module raise an error where we modify
the message to not be as misleading.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: On macOS we also saw &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_bisect&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_opcode&lt;/span&gt;&lt;/code&gt; and more
modules that are optional extension modules, that we no longer do
automatically use if they are that way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added more modules like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mailbox&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;grp&lt;/span&gt;&lt;/code&gt;, etc. to
exclusion from standard library when they trigger dependencies on
other things, or are an extension themselves.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlalchmy.testing&lt;/span&gt;&lt;/code&gt; and therefore
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlalchemy&lt;/span&gt;&lt;/code&gt; package. Also added that testing package
to be treated as using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt;. Added in 1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid IPython in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distributed&lt;/span&gt;&lt;/code&gt; package. Added in 1.7.10
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt;. Added in 1.7.10
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: More changes needed for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sympy&lt;/span&gt;&lt;/code&gt; to avoid
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt;. Added in 1.7.10 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Enhanced handling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PIL.ImageQt&lt;/span&gt;&lt;/code&gt; even without the Qt
binding plugins being active.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Do not automatically follow &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt;
as that is code that will only be used if other code using it exists
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt;
package. Availability checks of third-party packages should be
counted as real usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;keras&lt;/span&gt;&lt;/code&gt; module too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Updated for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; package, also using more
robust new form of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-auto-follow&lt;/span&gt;&lt;/code&gt; to achieve that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using Qt bindings for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas.io.clipboard&lt;/span&gt;&lt;/code&gt; as
it’s only useful if one of our Qt plugins is active.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;User Manual: Make it clear in the example that renaming created
extension modules to change their name does not work, such that the
user has to first rename the Python module properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Pronounce Homebrew as somewhat support but not recommended due
to its limited results for portability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added mnemonic for unsupported Windows store Python, so we have a
place to give more information. Read more on &lt;a class="reference external" href="https://nuitka.net/info/unsupported-windows-app-store-python.html"&gt;the info page&lt;/a&gt;
for detailed information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Disable warning for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; DLL non-identity
conflicts. These are very common unfortunately and known to be
harmless.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stop creating PDFs for release. They are not really needed, but cause
extra effort that makes no sense.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Updated to latest black which removes some leading new lines
in blocks, changing a bunch of files. Bumped development requirements
file Python version to 3.8, since black won’t do 3.7 anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Updated to latest PyLint, no changes from that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Auto-format the markdown files used for GitHub templates as
well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Catch errors during data composer phase cleaner. Added in
1.7.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: More clear error messages for Yaml files checker. Added in
1.7.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Avoid DNS lookup by container, these sometimes failed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Catch user error of compiling in module mode with unknown file
kinds, it needs to be Python code of course.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: In case of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; in main file, always suggest latest
supported version. Previous it was toggling between Python2 and
Python3, but that’s no longer the main reason this happens.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Fix typo in help output for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--trademarks&lt;/span&gt;&lt;/code&gt; option. Added in
1.7.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Fix, need to enforce version information completeness only on
Windows, other platforms can be more forgiving. Added in 1.7.8
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code: Enable black formatter as default for Python.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Disallow &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--follow-stdlib&lt;/span&gt;&lt;/code&gt; with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--standalone&lt;/span&gt;&lt;/code&gt; mode. This is
now the default, and just generally makes no sense anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Warn if Qt qml plugins are not included, but qml files are.
This has been a trap for first time users for a while now, that now
have a way of knowing that they need to enable that Qt plugin
feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Enhanced Qt binding plugins selection by the various qt
plugins&lt;/p&gt;
&lt;p&gt;Now can also ask to not include specified plugins with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--noinclude-qt-plugins&lt;/span&gt;&lt;/code&gt; and by now include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sensible&lt;/span&gt;&lt;/code&gt; by
default, with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-qt-plugins=qml&lt;/span&gt;&lt;/code&gt; line not replacing it,
but rather extending it. That makes it easier to handle and catches a
common trap, where users would only specify the missing plugin, but
remove required plugins like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;platform&lt;/span&gt;&lt;/code&gt; making it stop to work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Allow plugins provide &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; for flags not just by return
value length, but also an explicit value, so plugin code can make a
difference in a consistent way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Lets have the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;options-nanny&lt;/span&gt;&lt;/code&gt; output the failed condition, so
it’s more clear what the issue is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Unified spell checker markers to same form in all files
through auto-format for more consistency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Always avoid attempting to format executables, much like we
already do for bytecode, otherwise some attempts on them can crash.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Only change directory to short path during execution of
Scons, we are otherwise leaking it to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--run&lt;/span&gt;&lt;/code&gt; execution in tests,
giving their output comparison a harder time than necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Use report paths for outputs of filenames in slow compilation
messages as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WinPython: Adapted detection of this flavor to changes made in that
project.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Major Cleanup, do not treat technical modules special anymore&lt;/p&gt;
&lt;p&gt;Previously the immediate demotion of standard library to bytecode is
not really needed and prevented dependency analysis. We have had
plenty issues with that ever since not all stdlib modules were
automatic anymore, there was a risk of missing some of them, just
because this analysis was not done.&lt;/p&gt;
&lt;p&gt;Moved the import detection code to a dedicated module cleaning up the
size of the standalone mechanics, as it also is not exclusive to it.&lt;/p&gt;
&lt;p&gt;Adding “reasons” to modules, different from “decision reasons” why
something was allowed to be included, these give the technical reason
why something is added. This is needed for anti-bloat to be able to
ignore stdlib being added only for being frozen.&lt;/p&gt;
&lt;p&gt;Now we are correctly annotating why an extension module was included,
e.g. is it technical or not, that solves a TODO we had.&lt;/p&gt;
&lt;p&gt;Removes a lot of code duplication for reading source and bytecode of
modules and the separate handling of uncompiled modules as a category
in the module registry is no more necessary.&lt;/p&gt;
&lt;p&gt;The detection logic for technical modules itself was apparently not
robust and had bugs to be fixed that became visible now, and that
make it unclear how it ever worked as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refactor towards unification of statement and expression.&lt;/p&gt;
&lt;p&gt;Make sure Make existing statement operations, i.e. use the function
intended for them so they are immediately closer to what expressions
do, and don’t visit their own children themselves anymore.&lt;/p&gt;
&lt;p&gt;Remove checks for expression or statement, we won’t use that anymore,
and it’s only costing performance until we merge them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The caching (currently only used when demoting to bytecode), was not
keeping track of distributions attempted to be used, but then being
not found. That could have led to errors when using the cached
result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Again some more spelling fixes in code were identified and fixed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed now unused user provided flag from uncompiled module nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed 3.3 support from test runner as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid potential slur word from one of the tests.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Sometimes the pickle from cached CPython executions cannot be read
due to protocol version differences, then of course it’s also not
usable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added CPython311 test suite, but it is not yet completely integrated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: Salvage one test for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dateutil&lt;/span&gt;&lt;/code&gt; from a GSoC 2019 PR, we can
use that.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This is massive in terms of new features supported. The deployment mode
being added, provides us with a framework to make new user experience
with e.g. the missing data files, much more generous and help them by
pointing to the right solution.&lt;/p&gt;
&lt;p&gt;The technical debt of immediate bytecode demotion being removed, is huge
for reliability of Nuitka. We now really only have to deal with actual
hidden dependencies in stdlib, and not just ones caused by us trying to
exclude parts of it and missing internal dependencies.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-18.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2023-09-30T07:59:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/python311-full-support.html</id>
    <title>Python 3.11 and Nuitka full support</title>
    <updated>2023-08-01T00:00:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="python-3-11-and-nuitka-full-support"&gt;

&lt;p&gt;I kind of noticed, that I never really updated this post series to its
conclusion. Python 3.11 is now fully supported by Nuitka, that is the
TLDR. This has been the case since 1.6, and the 1.7 release improved on
it, and 1.8 well is around the corner, so it’s about time to state it
now in dedicated form.&lt;/p&gt;
&lt;p&gt;So, this post is kind of too late. My excuse is that well, there are
very exciting improvements in kind of all areas of Nuitka, and esp. even
recently, with long standing fixes for some memory leaks in 1.7 hot
fixes. These are usually very intense, adding new packages and fixing
old bugs usually, since there are usually very few regressions in
Nuitka.&lt;/p&gt;
&lt;section id="lessons-learned"&gt;
&lt;h2&gt;Lessons Learned&lt;/h2&gt;
&lt;p&gt;On thing I want to do better when 3.12 comes, is to be prepared for the
core changes, so work on 3.12 support has already started with the first
alpha, with Nuitka having a few commits (but not yet enough) to make it
work for basic compilation.&lt;/p&gt;
&lt;p&gt;It will be more of a priority to follow CPython closer. It seems core
changes are becoming more involved, and it’s better to not fall behind
too much. The delay in supporting 3.11 must have hurt Nuitka, since
bleeding edge users are also those reporting some import issues long
before commercial users of Nuitka even considering the environment.&lt;/p&gt;
&lt;p&gt;So, well, maybe what I will be aiming at for a new Nuitka release 1.8
e.g. is to support the current pre-release of CPython. But I also want
to make releases more time based, i.e. not delay new features, and
sometimes important improvements longer than necessary. We shall see how
it goes.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/python311-full-support.html"/>
    <summary>I kind of noticed, that I never really updated this post series to its
conclusion. Python 3.11 is now fully supported by Nuitka, that is the
TLDR. This has been the case since 1.6, and the 1.7 release improved on
it, and 1.8 well is around the corner, so it’s about time to state it
now in dedicated form.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2023-08-01T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-17.html</id>
    <title>Nuitka Release 1.7</title>
    <updated>2023-07-15T09:21:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-7"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There release is focused on adding plenty of new features in Nuitka,
with the new isolated mode for standalone being headliners, but there
are beginnings for including functions as not compiled, and really a lot
of new anti-bloat new features for improved handling, and improving user
interaction.&lt;/p&gt;
&lt;p&gt;Also many packages were improved specifically to use less unnecessary
stuff, some of which are commonly used. For some things, e.g. avoiding
tkinter, this got also down to polishing modules that have GUI plugins
to avoid those if another GUI toolkit is used.&lt;/p&gt;
&lt;p&gt;In terms of bug fixes, it’s also a lot, and macOS got again a lot of
improvements that solve issues in our dependency detection. But also a
long standing corruption for code generation of cell variables of
contractions in loops has finally been solved.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.11: The MSVC compiler for Windows will not work before 14.3
(Visual Studio 2022) if used in conjunction with Python 3.11, point
it out to the user an ignore older versions. Fixed in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pint&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.6.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing standard library dependency for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;statistics&lt;/span&gt;&lt;/code&gt;. Fixed in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; auto models were copying
invalid bytecode from compiled functions. Added workaround to use
compiled function &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.clone()&lt;/span&gt;&lt;/code&gt; method. Fixed in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy.optimize.cobyla&lt;/span&gt;&lt;/code&gt;
package. Fixed in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Detect Anaconda package from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;conda&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; vs. PyPI
package from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt;, the specifics should only be applied to
those. Adapted our configurations to make the difference. Fixed in
1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Do not search DLLs for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shapely&lt;/span&gt;&lt;/code&gt; versions. Fixed in
1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add new implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pycrytodome.ECC&lt;/span&gt;&lt;/code&gt;
module. Fixed in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tls_client&lt;/span&gt;&lt;/code&gt; for Linux by not non-Linux DLLs. Fixed
in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MacOS: When using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-app-name&lt;/span&gt;&lt;/code&gt;, the executable name of a
bundle could become wrong and prevent the launch of the program. Now
uses the actual executable name. Fixed in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multidist: The docs didn’t properly state the option name to use
which is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--main&lt;/span&gt;&lt;/code&gt; and also it didn’t show up in help output. Fixed
in 1.6.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;polars&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.6.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit imports for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;apscheduler&lt;/span&gt;&lt;/code&gt; triggers.
Fixed in 1.6.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add data files to AXML parser packages. Added in 1.6.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; nodes didn’t annotate their exception exit. Fixed in
1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;open_clip&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid data files warning with old &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pendulum&lt;/span&gt;&lt;/code&gt; package.
Fixed in 1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;faker&lt;/span&gt;&lt;/code&gt; module. Fixed
in 1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opentele&lt;/span&gt;&lt;/code&gt; exception raising trying to look at
the exception frame before its raised. Fixed in 1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka-Python: Do not check for unknown built-in modules. Fixed in
1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, the total &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; file number given could be wrong.
Ignored messages were counted still as compiled, leading to larger
sum of files than actually there was. Fixed in 1.6.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, multiprocessing resource tracker was not properly initialized.
On at least macOS this was causing it to work relatively badly,
because it could fail to actually use it. Fixed in 1.6.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cassandra-driver&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.6.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Have Python process suicide when bootstrap surprisingly
died, respecting the provided grace time for shutdown. Fixed in 1.6.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, package versions for at least Ubuntu packages can be
broken, such that at least &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; rejects them. Handle
that and use fallback to next version detection method. Fixed in
1.6.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Handle &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SIGTERM&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SIGQUIT&lt;/span&gt;&lt;/code&gt; just like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SIGINT&lt;/span&gt;&lt;/code&gt; on
non-Windows. The Python code with see &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;KeyboardInterrupt&lt;/span&gt;&lt;/code&gt; for all 3
signals, so it’s easier to implement. Previously onefile would exit
without cleanup being performed. Fixed in 1.6.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, need to add more implicit dependencies for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt; because we do no longer include e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;decimal&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;uuid&lt;/span&gt;&lt;/code&gt; automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;fiona&lt;/span&gt;&lt;/code&gt;
package. Added in 1.6.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rasterio&lt;/span&gt;&lt;/code&gt;
package. Added in 1.6.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, need to add more implicit dependencies for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt;. Added in 1.6.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the data composer used a signed value for encoding constant blob
sizes, limiting it needlessly to half the size possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid dependency on API not available on all versions,
specifically Windows 7 didn’t work anymore. With this, symlinks are
only resolved where they actually exist, and MinGW64 does it too now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.location&lt;/span&gt;&lt;/code&gt; attribute for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; distribution objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tsfresh&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, outline cell variables must be re-initialized on entry. The code
would be crashing for for outlines used in a loop, since the cleanup
code for these cell variables would release the cell that was created
during containing scope setup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygeos&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlalchemy&lt;/span&gt;&lt;/code&gt; implicit dependency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mnemonic&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, attribute checks could cause corruption when used on objects
that raise exceptions during &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__getattr__&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, wasn’t making sure instance attribute lookups were
actually only done with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; attributes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, need to allow versioned DLL dependency from un-versioned
DLLs packaged.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added DLLs for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rtree&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, our &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.testing&lt;/span&gt;&lt;/code&gt; replacement, was lacking a
function &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assert_array_almost_equal&lt;/span&gt;&lt;/code&gt; used in at least the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytransform3d&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=isolated&lt;/span&gt;&lt;/code&gt; mode. In this mode,
packages are not expandable via environment variable provided paths
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; is emptied which makes imports from the file system
not work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The options for forcing outputs were renamed to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--force-stdout-spec&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;force-stderr-spec&lt;/span&gt;&lt;/code&gt; to force output to
files and now work on non-Windows as well. They kind of were before,
but e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PROGRAM%&lt;/span&gt;&lt;/code&gt; was not implemented for all OSes yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Capturing of all outputs now extends beyond the Python level outputs
is now attempting to capture C level outputs as well. These can be
traces of Nuitka itself, but also messages from C libraries. On
Windows, with MinGW64 this does not work, and it still only captures
MinGW64, due to limitations of using different C run-times. With MSVC
it works for the compiled program and C, but DLLs can have their own
C runtime outputs that are still not caught.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new spec value &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PROGRAM_BASE%&lt;/span&gt;&lt;/code&gt; which will avoid the suffix
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.exe&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.bin&lt;/span&gt;&lt;/code&gt; of binaries that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PROGRAM%&lt;/span&gt;&lt;/code&gt; will still give.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added ability to query if a package in an Anaconda package
or not, with the new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is_conda_package()&lt;/span&gt;&lt;/code&gt; function in Nuitka
package configuration. Added in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Provide control tags during plugin startup with new
interface, such that these become globally visible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Allow to give &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-qt-plugins&lt;/span&gt;&lt;/code&gt; options of Qt binding
plugins to be given multiple times. This is for consistency with
other options. These now expand the list of plugins rather than
replacing it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental code to include functions decorated in certain
ways to be included as bytecode. Prepare the inclusion as source code
in a similar fashion. This was used to make example PyQt5 code work
properly with timers where it doesn’t normally work, but is still in
development before it will be generally useful. For that it reacts to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;pyqtSlot&lt;/span&gt;&lt;/code&gt; decorators.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Make anti-bloat not warn when bloating modules include their
group. This helps when e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distributed&lt;/span&gt;&lt;/code&gt; is going to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt;,
then we warn about &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distributed&lt;/span&gt;&lt;/code&gt;, but not anymore, when that then
uses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt;. And that intention to avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; is now in the
warning given for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distributed&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added ability to decide module inclusion based on using
module name and not only the used name. This will be super useful to
make some imports not count per se for inclusion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-auto-follow&lt;/span&gt;&lt;/code&gt; Yaml configuration for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt;, that makes imports from one module not automatically
included. That can make optional import removal much easier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added new function for when clauses, such that it now can be
tested if this Python version has a certain built-in name, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when:&lt;/span&gt; &lt;span class="pre"&gt;'not&lt;/span&gt; &lt;span class="pre"&gt;has_builtin_module(&amp;quot;_socket&amp;quot;)'&lt;/span&gt;&lt;/code&gt; will not apply
configuration &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_socket&lt;/span&gt;&lt;/code&gt; is an extension module rather than
built-in. This can be used to avoid unnecessary changes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Optimization: Better &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hasattr&lt;/span&gt;&lt;/code&gt; handling. Added ability for
generated expression base class to monitor the attribute name for
becoming constant and then calling a new abstract method due to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;auto_compute_handling&lt;/span&gt;&lt;/code&gt; saying &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wait_constant:name&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Added type shapes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setattr&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hasattr&lt;/span&gt;&lt;/code&gt;
built-ins as well as the attribute check node for better code
generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Added dedicated nodes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resources.files&lt;/span&gt;&lt;/code&gt;
to allow including the used package automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Include only platform DLLs for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tls_client&lt;/span&gt;&lt;/code&gt; rather than
all DLLs for all platforms. Added in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sympy.testing&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sympy&lt;/span&gt;&lt;/code&gt; package.
Added in 1.6.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package. Added in
1.6.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers.testing_util&lt;/span&gt;&lt;/code&gt; inclusion for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package as it will trigger &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; inclusion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Added missing method to our &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.testing&lt;/span&gt;&lt;/code&gt; stub, so it
can be used with more packages. Added in 1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numba&lt;/span&gt;&lt;/code&gt; usage from parts of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt;. Added in
1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;patsy&lt;/span&gt;&lt;/code&gt; more completely.
Added in 1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files needed for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pycountry&lt;/span&gt;&lt;/code&gt; package. Added
in 1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; package. Added in
1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;statsmodels&lt;/span&gt;&lt;/code&gt; package. Added
in 1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PIL.ImageQt&lt;/span&gt;&lt;/code&gt; when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-qt&lt;/span&gt;&lt;/code&gt; plugin is
used. Added in 1.6.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt;. We do not cover
bloat with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; allowed well yet, more like this should be added.
Added in 1.6.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distributed&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;fsspec&lt;/span&gt;&lt;/code&gt; package.
Added in 1.6.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;patsy&lt;/span&gt;&lt;/code&gt; package. Added in 1.6.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; in newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; as well. Added in
1.6.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkinter&lt;/span&gt;&lt;/code&gt; inclusion in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PIL&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt;
if another GUI plugin is active. This is using the control tags made
available by GUI plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid warning for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;unittest&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;mock&lt;/span&gt;&lt;/code&gt; imports.
These are common, and not considered actual usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt;
anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt;. This uses the new
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-auto-follow&lt;/span&gt;&lt;/code&gt; feature that will enable the optional integration
of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; if pandas is included by other means only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Better method of avoiding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;socket&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;email.utils&lt;/span&gt;&lt;/code&gt;.
With changing the source code to delay the import of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;socket&lt;/span&gt;&lt;/code&gt; to
the only function using it. Socket is now included only if used
elsewhere. These changes however, are only done if &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_socket&lt;/span&gt;&lt;/code&gt; if is
not a built-in module, because only then they really matters. And
using a simple &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module=socket&lt;/span&gt;&lt;/code&gt; will restore this. This
approach is more robust and less invasive.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;run-inside-nuitka-container&lt;/span&gt;&lt;/code&gt; for use in CI scripts. With
this, dependencies of package building and testing from correct
system installation should go away.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Add CI container for use with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;run-inside-nuitka-container&lt;/span&gt;&lt;/code&gt; to make Debian package releases. This
provides a more stable and flexible environment rather than building
through ansible maintained environments, since different branches can
more easily use different versions, or new features for the container
handling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Use upload tokens rather than PyPI password in uploads, and
secure the account with 2FA.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Avoid duplicate warnings for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; detected imports. In
case of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;unittest&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;mock&lt;/span&gt;&lt;/code&gt; there were 2 warnings given,
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest.mock&lt;/span&gt;&lt;/code&gt; but that is superfluous.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: More beginner friendly version of Apple Python standalone
error. They won’t know why it is, and where to get a working Python
version, so we explain more and added a download link.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Consider only 5 minutes slow for a module compilation in
backend. Many machines are busy or slow by nature, so don’t warn that
much.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: Actions no longer work (easily) with Python2, so we removed
those and need to test it elsewhere.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Output the filename of the XML node dump from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--xml&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--edit-module-code&lt;/span&gt;&lt;/code&gt; work with onefile outputs as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Allow yaml condition traceback to go through in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; mode, so exception causes are visible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Make more clear what is the forbidden module user, such that
it is possible to debug it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Inform user about slow linking, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto=no&lt;/span&gt;&lt;/code&gt; choice in case
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;auto&lt;/span&gt;&lt;/code&gt; was used. This should make this option more obvious for new
users that somehow victim of not defaulting to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no&lt;/span&gt;&lt;/code&gt;, but still
having a slow link.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Include PDBs for DLLs in unstripped mode already.
Previously this was only done for debug mode, but that’s a bit high
of a requirement, and we sometimes need to debug where things do not
happen in debug mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added typical problem with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;compiled_module&lt;/span&gt;&lt;/code&gt;
execution not working and why that is so.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Do not include PDF files in packages. These are probably not
used that much, but they cause issues at times, that are likely not
worth the effort.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved OS error reporting as done in onefile binary to common code for
easier reuse in plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved helper codes for expanding paths and for getting the path to
the running executable to file path common code for clearer code
structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x-bits&lt;/span&gt;&lt;/code&gt; from files that do not need them. For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt;
files, they are not needed, and for some files they were outright
wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.12: Avoid usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils.utils&lt;/span&gt;&lt;/code&gt; which were using to
disable bytecode compilation for things we expect to not work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Solve TODO and use more modern git command &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt; &lt;span class="pre"&gt;branch&lt;/span&gt;
&lt;span class="pre"&gt;--show-current&lt;/span&gt;&lt;/code&gt; to detect branch, our CI will have this for sure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In our Yaml configuration prefer the GUI toolkit control tags, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;use_pyside6&lt;/span&gt;&lt;/code&gt; over the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plugin(&amp;quot;pyside6&amp;quot;)&lt;/span&gt;&lt;/code&gt; method.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Release: Use CI container for linter checks, so different branches
can use different versions with less pain involved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Allow all system library frameworks to be used, not just a few
selected ones, there is many of them and they should all exist on
every system. Added in 1.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pendulum&lt;/span&gt;&lt;/code&gt; test actually useful to cover new and old
pendulum actually working properly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release really polished &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; to the point where we now
have all the tools needed. Also &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; in newest version is now
working nicely again with it, and a few rough edges of what we did with
1.6 for not including extension modules were removed. This polishing
will go on, but has reached really high levels. More and more people are
capable of helping with PRs here.&lt;/p&gt;
&lt;p&gt;The optimization work outside of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; was really minor, with
only the two attribute built-in nodes being worked on, and only
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hasattr&lt;/span&gt;&lt;/code&gt; seeing real improvements. However, this was more of a
structural thing. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wait_constant&lt;/span&gt;&lt;/code&gt; technique will not get applied
more often, but it also will need a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wait_all_constant&lt;/span&gt;&lt;/code&gt; companion,
before we can expect scalability improvements.&lt;/p&gt;
&lt;p&gt;Restoring Windows 7 is important to many people deploying to old
systems, and the like.&lt;/p&gt;
&lt;p&gt;However, in the coming release, we need to attack loop tracing. The only
bugs currently remaining are related to wrong tracing of items, and it
also is a limitation for hard imports to work. So scalability from doing
more of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wait_constant&lt;/span&gt;&lt;/code&gt; work, and from more clever loop tracing
shall be the focus of the 1.8 release.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-17.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2023-07-15T09:21:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/next-nuitka-live-stream-29-06-2023.html</id>
    <title>Next Nuitka Live Stream</title>
    <updated>2023-06-28T00:00:00+01:00</updated>
    <content type="html">&lt;section id="next-nuitka-live-stream"&gt;

&lt;p&gt;Tomorrow, Thursday 30.06.2023, there will be the forth live stream of me
coding on Nuitka, and talking and chatting with visitors in the Discord
channel created specifically for this. I will go from 11-14 CEST and
potentially in the evening, maybe 18-20 CEST as well, but it seems I
tend to go overtime.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="last-time"&gt;
&lt;h1&gt;Last time&lt;/h1&gt;
&lt;p&gt;So, with me starting to stream last year, then I went all in on Nuitka
with the commercial offering, and suddenly, there was a lot of things to
do, while at the same time, the 3.11 support was harder than ever before
to add for a new minor version of Python.&lt;/p&gt;
&lt;p&gt;So the last four streams are on my Youtube, these are around 4h videos,
always done two on the same day. Lets see how long I last this time.&lt;/p&gt;
&lt;p&gt;I honestly forgot where I was last time, but I know that I started a
kind of optimization, where iteration over randomly accessible types,
gets converted to integer lookups, avoiding an iterator creation and
release.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="this-time"&gt;
&lt;h1&gt;This time&lt;/h1&gt;
&lt;p&gt;That unfinished optimization, as far as I recall, with automatically
unlock optimization in terms of standard library parts becoming smaller,
and probably should be on the radar if only because of that.&lt;/p&gt;
&lt;p&gt;It may only lack the releases to be converted to something, I will need
to check though.&lt;/p&gt;
&lt;p&gt;I have been tagging issues with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;stream&lt;/span&gt;&lt;/code&gt; tag too, so maybe that is
also something to look at.&lt;/p&gt;
&lt;p&gt;Not sure yet, what to do. I will definitely start with a quick look at
what new toys there are in Nuitka, esp. the Yaml stuff is very nice.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-to-join"&gt;
&lt;h1&gt;How to Join&lt;/h1&gt;
&lt;p&gt;There is a &lt;a class="reference external" href="/pages/Streaming.html"&gt;dedicated page on the web site&lt;/a&gt;
which has the details. Spoiler, it’s free and I have no plans for
anything that involves a subscription of any kind. Of course, talking of
subscription, do also checkout the &lt;a class="reference external" href="/doc/commercial.html"&gt;Nuitka commercial&lt;/a&gt; offering. That is a subscription with adds that
protect your IP even more than regular Nuitka.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="join-me"&gt;
&lt;h1&gt;Join me&lt;/h1&gt;
&lt;p&gt;Come and join me there. &lt;a class="reference external" href="/pages/Streaming.html"&gt;Instructions&lt;/a&gt; here.
You know you want to do it. I know I want you to do to it!&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/next-nuitka-live-stream-29-06-2023.html"/>
    <summary>Tomorrow, Thursday 30.06.2023, there will be the forth live stream of me
coding on Nuitka, and talking and chatting with visitors in the Discord
channel created specifically for this. I will go from 11-14 CEST and
potentially in the evening, maybe 18-20 CEST as well, but it seems I
tend to go overtime.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="stream" label="stream"/>
    <published>2023-06-28T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-16.html</id>
    <title>Nuitka Release 1.6</title>
    <updated>2023-06-09T15:41:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-6"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release bumps the much awaited 3.11 support to full level. This
means Nuitka is now expected to behave identical to CPython3.11 for the
largest part.&lt;/p&gt;
&lt;p&gt;There is plenty of new features in Nuitka, e.g. a new testing approach
with reproducible compilation reports, support for including the
metadata if an distribution, and more.&lt;/p&gt;
&lt;p&gt;In terms of bug fixes, it’s also huge, and esp. macOS got a lot of
improvements that solve issues with prominent packages in our dependency
detection. And then for PySide we found a corruption issue, that got
workarounds.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The new dict &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; optimization was compile time crashing on code
where the dictionary shaped value checked for a key was actually an
conditional expression&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Was crashing&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;some_dict&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;other_dict&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Fixed in 1.5.1 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;openvino&lt;/span&gt;&lt;/code&gt;. This also required to
make sure to keep used DLLs and their dependencies in the same
folder. Before they were put on the top level. Fixed in 1.5.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android: Convert &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RPATH&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RUNPATH&lt;/span&gt;&lt;/code&gt; such that standalone
binaries need no &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;/code&gt; guidance anymore. Fixed in 1.5.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt;. Fixed in 1.5.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, new data file type &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.json&lt;/span&gt;&lt;/code&gt; needed to be added to
the list of extensions used for the Qt plugin bindings. Fixed in
1.5.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka_types_patch&lt;/span&gt;&lt;/code&gt; module using during
startup was released, which can have bad effects. Fixed in 1.5.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android: More reliable detection of the Android based Python Flavor.
Fixed in 1.5.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytorch_lightning&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lightning_fabric&lt;/span&gt;&lt;/code&gt; packages. Added in 1.5.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, the preservation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; didn’t work on systems
where this could lead to encoding issues due to reading a MBCS value
and writing it as a unicode string. We now read and write the
environment value as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; both. Fixed in 1.5.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, the scons report values were not available in case of
removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--remove-output&lt;/span&gt;&lt;/code&gt; deleting it before use. It is now read in
case if will be used. Fixed in 1.5.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ExceptionGroup&lt;/span&gt;&lt;/code&gt; built-in type. Fixed
in 1.5.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; in a virtualenv and not from conda
package was crashing. Fixed in 1.5.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;. Due to the anti-bloat
work, we didn’t notice that if that was not sufficiently usable, the
compiled result was not usable. Fixed in 1.5.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Added support for pyproject with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;src&lt;/span&gt;&lt;/code&gt; folders. This
supports now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tool.setuptools.packages.find&lt;/span&gt;&lt;/code&gt; with a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;where&lt;/span&gt;&lt;/code&gt; value
with pyproject files, where it typically is used like this:&lt;/p&gt;
&lt;div class="highlight-toml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[tool.setuptools.packages.find]&lt;/span&gt;
&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;src&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-run&lt;/span&gt;&lt;/code&gt; batch file was not working. Fixed in
1.5.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pymoo&lt;/span&gt;&lt;/code&gt; implicit dependencies. Fixed in 1.5.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Avoid deprecated API, this should fix newer Xcode being used.
Fixed in 1.5.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; in spawn mode didn’t handle relative
paths that become invalid after process start. Fixed in 1.5.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, spec &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%CACHE_DIR%&lt;/span&gt;&lt;/code&gt; was not given the correct folder on
non-Windows. Fixed in 1.5.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, special float values like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nan&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inf&lt;/span&gt;&lt;/code&gt; didn’t properly
generate code for C values. Fixed in 1.5.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add missing DLL for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;onnxruntime&lt;/span&gt;&lt;/code&gt; on Linux too. Fixed
in 1.5.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Fix, illegal python flags value could enable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; mode. by
mistake and were not caught. Fixed in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, user names with spaces failed with MinGW64 during
linking. Fixed in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Fix, was not excluding all libraries from glibc, which could
cause crashes on newer systems. Fixed in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, could still pickup SxS libraries distributed by other
software when found in PATH. Fixed in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, do not use cache DLL dependencies if one the files
listed there went missing. Fixed in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Reject path spec that points to a system folder. We do not
want to delete those when cleaning up clearly. Added in 1.5.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; was broken by code object changes.
Fixed in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;networkx&lt;/span&gt;&lt;/code&gt; decorator issues. Fixed
in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added workaround for PySide6 problem with disconnecting
signals from methods. Fixed in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added workaround for PySide2 problem with disconnecting
signals.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to make sure the yaml package is located absolutely or else
case insensitive file systems can confuse things. Fixed in 1.5.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, extra scan paths were not considered in caching of
module imports, breaking the feature in many cases. Fixed in 1.5.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, avoid system installed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;appdirs&lt;/span&gt;&lt;/code&gt; package as it is
frequently broken. Fixed in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The bytecode cache check needs to handle re-checking
relative imports found in the cache better. Otherwise some standard
library modules were always recompiled due to apparent import
changes. Fixed in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka-Python: Fix, do not insist on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONHOME&lt;/span&gt;&lt;/code&gt; making it to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.environ&lt;/span&gt;&lt;/code&gt; in order to delete it again. Fixed in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka-Python: Allow builtin modules of all names. This is of course
what it does. Fixed in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka-Python: Ignore empty extension module suffix. Was confusing
Nuitka to consider every file an extension module potentially. Fixed
in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Properly merge code coming from distinct plugins. The
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__future__&lt;/span&gt;&lt;/code&gt; imports need to be moved to the start. Added in 1.5.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opentele&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.5.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyarrow&lt;/span&gt;&lt;/code&gt; usage.
Fixed in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency for PySide6. Fixed in
1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the pyi-file parser didn’t handle doc strings, and could be
crash for comment contents not conforming to be import statement
code. Fixed in 1.5.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyqtlet2&lt;/span&gt;&lt;/code&gt; data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PermissionError&lt;/span&gt;&lt;/code&gt; doesn’t exist on that version,
which could lead to issues with retries for locked files e.g. but was
also observed with symlinks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Recognize the error given by with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;upx&lt;/span&gt;&lt;/code&gt; if a file is
already compressed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, so called “fixed” imports were not properly tracking their use,
such that they then didn’t show up in reports, and didn’t cause
dependencies on the module, which could e.g. impact &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib&lt;/span&gt;&lt;/code&gt; to
not be included even if still being used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, retries for payload attachment were crashing when
maximum number of retries were reached. Using the common code for
retries solves that, since that code handles it just fine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;av&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Fix, should build from files in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;build&lt;/span&gt;&lt;/code&gt; folder rather
than &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;source&lt;/span&gt;&lt;/code&gt; files. This allows tools like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;versioneer&lt;/span&gt;&lt;/code&gt; that
integrate with setuptools to do their thing, and get the result of
that to compilation rather than the original source files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Equation&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows/macOS: Avoid problems with case insensitive file systems. The
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.Constants&lt;/span&gt;&lt;/code&gt; module and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.constants&lt;/span&gt;&lt;/code&gt; package could
collide, so we now avoid that package, there was only what is now
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.Serialization&lt;/span&gt;&lt;/code&gt; in there anyway. Also similar problem with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.utils.Json&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;json&lt;/span&gt;&lt;/code&gt; standard library module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;transformers&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5&lt;/span&gt;&lt;/code&gt; which needs a directory to exist.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, was crashing with PyQt6 in standalone mode when trying to
register plugins to non-default path. We now try to skip the need,
which also makes it work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, recursion error for complex code that doesn’t happen in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ast&lt;/span&gt;&lt;/code&gt;
module, but during conversion of the node tree it gives to our own
tree, were not handled, and crashed with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RecursionError&lt;/span&gt;&lt;/code&gt;. This is
now also handled, just like the error from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ast&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlfluff&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for PySide 6.5 on macOS solving DLL
dependency issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Recognize more &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; outputs properly, their logging
changed and provided irrelevant states, and ones not associated so
far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Fix, could do random exit codes when failing to fork for
whatever reason.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pysnmp&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torchaudio&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; on
macOS. These contain broken DLL dependencies as relative paths, that
are apparently ignored by macOS, so we do that too now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Use actual rather than guessed standalone binary name for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; spawns. Without this, a renamed onefile binary,
didn’t work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, side effect nodes, that are typically created when an expression
raises, were use in optimization contexts, where they do not work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sentence_transformers&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, added missing dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;platform&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Support for Python 3.11 is finally there. This took very long,
because there were way more core changes than with previous releases.
Nuitka integrates close to that core, and is as such very affected by
this. Also a lot of missed opportunities to improve 3.7 or higher,
3.9 or higher, and 3.10 or higher were implemented right away, as
they were discovered on the way. Those had core changes not yet taken
advantage of and as a result got faster with Nuitka too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--report-diffable&lt;/span&gt;&lt;/code&gt; to make the XML report
created with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--report&lt;/span&gt;&lt;/code&gt; become usable for comparison across
different machine installations, users compiling, etc. so it can be
used to compare versions of Nuitka and versions of packages being
compiled for changes. Also avoid short names in reports, and resolve
them back to long names, so they become more portable too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added option to provide custom data from the user. We use it
in out testing to record the pipenv state used with things like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--report-user-provided=pipenv-lock-hash=64a5e4&lt;/span&gt;&lt;/code&gt; with this data
ending up inside of reports, where tools like the new testing tool
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-watch&lt;/span&gt;&lt;/code&gt; can use it to decide if upstream packages changed or
not. These are free form, just needs to fit XML rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;include-pyi-file&lt;/span&gt;&lt;/code&gt; flag to data-files section. If
provided, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; file belonging to a specific module is
included. Some packages, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt; depend at runtime on them.
For data file options and configuration, these files are excluded,
but this is now the way to force their inclusion. Added in 1.5.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for including distribution metadata with
new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-distribution-metadata&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This allows generic walks over distributions and their entry points
to succeed, as well as version checks with the metadata packages that
are not compile time optimized.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Handle extension modules in build tasks. Also recognize if
we built it ourselves, in which case we remove it for rebuild. Added
in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Detect DLL like filenames that are Python extension modules,
and ignore them when listing DLLs of a package with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--list-package-dlls&lt;/span&gt;&lt;/code&gt; option. So far, this was a manual task to
figure out actual DLLs. This will of course improve the Yaml package
configuration tooling .&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Allow forcing to use no compression for the onefile payload,
useful for debugging, to avoid long compression times and for test
coverage of the rare case of not compressing if the bootstrap handles
that correctly too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Need to resolve symlinks that were used to call the application
binary in some places on macOS at least. We therefore implemented the
previously experimental and Windows only feature for all platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support including symlinks on non-Windows in
standalone distribution, if they still point to a path that is inside
the distribution. This can save a bunch of disk space used for some
packages that e.g. distribute DLL links on Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Added support for including symlinks from the standalone
distribution as such on non-Windows. Previously they were resolved to
complete copies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Respect code suffixes in package data patterns. With this e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data=package_name:*.py&lt;/span&gt;&lt;/code&gt; is doing what you say,
even if of course, that might not be working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--edit-module-code&lt;/span&gt;&lt;/code&gt; option.&lt;/p&gt;
&lt;p&gt;To avoid manually locating code to open it in Visual Code replaced
old &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;find-module&lt;/span&gt;&lt;/code&gt; helper to be a main Nuitka option, where it is
more accessible. This also goes beyond it it, such that it resolves
standalone file paths to module names to make debugging easier, and
that it opens the file right away.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for handling missing DLLs. Needed for macOS
PySide6.5.0 from PyPI, which contains DLL references that are broken.
With this feature, we can exclude DLLs that wouldn’t work anyway.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;huggingface_hub&lt;/span&gt;&lt;/code&gt; package
versions. Added in 1.5.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tokenizers&lt;/span&gt;&lt;/code&gt; module. Added
in 1.5.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for module type as a constant value. We want to add all
types we have shapes for to allow better &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type(x)&lt;/span&gt;&lt;/code&gt; optimization.
This is only the start.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: During payload unpacking the memory mapped data was copied
to an input buffer. Removing that avoids memory copying and reduces
usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Avoid repeated directory creations. Without it, the
bootstrap was creating already existing directories up to the root
over and over, making many unnecessary file system checks. Added in
1.5.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;trio&lt;/span&gt;&lt;/code&gt; package. Added in
1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Use resource for payload on Win32 rather than overlay. This
integrates better with signatures, removing the need to check for
original file size. Changed in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Avoid using zstd input buffer, but using the memory mapped
contents directly avoiding to copy uncompressed payload data. Changed
in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Avoid double slashes in expanded onefile temp spec paths,
they are just ugly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; for some
packages used by newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt;. Added in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;triton&lt;/span&gt;&lt;/code&gt; to use setuptools. Added in 1.5.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; in newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;networkx&lt;/span&gt;&lt;/code&gt; package. Added in
1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prepare optimization for more built-in types with experimental code,
but we need to disable it for now as it requires more completeness in
code generation to cover them all. We did some, e.g. module type, but
many more will be missing still.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prepare optimization of class selection at compile time, by having a
helper function rather than a dedicated node. This work is not
complete though, and cannot be activated yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Cache short path name resolutions. Esp. for reporting, we
now do a lot more of these than before, and this avoids they can
become too time consuming.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster constant value handling for float value checks by avoiding
module lookups per value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minimize size for hello world distribution such that no unused
extension modules are included, by excluding even more modules and
using modules from automatic inclusion of standard library.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Catch &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; namespaces &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;py&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_pytest&lt;/span&gt;&lt;/code&gt;
sooner, to point to the actual uses more directly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doctest&lt;/span&gt;&lt;/code&gt; equals usage of “unittest” so cover
it too, to point to the actual uses more directly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ever more spelling fixes in code and tests were identified and fixed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure side effect nodes indicate properly that they are raising,
allowing exceptions to fully bubble up. This should lead to more dead
code being recognized as such.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;GitHub: Added marketplace action designed to cross platform build
with Nuitka on GitHub directly. Usable with both standard and
commercial Nuitka versions, and pronouncing it as officially
supported.&lt;/p&gt;
&lt;p&gt;Check out out at &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka-Action"&gt;Nuitka-Action&lt;/a&gt; repository.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: When MSVC doesn’t have WindowsSDK, just don’t use it, and
proceed, to e.g. allow fallback to WinLibs gcc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: The code to update benchmark numbers as giving was
actually wrong. Fixed in 1.5.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Make it clear that partially supported versions are considered
experimental, not unsupported. Fixed in 1.5.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Do not list deprecated plugins with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plugin-list&lt;/span&gt;&lt;/code&gt;, they do
not have any effect, but listing them, makes people use them still.
Fixed in 1.5.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Make sure all plugins have descriptions. Some didn’t have
any yet, and sometimes the wording was improved. Fixed in 1.5.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Accept &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;y&lt;/span&gt;&lt;/code&gt; as a shortcut for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yes&lt;/span&gt;&lt;/code&gt; in prompts. Added in 1.5.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Make sure the DLL dependencies for Linux are in a stable
order. Added in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Check for latest fixes in PySide6. Added in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows XP: For Python3.4 make using Python2 scons work again, we
cannot have 3.5 or higher there. Added in 1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Updated to latest PyLint. With Python 3.11 the older one,
was not really working, and it was about time. Due to its many
changes, we included it in the hotfix, so those can still be done.
Changed in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Avoid broken &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requires.txt&lt;/span&gt;&lt;/code&gt; in source distribution. This
apparently breaks poetry. Changed in 1.5.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: Enhanced issue template for more clarity, esp. to avoid
unnecessary options, e.g. using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile&lt;/span&gt;&lt;/code&gt; for issues that show up
with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--standalone&lt;/span&gt;&lt;/code&gt; already, to report factory branch issues rather
on Discord, and give a quick tip for a likely reproducer if a package
fails to import.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added instructions on how to add a DLL or executable to
a standalone distribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Example paths in the table for path specs, meant for
Windows were not properly escaping the backslashes and therefore
rendered incorrectly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code: Python3.11 is now the default configuration for C code
editing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Developer Manual: Updated descriptions for adding test suite. While
added the Python 3.11 test suite, these instructions were further
improved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Make it easier to fully deactivate free lists. Now only
need to set max size to 0 and the free list will not be used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Added more assertions, added corrections to feature
disables, check args after function calls for validity, check more
types to be as expected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Enhanced plugin error messages generally, with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt;
exceptions become warning messages with the original exception being
raised instead, making debugging during development much easier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Make it clear what not using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; actually means. Not
everybody is familiar with the design of Nuitka there or what the
tool can actually do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Do not warn about not found distributions but merely inform of
them.&lt;/p&gt;
&lt;p&gt;Since Nuitka is fully compatible with these, no need to consider
those a warning, for some packages they also are given really a lot.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Catch user error of wrong cases plugin names&lt;/p&gt;
&lt;p&gt;This now points out the proper name rather than denying the existence
outright. We do not want to accept wrong case names silently.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Use proper API for setting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyConfig&lt;/span&gt;&lt;/code&gt; values during interpreter
initialization. There is otherwise always the risk of crashes, should
these values change during runtime. Fixed in 1.5.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For our reformulations have a helper function that build release
statements for multiple variables at once. This removed a bunch of
repetitve code from re-formulations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move the pyi-file parser code out of the module nodes and to source
handling, where it is more closely related.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Adding a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-watch&lt;/span&gt;&lt;/code&gt; tool, which is still experimental and for
use with the &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka-Watch"&gt;Nuitka-Watch&lt;/a&gt; repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refined macOS standalone exceptions further to cover more normal
usages of files on that OS and for frameworks that applications
typically use from the system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect and consider onefile mode if given in project options as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Was not really applying import check in programs tests. Added in
1.5.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added coverage of testing the signing of Windows binaries with the
commercial plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added coverage of version information to hello world onefile test, so
we can use it for Virus tools checks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added tests to cover PyQt6 and PySide6 plugin availability, we so far
only had that for PyQt5, which is of course not relevant, and totally
different code anyway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanup distutils tests case to use common test case scanning. We now
decide version skips based on names, and had to get away from number
suffixes, so they are now in the middle.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The class bodies optimization has made some progress in this release,
going to a re-formulation of the metaclass selection, so as to allow its
future optimization. We are not yet at “compiled objects”, but this is a
promising road. We need to make some optimization improvements for
inlining constant value calls, then this can become really important,
but by itself these changes do not yield a lot of improvement.&lt;/p&gt;
&lt;p&gt;For macOS again a bunch of time was spent to improve and complete the
detection of DLL dependencies. More corner cases are covered now and
more packages just work fine as a result.&lt;/p&gt;
&lt;p&gt;The most important is to become Python3.11 compatible, even if attribute
lookups, and other things, and not yet optimized. We will get to that in
future releases. For now, compatibility is the first step to take.&lt;/p&gt;
&lt;p&gt;For GitHub users, the Nuitka-Action will be interesting. But it’s still
in develop. We keep adding missing options of Nuitka for a while it
seems, but for most people it should be usable already.&lt;/p&gt;
&lt;p&gt;The new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-watch&lt;/span&gt;&lt;/code&gt; ability, should allow us to detect breaking
PyPI releases, that need a new tweak in Nuitka sooner. But it will
probably grow in the coming releases to full value only. For now the
tool itself is not yet finished.&lt;/p&gt;
&lt;p&gt;From here, a few open ends in the CPython 3.11 test suite will have to
be addressed, and maybe some of the performance tricks that it now will
enable, e.g. with repeated attribute lookups.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-16.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2023-06-09T15:41:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-15.html</id>
    <title>Nuitka Release 1.5</title>
    <updated>2023-03-26T19:38:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-5"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains the long awaited 3.11 support, even if only on an
experimental level. This means where 3.10 code is used, it is expected
to work equally well, but the Python 3.11 specific new features have yet
been done.&lt;/p&gt;
&lt;p&gt;There is plenty of new features in Nuitka, e.g. much enhanced reports,
Windows ARM native compilation support, and the usual slew of anti-bloat
updates, and newly supported packages.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;charset_normalizer&lt;/span&gt;&lt;/code&gt;
package. Fixed in 1.4.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added platform DLLs for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sounddevice&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.4.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The info from Qt bindings about other Qt bindings being
suppressed for import, was spawning multiple lines, breaking tests.
Merged to a single line until we do text wrap for info messages as
well. Fixed in 1.4.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;removeDllDependencies&lt;/span&gt;&lt;/code&gt; was broken and could not
longer be used to remove DLLs from inclusion. Fixed in 1.4.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, assigning methods of lists and calling them that way could crash
at runtime. The same was true of dict methods, but had never been
observed. Fixed in 1.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added DLL dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;onnxruntime&lt;/span&gt;&lt;/code&gt;. Fixed in
1.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;textual&lt;/span&gt;&lt;/code&gt; package.
Fixed in 1.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, boolean tests of lists could be optimized to wrong result when
list methods got recognized, due to not annotating the escape during
that pass properly. Fixed in 1.4.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;apsw&lt;/span&gt;&lt;/code&gt;. Fixed in
1.4.3 already.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Currently &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;apsw&lt;/span&gt;&lt;/code&gt; only works with manual workarounds and only in
limited ways, there is an import level incompatible with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__&lt;/span&gt;&lt;/code&gt; being an extension module, that Nuitka does not yet
handle.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, for range arguments that fail to divide there
difference, the code would have crashed. Fixed in 1.4.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; with
another vendored package. Fixed in 1.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shapely&lt;/span&gt;&lt;/code&gt; 2.0 versions.
Fixed in 1.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, some yaml package configurations with DLLs by code
didn’t work anymore, notably old &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shapely&lt;/span&gt;&lt;/code&gt; 1.7.x versions were
affected. Fixed in 1.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, for onefile final result the “–output-dir” option was ignored.
Fixed in 1.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mozilla-ca&lt;/span&gt;&lt;/code&gt; package data file. Fixed in 1.4.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, added missing implicit dependency for newer
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gevent&lt;/span&gt;&lt;/code&gt;. Fixed in 1.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Accept an installed Python 3.11 for Scons execution as well.
Fixed in 1.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7: Some &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resource&lt;/span&gt;&lt;/code&gt; nodes asserted against use in
3.7, expecting it to be 3.8 or higher, but this interface is present
in 3.7 already. Fixed in 1.4.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, Python DLLs installed to the Windows system folder
were not included, causing the result to be not portable. Fixed in
1.4.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metadata.resources&lt;/span&gt;&lt;/code&gt; files method &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joinpath&lt;/span&gt;&lt;/code&gt; is
some contexts is expected to accept variable number of arguments.
Fixed in 1.4.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;customtkinter&lt;/span&gt;&lt;/code&gt; data files on
non-Windows. Fixed in 1.4.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;overrides&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.4.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;strawberry&lt;/span&gt;&lt;/code&gt; package. Fixed in
1.4.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, anti-bloat plugin caused crashes when attempting to warn about
packages coming from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; by the user. Fixed in
1.4.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, main program filenames with an extra dot apart from the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.py&lt;/span&gt;&lt;/code&gt; suffix, had the part beyond that wrongly trimmed. Fixed in
1.4.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, list methods didn’t properly annotated value escape during their
optimization, which could lead to wrong optimization for boolean
tests. Fixed in 1.4.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imagej&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scyjava&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jpype&lt;/span&gt;&lt;/code&gt;
packages. Fixed in 1.4.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; on extension module names was not
working. Fixed in 1.4.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow.keras&lt;/span&gt;&lt;/code&gt; namespace as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Fix namespace packages were not including their contained
modules properly with regards to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; properties, making
relative file access impossible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: On Windows the onefile binary did lock itself, which could
fail with certain types of AV software. This is now avoided.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accessing files using the top level &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metadata.resources&lt;/span&gt;&lt;/code&gt; files
object was not working properly, this is now supported too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: Make sure mixing POSIX and Windows slashes causes no issues by
hard-coding the onefile archive to use the subsystem slash rather
than what MSYS prefers to use internally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependencies of newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imageio&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, side effect nodes didn’t annotate their non-exception raising
nature properly, if that was the case.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Python 3.11, for 3.10 language level
code it should be fully usable, but the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CPython311&lt;/span&gt;&lt;/code&gt; test suite has
not even been started to check newly added or changed features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Support for native Python on Windows ARM64, which needs 3.11
or higher, but standalone and therefore onefile do not yet work, due
to lack of any form of binary dependency analysis tool.&lt;/p&gt;
&lt;p&gt;This platform is relatively new in Python and generally. For the time
being standalone and onefile should be done with Intel based Python,
they would also be ARM64 only, whereas 32/64 Bit binaries can be run
on all Windows ARM platforms.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Write compilation report even in case of Nuitka being
interrupted or crashing. This then includes the exception, and a
status like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;completed&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;interrupted&lt;/span&gt;&lt;/code&gt;. At this time this
happens only when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--report=&lt;/span&gt;&lt;/code&gt; was specified, but in the future we
will likely write one in case of Nuitka crashes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Now the details of the used Python version, its flavor, the
OS and the architecture are included. This is crucial information for
analysis and can make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output unnecessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: License reports now handle &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UNKNOWN&lt;/span&gt;&lt;/code&gt; license by falling
back to checking the classifiers, and therefore include the correct
license e.g. with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;. Also in case no license text is
found, do not create an empty block. Added in 1.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: In case the distribution name and the contained package
names differ, output the list of packages included from a
distribution. Added in 1.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Include data file sizes in report. Added in 1.4.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Include memory usage into the compilation report as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Add support for downloading &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; on arm64 (M1/M2) too.
Added in 1.4.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Allow &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--output-filename&lt;/span&gt;&lt;/code&gt; for standalone mode again. Added in
1.4.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Improved isolation with Python 3.8 or higher. Using new
init mechanisms of Python, we now achieve that the scan for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyvenv.cfg&lt;/span&gt;&lt;/code&gt; on in current directory and above is not done, using
it will be unwanted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Expose &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__loader__&lt;/span&gt;&lt;/code&gt; for modules and register with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; too which expects these to be present for custom
resource handling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metadata.resources&lt;/span&gt;&lt;/code&gt; files objects method
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iterdir&lt;/span&gt;&lt;/code&gt; was not implemented yet. Fixed in 1.4.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metadata.resources&lt;/span&gt;&lt;/code&gt; files objects method
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;absolute&lt;/span&gt;&lt;/code&gt; was not implemented yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental ability to create virtualenv from an existing
compilation report with new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--create-environment-from-report&lt;/span&gt;&lt;/code&gt;
option. It attempts to create a requirements file with the used
packages and their versions. However, sometimes it seems not to be
possible to due to conflicts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Onefile: Use memory mapping for calculating the checksum of files on
all platforms. This is faster and simpler code. So far it had only be
done this way on Windows, but other platforms also benefit a lot from
it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Use memory mapping for accessing the payload rather than
file operations. This avoids differences to macOS payload handling
and is much faster too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Newer versions of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joblib&lt;/span&gt;&lt;/code&gt; do not currently work yet due to
their own form of multiprocessing spawn not being supported yet.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Adapt for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove more &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPython&lt;/span&gt;&lt;/code&gt; usages in newer tensorflow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use dedicated class bodies for Python2 and Python3, with the former
has a static dict type shape, and with Python3 this needs to be
traced in order to tell what the meta class put in there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compile time optimize dict &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict.has_key&lt;/span&gt;&lt;/code&gt;
operations statically where the keys of a dict are known. As a
result, the class declarations of Python3 no longer created code for
both branches, the one with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metaclass&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt;&lt;/code&gt; in the class declaration
and without. That means also a big scalability improvement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the Python3 class bodies, the usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals()&lt;/span&gt;&lt;/code&gt; was not
recognized as not locally escaping all the variables, leading to
variable traces where each class variable was marked as escaped for
no good reason.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict.fromkeys&lt;/span&gt;&lt;/code&gt; method, making the code
generation understand and handle static methods as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.listdir&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.basename&lt;/span&gt;&lt;/code&gt;. Added in
1.4.5 already for use in implementing the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iterdir&lt;/span&gt;&lt;/code&gt; method, but
they are also now optimized by themselves.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for trusted constant values of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os&lt;/span&gt;&lt;/code&gt; module. These
are &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;curdir&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pardir&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sep&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;extsep&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;altsep&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pathsep&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;linesep&lt;/span&gt;&lt;/code&gt; which may enable some minor compile time
optimization to happen and completes this aspect of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os&lt;/span&gt;&lt;/code&gt;
module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;digit&lt;/span&gt;&lt;/code&gt; size checks during &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; code generation for
better compile time performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; operations due to using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyList_CheckExact&lt;/span&gt;&lt;/code&gt;
everywhere this is applicable, this mostly makes debug operations
faster, but also deep copying list values, or extending lists with
iterables, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Collect module usages of the given module during its
abstract execution. This avoids a full tree visit afterwards only to
find them. It is much cheaper to collect them while we go over the
tree. This enhances the scalability of large compilations by ca. 5%.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Faster determination of loop variables. Rather than
using a generic visitor, we use the children having generator codes
to add traversal code that emits relevant variables to the user
directly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cache extra search paths in order to avoid repeated directory
operations as these are known to be slow at times.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;py.typed&lt;/span&gt;&lt;/code&gt; data files, these indicator
files are for IDEs, but not needed at run time ever.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure that the generic attribute code optimization is also
effective in cases where a Python DLL is used. Previously this was
only guaranteed to be used with static libpython.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster list constant usage&lt;/p&gt;
&lt;p&gt;Small immutable constants get their own code that is much faster for
small sizes.&lt;/p&gt;
&lt;p&gt;Medium sized lists get code that just is hinted the size, but takes
items from a source list, still a lot faster.&lt;/p&gt;
&lt;p&gt;For repeated lists where all elements are the same, we use a
dedicated helper for all sizes, that is even faster except for small
ones with LTO enabled, where the C compiler may already do that
effectively.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.abspath&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.isabs&lt;/span&gt;&lt;/code&gt;
which of course have not as much potential for compile time
optimization, but we needed them for providing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.absolute()&lt;/span&gt;&lt;/code&gt; for
the meta path loader files implementation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster class dictionary propagation decision. Instead of checking for
trace types, let the trace object decide. Also abort immediately on
first inhibit, rather than checking all variables. This improves
Python2 compile time, and Python3 where this code is now starting to
get used when the class dictionary is shown to have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; type.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specialize type method &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__prepare__&lt;/span&gt;&lt;/code&gt; which is used in the Python3
re-formation of class bodies to initialize the class dictionary.
Where the metaclass is resolved, we can use this to decide that the
standard empty dictionary is used statically, enabling class
dictionary propagation for best scalability.&lt;/p&gt;
&lt;p&gt;At this time this only happens with classes without bases, but we
expect to soon do this with all compile time known base classes. At
this time, these optimization to become effective, we need to
optimize meta class selection from bases classes, as well as
modification of base classes with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__mro_entries__&lt;/span&gt;&lt;/code&gt; methods.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; built-in on boolean values is now optimized away.&lt;/p&gt;
&lt;p&gt;Since it’s used also for conditions being extracted, this is actually
somewhat relevant, since it could keep code alive in side effects at
least for no good reason and this allows a proper reduction.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Project: Require the useful stuff for installation of Nuitka already.
These are things we cannot inline really, but otherwise will
frequently be warned about, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zstandard&lt;/span&gt;&lt;/code&gt; for onefile and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ordered-set&lt;/span&gt;&lt;/code&gt; for fast operation, but we do not require packages
that might fail to install.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added section about virus scanners and how to avoid
false reports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Enhanced description for plugin module loading, the old
code was too complicated and actually working only for a mode of
including plugin code that is discouraged.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Fix section for standalone finding files on wrong level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Using the console on Python 3.4 to 3.7 is not working very
well with e.g. many Asian systems. Nuitka fails to setup the encoding
for stdin and stdout or this platform. It can then produce exceptions
on input or output of unicode data, that doesn’t overlap with UTF-8.&lt;/p&gt;
&lt;p&gt;We now inform the user of these older Python with a warning and
mnemonic, to either disable the console or to upgrade to Python 3.8
or higher, which normally won’t be much of an issue for most users.&lt;/p&gt;
&lt;p&gt;Read more on &lt;a class="reference external" href="https://nuitka.net/info/old-python-windows-console.html"&gt;the info page&lt;/a&gt; for
detailed information. Added in 1.4.1 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Fixup debugging reference count output with Python3.4. For
Python 3.11 compatibility tests, actually it was useful to compare
with a version that doesn’t have coroutines yet. Never tell me,
supporting old versions is not good.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deprecating support for Python 3.3, there is no apparent use of this
version, and it has gained specific bugs, that are indeed not worth
our time. Python 2.6 and Python 2.7 will continue to be supported
probably indefinitely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recommend &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ordered-set&lt;/span&gt;&lt;/code&gt; for Python 3.7 to 3.9 as well, as not only
for 3.10+ because on Windows, to install &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;orderset&lt;/span&gt;&lt;/code&gt; MSVC needs to
be installed, whereas &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ordered-set&lt;/span&gt;&lt;/code&gt; has a wheel for ready use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Actually zstandard requirement is for a minimal version, added that
to the requirement files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Lets not reexecute Nuitka in case if we are debugging it
from Visual Code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Include the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pdb&lt;/span&gt;&lt;/code&gt; files in Windows standalone mode for
proper C tracebacks should that be necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Detect the GitHub flavor of Python as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Check the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format&lt;/span&gt;&lt;/code&gt; version to avoid older ones with
bugs that made it switch whitespace for one file. Using the one from
Visual Code C extension is a good idea, since it will often be
available. Running the checks on newer Ubuntu GitHub Actions runner
to have the correct version available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Updated the version of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rstfmt&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt; to the
latest versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: Added commented out section for enabling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ssh&lt;/span&gt;&lt;/code&gt; login, which
we occasionally need to git bisect problems specific to GitHub Python
flavor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Report problematic plugin name with module name or DLL name
when these raise exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ordered-set&lt;/span&gt;&lt;/code&gt; package for Python3.7+ rather than only
Python3.10+ because it doesn’t need any build dependency on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: When showing source changes, also display the module name with
the changed code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Use function intended for user query when asking about downloads
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Do not report usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; for linking from newer version,
that is not relevant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Make sure we have proper error codes when reporting IO
errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSVC: Detect a version for developer prompts too. This version is
needed for use in enabling version specific features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Started UML diagrams with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plantuml&lt;/span&gt;&lt;/code&gt; that will need to be completed
before using them in then new and more visual parts of Nuitka
documentation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Check icon conversion capability at start of compilation rather
than error exiting at the very end informing the user about required
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imageio&lt;/span&gt;&lt;/code&gt; packages to convert to native icons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Enhanced autoformat on Windows, which was susceptible to
tools introducing Windows new lines before other steps were
performed, that then could be confused, also enforcing use of UTF-8
encoding when working with Nuitka source code for formatting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;delvewheel&lt;/span&gt;&lt;/code&gt; plugin was still using a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zmq&lt;/span&gt;&lt;/code&gt; class name from
its original implementation, adapted that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use common template for generator frames as well. This made them also
work with 3.11, by avoiding duplication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Applied code formatting to many more files in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tests&lt;/span&gt;&lt;/code&gt;, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed a few micro benchmarks that are instead to be covered by
construct-based tests now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced code generation for specialized in-place operations to avoid
unused code for operations that do not have any shortcuts where the
operation would be actual in-place of a reference count 1 object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better code generation for module variable in-place operations with
proper indentation and no repeated calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Use the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;namedtuple&lt;/span&gt;&lt;/code&gt; factory that we created for
informational tuples from plugins as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make details of download utils module more accessible for better
reuse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove last remaining Python 3.2 version check in C code, for us this
is just Python3 with 3.2 being unsupported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanup, name generated call helper file properly, indicating that it
is a generated file.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Made the CPython3.10 test suite largely executable with Python 3.11
and running that with CI now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow measuring constructs without writing the code diff again. Was
crashing when no filename was given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make Python3.11 test execution recognized by generally accepting
partially supported versions to execute the tests with.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handle also &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;newfstat&lt;/span&gt;&lt;/code&gt; directory checks in file usage scan. This
are used on newer Linux systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: In actions use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--report&lt;/span&gt;&lt;/code&gt; for coverage and upload the
reports as artifacts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-qt&lt;/span&gt;&lt;/code&gt; plugin to avoid warnings in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; test rather
than disabling the warnings about Qt bindings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Detect if the machine can take runtime traces, which on Apple
Silicon by default it cannot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Cover all APIs for file tracing, rather than just one for
extended coverage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, distutils test was not installing the built wheels, but source
archive and therefore compiling that second time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt; using tests, Nuitka was always downloaded
from PyPI rather than using the version under test.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ignore &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ld&lt;/span&gt;&lt;/code&gt; info output about mismatching architecture libraries
being ignored. Fixed in 1.4.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;With this release an important new avenue for scalability has been
started. While for Python2 class bodies were very often reduced to just
that dictionary creation, with Python3 that was not the case, due to the
many new complexities, and while this release makes a start, we will be
able to continue this path towards much more scalable class creation
codes. And while the performance does not really matter all that much
for these, knowing these, will ultimately lead us to “compiled classes”
as our own type, and “compiled objects” that may well perform much
faster.&lt;/p&gt;
&lt;p&gt;Already now, the enhancements to class creation codes will result in
smaller binaries, but much more is expected the more this is completed.&lt;/p&gt;
&lt;p&gt;The majority of the work was of course to become Python3.11 compatible,
and unfortunately the attribute lookups are not as optimized as for 3.10
yet, which may cause disappointing results for performance initially. We
will need to complete that before benchmarks will make much sense.&lt;/p&gt;
&lt;p&gt;For the next release, full Python 3.11 support is planned. I believe it
should be usable. Problems with 3.11 may get hotfixes, but ultimately
the develop version is probably the one to recommend when using 3.11
with Nuitka, as there will be the whole set of fixes, since not
everything will be ported back.&lt;/p&gt;
&lt;p&gt;The new reports should be used in bug reporting soon. We foresee that
for issue reports, these may well become mandatory. Together with the
ability to create a virtualenv from the reports, this may make
reproducing issues a breeze, but first tries on complex projects were
also highlighting that it may not be as simple.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-15.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2023-03-26T19:38:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/python311-experimental-support.html</id>
    <title>Python 3.11 and Nuitka experimental support</title>
    <updated>2023-03-13T13:05:25+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="python-3-11-and-nuitka-experimental-support"&gt;

&lt;p&gt;In my &lt;a class="reference external" href="/posts/all-in-with-nuitka.html"&gt;all in with Nuitka&lt;/a&gt; post and
my first post &lt;a class="reference external" href="/posts/python311-support.html"&gt;Python 3.11 and Nuitka&lt;/a&gt;
and then progress post &lt;a class="reference external" href="/posts/python311-progress.html"&gt;Python 3.11 and Nuitka Progress&lt;/a&gt; , I promised to give you more
updates on Python 3.11 and in general.&lt;/p&gt;
&lt;p&gt;So this is where 3.11 is at, and the TLDR is, experimental support has
arrives with Nuitka 1.5 release, follow develop branch for best support,
and 1.6 is expected to support new 3.11 features.&lt;/p&gt;
&lt;section id="what-is-now"&gt;
&lt;h2&gt;What is now&lt;/h2&gt;
&lt;p&gt;The 1.5 release passes the CPython3.10 test suite practically as good as
with Python3.11 as with Python3.10, with only a handful of tests failing
and these do not seem significant, and it is expected to be resolved
later when making the CPython3.11 test suite working.&lt;/p&gt;
&lt;p&gt;The 1.5 release now gives this kind of output.&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;Python&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;3.11&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;officially&lt;/span&gt; &lt;span class="n"&gt;supported&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;Nuitka&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;1.5&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;but&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;upcoming&lt;/span&gt; &lt;span class="n"&gt;release&lt;/span&gt; &lt;span class="n"&gt;will&lt;/span&gt; &lt;span class="n"&gt;change&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;mean&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;Python&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;3.10&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;instead&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;newer&lt;/span&gt; &lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Using develop should always be relatively good, it doesn’t often have
regressions, but Python3.11 improvements will accumulate there until 1.6
release happens. Follow it there if you want. However, checking those
standalone cases that can be done, as many packages are not available
for 3.11 yet, I have not found a single issue.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="what-you-can-do"&gt;
&lt;h2&gt;What you can do?&lt;/h2&gt;
&lt;p&gt;Try your software with Nuitka and Python3.11 now. Very likely your code
base is not using 3.11 specific features, or is it? If it is, of course
you may have to wait until develop catches up with new features and
changes in behavior.&lt;/p&gt;
&lt;p&gt;In case you are wondering, how I can invest this much time into doing
all of what I do, consider becoming a &lt;a class="reference external" href="https://nuitka.net/doc/commercial.html"&gt;subscriber of Nuitka commercial&lt;/a&gt;, even if you do not need the
IP protection features it mostly has. All commonly essential packaging
and performance features are entirely free, and I have put incredible
amounts of works in this, and I need to now make a living off it, while
I do not plan to make Nuitka annoying or unusable for non-commercial
non-subscribers at all.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="what-was-done"&gt;
&lt;h2&gt;What was done?&lt;/h2&gt;
&lt;p&gt;Getting all of the test suite to work, is a big thing already. Also a
bunch of performance degradations have been addressed. However right
now, attribute lookups and updates e.g. are not as well optimized, and
that despite and of course &lt;em&gt;because&lt;/em&gt; Python 3.11 changed the core a lot
in this area.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="the-process"&gt;
&lt;h2&gt;The Process&lt;/h2&gt;
&lt;p&gt;This was largely explained in my previous posts. I will just put where
we are now and skip completed steps and avoid repeating it too much.&lt;/p&gt;
&lt;p&gt;In the next phase, during 1.6 development the 3.11 test suite is used in
the same way as the 3.10 test suite. Then we will get to support new
features, new behaviors, newly allowed things, and achieve super
compatibility with 3.11 as we always do for every CPython release. All
the while doing this, the CPython3.10 test suite will be executed with
3.11 by my internal CI, immediately reporting when things change for the
worse.&lt;/p&gt;
&lt;p&gt;This phase is starting today actually.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="when"&gt;
&lt;h2&gt;When&lt;/h2&gt;
&lt;p&gt;It is very hard to predict what will be encountered in the test suite.
It didn’t look like many things are there, but e.g. exception groups
might be an invasive feature, otherwise I am not aware of too many
things at this point. It sure &lt;em&gt;feels&lt;/em&gt; close now.&lt;/p&gt;
&lt;p&gt;These new features will be relatively unimportant to the masses of users
who didn’t immediately change their code to use 3.11 only features.&lt;/p&gt;
&lt;p&gt;The worst things with debugging is that I just never know how much time
it will be. Often things are very quick to add to Nuitka, and sometimes
they hurt a lot or cause regressions for other Python versions by
mistake.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benefits-for-older-python-too"&gt;
&lt;h2&gt;Benefits for older Python too&lt;/h2&gt;
&lt;p&gt;I mentioned stuff before, that I will not repeat only new stuff.&lt;/p&gt;
&lt;p&gt;Most likely, attribute lookups will lead to adding the same JIT approach
the Python 3.11 allows for now, and maybe that will be possible to
backport to old Python as well. Not sure yet. For now, they are actually
worse than with 3.10, while CPython made them faster.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="expected-results"&gt;
&lt;h2&gt;Expected results&lt;/h2&gt;
&lt;p&gt;Not quite good for benchmarking at this time. From the comparisons I
did, the compiled code of 3.10 and 3.11 seemed equally fast, allowing
CPython to catch up. When Nuitka takes advantage of the core changes to
dict and attributes more closely, hope is that will change.&lt;/p&gt;
&lt;p&gt;So in a sense, using 3.11 with Nuitka over 3.10 actually doesn’t have
much of a point yet.&lt;/p&gt;
&lt;p&gt;I need to repeat this. People tend to expect that gains from Nuitka and
enhancements of CPython stack up. The truth of the matter is, no they do
not. CPython is now applying some tricks that Nuitka already did, some a
decade ago. Not using its bytecode will then become less of a benefit,
but that’s OK, this is not what Nuitka is about.&lt;/p&gt;
&lt;p&gt;We need to get somewhere else entirely anyway, in terms of speed up. I
will be talking about PGO and C types a lot in the coming year, that is
at least the hope. The boost of 1.4 and 1.5 was only be the start. Once
3.11 support is sorted out, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; will be getting dedicated code too,
that’s where things will become interesting.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="final-words"&gt;
&lt;h2&gt;Final Words&lt;/h2&gt;
&lt;p&gt;So, this post is kind of too late. My excuse is that due to having
Corona, I did kind of close down on some of the things, and actually
started to do optimization that will lead towards more scalable class
code. This is also already in 1.5 and important.&lt;/p&gt;
&lt;p&gt;But now that I feel better, I actually forced myself to post this. I am
getting better at this. Now back and starting the CPython3.11 test
suite, I will get back to you once I have some progress with that.
Unfortunately adding the suite is probably also a couple of days work,
just technically before I encounter interesting stuff.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/python311-experimental-support.html"/>
    <summary>In my all in with Nuitka post and
my first post Python 3.11 and Nuitka
and then progress post Python 3.11 and Nuitka Progress , I promised to give you more
updates on Python 3.11 and in general.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2023-03-13T13:05:25+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/python311-progress.html</id>
    <title>Python 3.11 and Nuitka Progress</title>
    <updated>2023-02-18T12:29:24+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="python-3-11-and-nuitka-progress"&gt;

&lt;p&gt;In my &lt;a class="reference external" href="/posts/all-in-with-nuitka.html"&gt;all in with Nuitka&lt;/a&gt; post and
my first post &lt;a class="reference external" href="/posts/python311-support.html"&gt;Python 3.11 and Nuitka&lt;/a&gt;, I promised to give you more updates
on Python 3.11 and in general. So this is where 3.11 is at, and the TLDR
is, experimental support is coming with Nuitka 1.5 release.&lt;/p&gt;
&lt;section id="what-is-now"&gt;
&lt;h2&gt;What is now&lt;/h2&gt;
&lt;p&gt;Currently Nuitka 1.4 contains already some preparations for 3.11
support, but also from the feedback I had read, on how Nuitka has lost
its performance lead over the releases, a huge amount of catching up on
the quality and depth of integration, was put onto the plate, and so
that became a large part of the 1.4 focus.&lt;/p&gt;
&lt;p&gt;These preparations mostly addressed frames, unified separate code
generation for them, and since with 3.11 generators frames were far too
buggy, this had to be continued, and interestingly many frame issues
were solved by some great unification right after 1.4 release for 1.5
develop.&lt;/p&gt;
&lt;p&gt;And from here, most frame issues got debugged and fixed. This is the
area where 3.11 had the biggest impact on Nuitka internals.&lt;/p&gt;
&lt;p&gt;The 1.5 development release now gives this kind of output.&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;Python&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;3.11&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;officially&lt;/span&gt; &lt;span class="n"&gt;supported&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Nuitka&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;1.5rc7&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;but&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;upcoming&lt;/span&gt; &lt;span class="n"&gt;release&lt;/span&gt; &lt;span class="n"&gt;will&lt;/span&gt; &lt;span class="n"&gt;change&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;In&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;mean&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;Python&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;3.10&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;instead&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;newer&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Using develop should be good. But I expect to be better with every
pre-release until 1.5 happens. Follow it there if you want.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="what-you-can-do"&gt;
&lt;h2&gt;What you can do?&lt;/h2&gt;
&lt;p&gt;Not a lot yet, as a mere mortal, what you can and should do is to
consider becoming a &lt;a class="reference external" href="https://nuitka.net/doc/commercial.html"&gt;subscriber of Nuitka commercial&lt;/a&gt;, even if you do not need the
IP protection features it mostly has. All commonly essential packaging
and performance features are entirely free, and I have put incredible
amounts of works in this, and I need to now make a living off it.&lt;/p&gt;
&lt;p&gt;Working on 3.11 support, just so tings then continue to work, mostly on
my own deserves financial support. Once a year, for weeks on end, I am
re-implementing features that a much larger collective of developers
came up with.&lt;/p&gt;
&lt;p&gt;But don’t get me wrong. This may sounds like complaining here. Not at
all. I love these things. I hate to be under some kind of time pressure
though, but it seems that is coming to an end, so it’s all good now.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="what-was-done"&gt;
&lt;h2&gt;What was done?&lt;/h2&gt;
&lt;p&gt;So the “basic” tests of Nuitka are finally passing. That is by itself a
huge step, and the now work on the CPython3.10 test suite, has been
started to be executed with Python 3.11, and fixes are applied.&lt;/p&gt;
&lt;p&gt;Doing that, still some bigger issues were still found, e.g. uncompiled
frames as the parent of compiled frames, when inspected, did not
automatically provide a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f_back&lt;/span&gt;&lt;/code&gt;, these now have to created on the
fly. This sort of things, which are not commonly observed by code.&lt;/p&gt;
&lt;p&gt;Esp. the usual trouble makers, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_generators&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_coroutines&lt;/span&gt;&lt;/code&gt;,
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_asyncgen&lt;/span&gt;&lt;/code&gt; (with one test part as an exception) are passing.
Honestly these are always the most scary to me. Debugging coroutines
using asyncgen is a fairly large chunk of my time spent on Nuitka in
recent years.&lt;/p&gt;
&lt;p&gt;Compiled frames appear to be not entirely correctly seen for tracebacks
and stacks when uncompiled code looks upward, but that seems negligible
right now.&lt;/p&gt;
&lt;p&gt;Up to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_inspect&lt;/span&gt;&lt;/code&gt; things appear to be working fine, and there is
some kind of TODO list now, that I maintain on the roadmap document. I
add TODOs there, e.g. because I had to disable attribute optimization
with Python3.11 so that is going to harm performance and should be
revisited before claiming full support.&lt;/p&gt;
&lt;p&gt;As for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; module, there will be more functions that need monkey
patching, esp. related to frames, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getframeinfo&lt;/span&gt;&lt;/code&gt; has no tolerance
for the lack of bytecode in compiled function and their frames.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="the-process"&gt;
&lt;h2&gt;The Process&lt;/h2&gt;
&lt;p&gt;This was largely explained in my previous post. I will just put where we
are now and skip completed steps and avoid repeating it too much.&lt;/p&gt;
&lt;p&gt;The current phase is to run the CPython 3.10 test suite compiled with
3.11 and compare its results to running with plain 3.11, and expect it
to be the same. It is normal for CPython 3.10 tests to fail with 3.11,
and this does several things.&lt;/p&gt;
&lt;p&gt;Test failures of 3.11 with 3.10 code actually give new test coverage. It
has happened in previous new Python releases, that only then it became
apparent that there were slight incompatibilities in exceptions, etc.&lt;/p&gt;
&lt;p&gt;Also now a test may passes where it should not, i.e. 3.11 changed
behavior and now Nuitka still follows 3.10 behavior. So maybe a new
check is done or something like that, and Nuitka needs a version guarded
change that also makes it behave the same with 3.11 version. But of
course, when using 3.10 it has to retain the older behavior still.&lt;/p&gt;
&lt;p&gt;The other thing, is when Python 3.11 passes, but Nuitka is not.
Typically then Nuitka has some sort of change missing to the internal
codes, often only a changed error message, exception type, etc. but
sometimes this can be also a bigger thing.&lt;/p&gt;
&lt;p&gt;During this phase it is hard to know where we stand. I do not really
want to do repeated analysis. So e.g. when the exception for using a
non-context manager in a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; statement fails, I am not really
interested to see how many other tests are failing because of that or
other things. I am going to fix that first &lt;em&gt;and only then&lt;/em&gt; I will look
what the next failure is.&lt;/p&gt;
&lt;p&gt;Since I will get to fix &lt;em&gt;all&lt;/em&gt; the things, anyway, I tend to address most
of the issues I find immediately and delay further executing of the test
suite. Only when I understand the issue clearly enough and see that it
will take a lot of time for a corner case, then I will add fixing it to
the roadmap.&lt;/p&gt;
&lt;p&gt;This I am doing e.g. with the single test part failure in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_asyncgen&lt;/span&gt;&lt;/code&gt;, because I suspect, that some change in 3.11 has
happened, or that I will revisit the topic in the 3.11 test suite, which
often has more dedicated tests to highlight changes. The one not good
with Nuitka right now does not look important, nor easy to analyze.&lt;/p&gt;
&lt;p&gt;In the next phase, the 3.11 test suite is used in the same way. Then we
will get to support new features, new behaviors, newly allowed things,
and achieve super compatibility with 3.11 as we always do for every
CPython release. All the while doing this, the CPython3.10 test suite
will be executed with 3.11 by my internal CI, immediately reporting when
things change for the worse.&lt;/p&gt;
&lt;p&gt;This phase has not even started however. But probably results of it will
be in 1.6 I would assume now.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="intermediate-results"&gt;
&lt;h2&gt;Intermediate Results&lt;/h2&gt;
&lt;p&gt;Once the Python 3.11 more or less well passed the 3.10 test suite
without big issues, experimental support for it will be proclaimed and
1.5 shall be released. The warning from above will be given, but the
error that 1.4 gave you will cease, and come back for 3.12 probably.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="when"&gt;
&lt;h2&gt;When&lt;/h2&gt;
&lt;p&gt;Very hard to predict. It &lt;em&gt;feels&lt;/em&gt; close now. Supporting existing Nuitka
is also a side tracking thing, that makes it unclear how much time I
will have for it.&lt;/p&gt;
&lt;p&gt;And the worst things with debugging is that I just never know how much
time it will be. I have spent almost a day staring at debugging traces
for the coroutine code, before these worked finally. And during that
time it didn’t feel like progressing at all.&lt;/p&gt;
&lt;p&gt;I think, look back at Python changes since 2.6, which was the first
thing Nuitka supported, and still does btw, 3.5 and coroutines, 3.6 and
asyncgen, and then 3.10 and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; statements, the 3.11 release will
probably have been the hardest.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benefits-for-older-python-too"&gt;
&lt;h2&gt;Benefits for older Python too&lt;/h2&gt;
&lt;p&gt;I mentioned stuff before, that I will not repeat only new stuff. So the
frame changes caused me to solve most of the issues by doing cleanups
and refactoring that allowed for enhancements present in 1.4 and coming
to 1.5 some more, covering generators as well.&lt;/p&gt;
&lt;p&gt;Most likely, attribute lookups will gain the same JIT approach the
Python 3.11 allows for now, and maybe that will be possible to backport
to old Python as well. Not sure yet. For now, they are actually worse
than with 3.10, while CPython made them faster. Not quite good for
benchmarking at this time.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="expected-results"&gt;
&lt;h2&gt;Expected results&lt;/h2&gt;
&lt;p&gt;I need to repeat this. People tend to expect that gains from Nuitka and
enhancements of CPython stack up. The truth of the matter is, no they do
not. CPython is now applying some tricks that Nuitka already did, some a
decade ago. Not using its bytecode will then become less of a benefit,
but that’s OK, this is not what Nuitka is about.&lt;/p&gt;
&lt;p&gt;We need to get somewhere else entirely anyway, in terms of speed up. I
will be talking about PGO and C types a lot in the coming year, that is
at least the hope. The boost of 1.4 will only be the start. Once 3.11
support is sorted out, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; will be getting dedicated code too,
that’s where things will become interesting.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="final-words"&gt;
&lt;h2&gt;Final Words&lt;/h2&gt;
&lt;p&gt;Look ma, I posted about something that is not complete. The temptation
to just wait until I finish it was so huge. But I resisted successfully.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/python311-progress.html"/>
    <summary>In my all in with Nuitka post and
my first post Python 3.11 and Nuitka, I promised to give you more updates
on Python 3.11 and in general. So this is where 3.11 is at, and the TLDR
is, experimental support is coming with Nuitka 1.5 release.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2023-02-18T12:29:24+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-package-config-part2.html</id>
    <title>Nuitka Package Configuration Part 2</title>
    <updated>2023-02-13T09:01:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-package-configuration-part-2"&gt;

&lt;p&gt;This is the second part of a post series under the tag &lt;a class="reference external" href="https://nuitka.net/blog/tag/package_config.html"&gt;package_config&lt;/a&gt; that explains the
Nuitka Package Configuration in more detail. To recap, Nuitka package
configuration is the way Nuitka learns about hidden dependencies, needed
DLLs, data files, and just generally avoids bloat in the compilation.
The details are here on a dedicate page on the web site in &lt;a class="reference external" href="https://nuitka.net/doc/nuitka-package-config.html"&gt;Nuitka
Package Configuration&lt;/a&gt; but reading on
will be just fine.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="problem-package"&gt;
&lt;h1&gt;Problem Package&lt;/h1&gt;
&lt;p&gt;Each post will feature one package that caused a particular problem. In
this case, we are talking about the package &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;customtkinter&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Problems are typically encountered in standalone mode only. Missing data
files are typical issue there, and in this case, we already had a
solution, but turns out, only working on Windows for a weird reason. We
are going to look at that in some detail, and will see a workaround
applied with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; engine doing code modification on the
fly.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="initial-symptom"&gt;
&lt;h1&gt;Initial Symptom&lt;/h1&gt;
&lt;p&gt;The initial symptom reported was like this, on the Nuitka Discord server
and much to my surprise, against the then current 1.4.4 release of
Nuitka.&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Traceback&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/tmp/onefile_32802_1675869955_205649/customtkinter/windows/widgets/theme/__init__.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;customtkinter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;windows&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;widgets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/tmp/onefile_32802_1675869955_205649/customtkinter/windows/widgets/theme/theme_manager.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;load_theme&lt;/span&gt;
&lt;span class="ne"&gt;FileNotFoundError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Errno&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;No&lt;/span&gt; &lt;span class="n"&gt;such&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/tmp/onefile_32802_1675869955_205649/customtkinter/windows/widgets/theme/../../../assets/themes/blue.json&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;One thing to say here is that if you have this kind of issues, using
onefile is definitely too early. The recommendation is to use onefile
only after standalone works, because it is easier to debug.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-1-analysis"&gt;
&lt;h1&gt;Step 1 - Analysis&lt;/h1&gt;
&lt;p&gt;So first thing, I did was to normalize the path, so I can see if
something funny is going on, with that.&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;normpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/tmp/onefile_32802_1675869955_205649/customtkinter/windows/widgets/theme/../../../assets/themes/blue.json&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;&amp;#39;/tmp/onefile_32802_1675869955_205649/customtkinter/assets/themes/blue.json&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So this matches existing data files. Originally we had worked off this
on Windows,&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;python3&lt;/span&gt;&lt;span class="mf"&gt;.10&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="n"&gt;nuitka&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;package&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;customtkinter&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Checking&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;C:\Python310_64\lib\site-packages\customtkinter&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310_64&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;customtkinter&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310_64&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;customtkinter&lt;/span&gt;\&lt;span class="n"&gt;assets&lt;/span&gt;\&lt;span class="n"&gt;fonts&lt;/span&gt;\&lt;span class="n"&gt;CustomTkinter_shapes_font&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;otf&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310_64&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;customtkinter&lt;/span&gt;\&lt;span class="n"&gt;assets&lt;/span&gt;\&lt;span class="n"&gt;fonts&lt;/span&gt;\&lt;span class="n"&gt;Roboto&lt;/span&gt;\&lt;span class="n"&gt;Roboto&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Medium&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttf&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310_64&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;customtkinter&lt;/span&gt;\&lt;span class="n"&gt;assets&lt;/span&gt;\&lt;span class="n"&gt;fonts&lt;/span&gt;\&lt;span class="n"&gt;Roboto&lt;/span&gt;\&lt;span class="n"&gt;Roboto&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Regular&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttf&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310_64&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;customtkinter&lt;/span&gt;\&lt;span class="n"&gt;assets&lt;/span&gt;\&lt;span class="n"&gt;icons&lt;/span&gt;\&lt;span class="n"&gt;CustomTkinter_icon_Windows&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ico&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310_64&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;customtkinter&lt;/span&gt;\&lt;span class="n"&gt;assets&lt;/span&gt;\&lt;span class="n"&gt;themes&lt;/span&gt;\&lt;span class="n"&gt;blue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310_64&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;customtkinter&lt;/span&gt;\&lt;span class="n"&gt;assets&lt;/span&gt;\&lt;span class="n"&gt;themes&lt;/span&gt;\&lt;span class="n"&gt;dark&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;blue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310_64&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;customtkinter&lt;/span&gt;\&lt;span class="n"&gt;assets&lt;/span&gt;\&lt;span class="n"&gt;themes&lt;/span&gt;\&lt;span class="n"&gt;green&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Which confirms the data file, and had lead to adding configuration to
include these data files.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;customtkinter&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;data-files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;dirs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;assets&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is the most simple for including data files. Because there are no
needs to limit by file type, and not even a wish to know what file types
might get added in the future. We add the folder and are good.&lt;/p&gt;
&lt;p&gt;Since the original report was on Windows, it was tested there and
assumed to be good on all platforms.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-2-debugging"&gt;
&lt;h1&gt;Step 2 - Debugging&lt;/h1&gt;
&lt;p&gt;So, the data files are indeed included, which was confirmed by asking to
compile in standalone and to provide the listing. However, at run time
they were not found.&lt;/p&gt;
&lt;p&gt;This is where the platform differences come in, somewhat to my surprise,
on Windows the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;customtkinter/windows/widgets/theme/../../../assets/themes/blue.json&lt;/span&gt;&lt;/code&gt;
part of the path works, even though there is no &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;windows&lt;/span&gt;&lt;/code&gt; directory.
Since compiled code is contained in the executable, packages in
standalone may not have a directory associated.&lt;/p&gt;
&lt;p&gt;So while &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; is set to that virtual directory, it does not
exist. And usually that is all good, and directories get created of
course when package data gets added. That is e.g. why &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;customtkinter&lt;/span&gt;&lt;/code&gt;
and then of course &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;customtkinter/assets&lt;/span&gt;&lt;/code&gt; exist. But
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;customtkinter/windows&lt;/span&gt;&lt;/code&gt; does not.&lt;/p&gt;
&lt;p&gt;The platform difference, that I was not aware of that only on Windows,
will a path being opened get normalized before being used.&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;
&lt;span class="go"&gt;&amp;#39;nt&amp;#39;&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;README.rst&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;True&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;doesnotexist&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;False&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;doesnotexist&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;..&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;README.rst&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;But neither on Linux nor macOS this is going to be possible. So that was
the problem. Checkout their code, this is what is used:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;script_directory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;../../../assets&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;themes&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;theme_name_or_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.json&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="bp"&gt;cls&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This could have used &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resources&lt;/span&gt;&lt;/code&gt; or
many of the methods that Nuitka supports out of the box. But actually
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;open&lt;/span&gt;&lt;/code&gt; and being &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; relative is supposed to be fine.&lt;/p&gt;
&lt;p&gt;So this does not work.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-2-devising-a-solution"&gt;
&lt;h1&gt;Step 2 - Devising a solution&lt;/h1&gt;
&lt;p&gt;So, there are actually a couple of ways to resolve this. One would be to
just provide the empty directories that non-Windows is checking to
exist. These would then have to be deployed. There is actually support
for that in Nuitka Package Configuration.&lt;/p&gt;
&lt;p&gt;And we have examples of that in our existing configuration, e.g. for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Crypto.Util._raw_api&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;customtkinter.windows.widgets.theme.theme_manager&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;data-files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;empty_dirs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is for code that insists on the package directory, but honestly,
while it is easy enough, I don’t quite like this solution. The empty
directory requires a dummy file, and ultimately it that is all that is
used for is rather ugly.&lt;/p&gt;
&lt;p&gt;So, what else we can do? Well, we can modify the code of course too. We
have the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; engine and it is capable of achieving reduction
of bloat. What if the we used it to modify the code to do a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.normpath&lt;/span&gt;&lt;/code&gt; and that is actually what we ended up doing. The
most simple form of anti-bloat does plain string replacements. Here it
is used.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;customtkinter.windows.widgets.theme.theme_manager&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;anti-bloat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;workaround&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;file&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;path&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Linux&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;replacements_plain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;script_directory,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;../../../assets&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;os.path.normpath(os.path.join(script_directory,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;../../../assets&amp;quot;))&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;# Not necessary on Windows&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;when&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;win32&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The effect can be easily seen with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-source-changes&lt;/span&gt; &lt;span class="pre"&gt;option&lt;/span&gt;&lt;/code&gt;
which outputs for modules the changes applied. Notice that we do not do
it on Windows, because there it is not needed. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; clause
allows us to specify such conditions.&lt;/p&gt;
&lt;div class="highlight-diff notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;customtkinter.windows.widgets.theme.theme_manager:
&lt;span class="gd"&gt;--- original&lt;/span&gt;
&lt;span class="gi"&gt;+++ modified&lt;/span&gt;

&lt;span class="gu"&gt;@@ -15,7 +15,7 @@&lt;/span&gt;

&lt;span class="w"&gt; &lt;/span&gt;        script_directory = os.path.dirname(os.path.abspath(__file__))

&lt;span class="w"&gt; &lt;/span&gt;        if theme_name_or_path in cls._built_in_themes:
&lt;span class="gd"&gt;-            with open(os.path.join(script_directory, &amp;quot;../../../assets&amp;quot;, &amp;quot;themes&amp;quot;, f&amp;quot;{theme_name_or_path}.json&amp;quot;), &amp;quot;r&amp;quot;) as f:&lt;/span&gt;
&lt;span class="gi"&gt;+            with open(os.path.join(os.path.normpath(os.path.join(script_directory, &amp;quot;../../../assets&amp;quot;)), &amp;quot;themes&amp;quot;, f&amp;quot;{theme_name_or_path}.json&amp;quot;), &amp;quot;r&amp;quot;) as f:&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;normpath&lt;/span&gt;&lt;/code&gt; is limited to where it is needed, to keep the replaced
expression minimal. And in this way, the problem is solved for in a
pretty non-invasive way.&lt;/p&gt;
&lt;p&gt;Source modification is of course always something that can break if the
code changes, and should normally be avoided. But it appears this should
be a very robust one.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="final-remarks"&gt;
&lt;h1&gt;Final remarks&lt;/h1&gt;
&lt;p&gt;I am hoping you will find this very helpful information and will join
the effort to make packaging for Python work out of the box. Adding
support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;customtkinter&lt;/span&gt;&lt;/code&gt; seems trivial at first, and for Windows in
fact is was.&lt;/p&gt;
&lt;p&gt;Lessons learned. Data files working need to be confirmed on either Linux
or macOS too, esp. in case of these relative paths.&lt;/p&gt;
&lt;p&gt;We will have to have a repository of test cases for this kind of small
programs, where you can help by checking for new version to still
produce the same compilation report. Then it would be fairly easy to get
the coverage on all platforms and in case of updated packages on PyPI.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-package-config-part2.html"/>
    <summary>This is the second part of a post series under the tag package_config that explains the
Nuitka Package Configuration in more detail. To recap, Nuitka package
configuration is the way Nuitka learns about hidden dependencies, needed
DLLs, data files, and just generally avoids bloat in the compilation.
The details are here on a dedicate page on the web site in Nuitka
Package Configuration but reading on
will be just fine.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="package_config" label="package_config"/>
    <published>2023-02-13T09:01:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-14.html</id>
    <title>Nuitka Release 1.4</title>
    <updated>2023-02-05T11:11:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-4"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a large amount of performance work, where
specifically Python versions 3.7 or higher see regressions in relative
performance to CPython fixed. Many cases of macros turned to functions
have been found and resolved. For 3.10 specifically we take advantage of
new opportunities for optimization. And generally avoiding DLL calls
will benefit execution times on platform where the Python DLL is used,
most prominently Windows.&lt;/p&gt;
&lt;p&gt;Then this also adds new features, specifically custom reports. Also
tools to aid with adding Nuitka Package Configuration input data, to
list DLLs and data files.&lt;/p&gt;
&lt;p&gt;With multidist we see a brand new ability to combine several programs
into one, that will become very useful for packaging multiple binaries
without the overhead of multiple distributions.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dependency_injector&lt;/span&gt;&lt;/code&gt;
package. Fixed in 1.3.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the generated metadata nodes for distribution queries had an
error in their generated children handling that could cause crashes
at compile time. Fixed in 1.3.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;passlib.apache&lt;/span&gt;&lt;/code&gt;
package. Fixed in 1.3.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, our shortcut to find DLLs by analyzing loaded DLLs
stumbled in a case of a DLL loaded into the compiling Python that had
no filename associated, while strange, we need to handle this as
well. Fixed in 1.3.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Also need to workaround more decorator tricks for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;networkx&lt;/span&gt;&lt;/code&gt;. Fixed in 1.3.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, was not updating &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; environment variable anymore,
which could lead to externally provided compilers and internal
WinLibs gcc clashing on Windows, but should be a general problem.
Fixed in 1.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cefpython3&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.3.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;webview&lt;/span&gt;&lt;/code&gt; package versions.
Fixed in 1.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, some extension modules set their &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; during multi phase imports, which we then didn’t update
anymore, however that is necessary. Fixed in 1.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Fix, was not supporting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; cases where an
alternative had no condition associated. Fixed in 1.3.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Identify Windows ARM architecture Python properly. We do not
yet support it, but we should report it properly and some package
configurations are already taking it already into account. Fixed in
1.3.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the Nuitka meta path based loader, needs to expose a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__module__&lt;/span&gt;&lt;/code&gt; attribute because there is code out there, that
identifies standard loaders through looking at this value, but
crashes without it. Fixed in 1.3.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, very old versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_metadata&lt;/span&gt;&lt;/code&gt; backport were
using themselves to load their &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__version__&lt;/span&gt;&lt;/code&gt; attribute. Added a
workaround for it, since in Nuitka it doesn’t work until after
loading the module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, value escapes for attribute and subscript assignments sources
were not properly annotated. This could cause incorrect code
execution. Fixed in 1.3.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, “pure” functions, which are currently only our complex call
helper functions, were not visited in all cases. This lead to a crash
in code generation after modules using them got demoted to bytecode.
After use from cache, this didn’t happen again. Fixed in 1.3.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added more implicit dependencies of crypto packages.
Fixed in 1.3.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygments.styles&lt;/span&gt;&lt;/code&gt;
module. Fixed in 1.3.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, was falsely encoding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Ellipsis&lt;/span&gt;&lt;/code&gt; too soon during tree building.
It is not quite like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;True&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt;. Fixed in 1.3.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; on macOS didn’t work inside an application
bundle anymore. Fixed in 1.3.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8+: Fix, need to follow change for extension module handling,
otherwise some uses of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.add_dll_directory&lt;/span&gt;&lt;/code&gt; fail to work. Fixed
in 1.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependencies of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlalchemy&lt;/span&gt;&lt;/code&gt;.
Fixed in 1.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: Fix, resource reader files was not fully compatible and
needed to register with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resources.as_file&lt;/span&gt;&lt;/code&gt; to work well
with it. Fixed in 1.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the version check for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; was not working with the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opencv-python-headless&lt;/span&gt;&lt;/code&gt; variant. Package name and distribution
name is not a 1:1 mapping for all things. Fixed in 1.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added DLLs needed for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tls_client&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, imports of resolved names should be modified for runtime too.
Where Nuitka recognizes aliases, as e.g. the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requests&lt;/span&gt;&lt;/code&gt; module
does, it only adding a dependency on the resolved name, but not
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requests&lt;/span&gt;&lt;/code&gt; itself. The import however was still done at runtime on
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requests&lt;/span&gt;&lt;/code&gt; which then didn’t work. This was only visible if only
these aliases to other modules were used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Fix, do not send duplicate CTRL-C to child process. Our test
only send it to the bootstrap process, rather than the process group,
as it normally is working, therefore misleading us into sending it to
the child even if not needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: When not using cached mode, on Windows the temporary folder
used sometimes failed to delete after the executable stopped with
CTRL-C. This is due to races in releasing of locks and process
termination and AV tools, so we now retry for some time, to make sure
it is always deleted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, was not ignoring &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.dylib&lt;/span&gt;&lt;/code&gt; when scanning for data
files unlike all other DLL suffixes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mplcairo&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The main binary name on non-Windows didn’t have a suffix
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.bin&lt;/span&gt;&lt;/code&gt; unlike in accelerated mode. However, this didn’t work well
for packages which have binaries colliding with the package name.
Therefore now the suffix is added in this case too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Workaround bug in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;platform_utils.paths&lt;/span&gt;&lt;/code&gt;. It is guessing the
wrong path for included data files with Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added DLLs of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sound_lib&lt;/span&gt;&lt;/code&gt;, selecting by OS and
architecture.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, for package metadata as from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata.metadata&lt;/span&gt;&lt;/code&gt; for
use at runtime we need to use both package name and distribution name
to create it, or else it failed to work. Packages like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opencv-python-headless&lt;/span&gt;&lt;/code&gt; can now with this too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkinterweb&lt;/span&gt;&lt;/code&gt; on Windows. Other
platforms will need work to be done later.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;UI: Added new option to listing package data files. This is for use
with analyzing standalone issues. And will output all files that are
data files for a given package name.&lt;/p&gt;
&lt;div class="highlight-shell notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;nuitka&lt;span class="w"&gt; &lt;/span&gt;--list-package-data&lt;span class="o"&gt;=&lt;/span&gt;tkinterweb
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added new option to listing package DLL files. This is also for
use with analyzing standalone issues.&lt;/p&gt;
&lt;div class="highlight-shell notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;nuitka&lt;span class="w"&gt; &lt;/span&gt;--list-package-dlls&lt;span class="o"&gt;=&lt;/span&gt;tkinterweb
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: The usages of modules, successful or not, are now included
in the compilation report. Checking out which ones are &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not-found&lt;/span&gt;&lt;/code&gt;
might help recognition of issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multidist: You can now experimentally create binaries with multiple
entry points. At runtime one of multiple &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt; will be
executed. The option to use is multiple &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--main=some_main.py&lt;/span&gt;&lt;/code&gt;
arguments. If then the binary name is changed, on execution you get a
different variant being executed.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Using it with only one replaces the previous use of the positional
argument given and is not using multidist at all.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Multidist is compatible with onefile, standalone, and mere
acceleration. It cannot be used for module mode obviously.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;For deployment this can solve duplication.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;For wheels, we will probably change those with multiple entry
points to compiling multidist executables, so we do avoid Python
script entry points there. But this has not yet been done.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Kill non-cooperating child processes on CTRL-C after a grace
period, that can be controlled at compile time with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-child-grace-time&lt;/span&gt;&lt;/code&gt; the hard way. This avoids hangs of
processes that fail to properly shutdown.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Add support for extra global search paths to mimic
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; manipulations in the Yaml configuration with new
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;global-sys-path&lt;/span&gt;&lt;/code&gt; import hack.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Include used distributions of compiled packages and their
versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added ability to generate custom reports with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--report-template&lt;/span&gt;&lt;/code&gt; where the user can provide a Jinja2 template to
make his own reports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Added support for checking python flags. There are
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_asserts&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_docstrings&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_annotations&lt;/span&gt;&lt;/code&gt; now. These
can be used to limit rules to be only applied when these optional
modes are active.&lt;/p&gt;
&lt;p&gt;Not all packages will work in these modes, but often can be enhanced
to work with relatively little patching. This allows to limit these
patches to only where they are necessary.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sparse&lt;/span&gt;&lt;/code&gt; and through that Numba in the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; package, reducing its distribution footprint. Part of 1.3.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid IPython and Numba in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;trimesh&lt;/span&gt;&lt;/code&gt; package. Part of
1.3.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid Numba in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shap&lt;/span&gt;&lt;/code&gt; package. Part of 1.3.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-bloat: Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xgboost&lt;/span&gt;&lt;/code&gt; docstring dependencies, such that
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=no_docstrings&lt;/span&gt;&lt;/code&gt; can be used with this package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For guided deep copy &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;frozenset&lt;/span&gt;&lt;/code&gt; and empty &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt; need no copies&lt;/p&gt;
&lt;p&gt;This also speeds up copies of non-empty tuples by avoiding that size
checking branch in construction with Python 3.10 or higher.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For node construction, avoid keyword argument style calls of the base
class, where there is only a single argument. They don’t really help
readability, but cost compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Determine guard mode of frames dynamically and avoid frame
preservation checks where they are not needed.&lt;/p&gt;
&lt;p&gt;For Python2 this is necessary, but not for Python3, so make the
function avoid finding the parent frame for that version entirely,
which should speed up compilation as well.&lt;/p&gt;
&lt;p&gt;By not hard coding frame guard mode at creation time, and instead
determine it at compile time, after optimization, so this now allows
to use the “once” mode more often. This affects contractions and also
classes on the module level right now. They do not need a cached
frame, since their code is only executed once.&lt;/p&gt;
&lt;p&gt;By avoiding that useless code, the C compiler also has a slightly
better scalability, since the classes are all created in one function
that then has less code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The bytecode cache is now checking if the used modules or attempted
to be used modules are available or not in just the same way.
Previously it was very dependent on the file system to contain the
same things, which was not giving cache hits even after only creating
a new folder near a binary, since that affected importable modules.
With the new check it should be much more directly hitting even
across different virtual environments, but with same code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate base classes or mixins for all kinds of expression,
statements and statement sequences. The previous code had a dedicated
variant for single child, to allow faster operation in a common case,
but still a lot of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hasattr/getattr/setattr&lt;/span&gt;&lt;/code&gt; on dynamic attribute
names were done. This was making the tree traversal during
optimization slower than necessary.&lt;/p&gt;
&lt;p&gt;Another shortcoming was that for some nodes, some values are
optional, where for others, they are not. Some values are a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;
actually, while most are nodes only. However, dealing with this
generically was also slower than necessary.&lt;/p&gt;
&lt;p&gt;The new code now enforces children types during creation and updated,
it rejects unexpected &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; values for non-optional children, and
it provides generated code to do this in the fastest way possible,
although surely some more improvements will come here.&lt;/p&gt;
&lt;p&gt;Also when abstract executing the tree, rather than generically
visiting all children, this now just unrolls this, and there are even
some modes added, where a node can indicate properties, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;auto_compute_handling&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;&amp;quot;final,no_raise&amp;quot;&lt;/span&gt;&lt;/code&gt; will tell the code
generator that this expression never raises in the computation, and
is final, i.e. doesn’t have any code to evaluate, because it cannot
be optimized any further.&lt;/p&gt;
&lt;p&gt;Also the way &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;checkers&lt;/span&gt;&lt;/code&gt; previously worked, for every node creation,
for every child update, a dictionary lookup had to be done. This is
now hard coded for the few nodes that actually want to convert values
on the fly and we might make a difference in the future for optional
checkers, such that these are only run in debug mode.&lt;/p&gt;
&lt;p&gt;These changes brought about much faster compilation, however the big
elephant in the room will still be merging value traces, and
scalability problems remain there.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attribute node generation for method specs like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict.update&lt;/span&gt;&lt;/code&gt;, etc.
now provide type shapes. From these type shapes, mixins for the
result value type are picked automatically. Previously these shapes
were added manually. In some cases, they were even missing. In a few
cases, where the type is dependent on the Python version, we do not
currently do this though, so this needs more work, but expanding the
coverage got easier in this way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Determining the used modules of a module requires a tree visit
operations, that then asked for node types and used different APIs.
This has been unified to be able to call a virtual method instead,
which saves some compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After scanning for a module, we then determined the module kind even
after we previously knew it during the scan. Also, this was checking
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.isdir&lt;/span&gt;&lt;/code&gt; which was making it relatively slow and wasting 5%
compile time on the IO being done. The check got enhanced and most
often replaced with using the knowledge from the original import scan
eliminating this time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Already most helper code of Nuitka was included from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.c&lt;/span&gt;&lt;/code&gt; files,
but compiled generators and compiled cells codes were not yet done
like this, making life unnecessarily harder for the compiler and
linker. This should also allow more optimization for some codes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cache the plugin decisions about recursion for a module name. When a
module is imported multiple times plugins were each asked again and
again, which is not a good thing to do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject_RichCompareBool&lt;/span&gt;&lt;/code&gt; API, as we have our own
comparison functions that are faster and faster to call without
crossing of DLL barrier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8+: Avoid usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyIndex_Check&lt;/span&gt;&lt;/code&gt; which has become an API
in 3.8, and was as a result not inlined anymore with a DLL barrier
was to be crossed, making all kinds of multiplication and
subscript/index operations slower.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Replace &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyNumber_Index&lt;/span&gt;&lt;/code&gt; API with our own code. As of 3.10 it
enforces a conversion to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; that for Nuitka is not a good thing
to do in all places. But also due to DLL barrier it was potentially
slow to call, and is used a lot, and we can drop the checks that are
useless for Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7+: Avoid the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyImport_GetModule&lt;/span&gt;&lt;/code&gt; for looking up
imported modules from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.modules&lt;/span&gt;&lt;/code&gt;, rather look it up from
interpreter internals, also this was using subscript functions, when
this is always a dictionary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyImport_GetModuleDict&lt;/span&gt;&lt;/code&gt; and instead have our own API
to get this quicker.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster exception match checks and sub type checks.&lt;/p&gt;
&lt;p&gt;This solves a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; about inlining the API function used, so we
can be faster in a relatively common operation. For every exception
handler, we had to do one API call there.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster subtype checks.&lt;/p&gt;
&lt;p&gt;These are common in binary operations on non-identical types, but
also needed for the exception checks, and object creation through
class type calls. With our own &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyType_IsSubType&lt;/span&gt;&lt;/code&gt; replacement these
faster to use and avoid the API call.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster Python3 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; value startup initialization.&lt;/p&gt;
&lt;p&gt;On Python 3.9 or higher we can get small int values directly from the
interpreter, and with 3.11 they are accessible as global values.&lt;/p&gt;
&lt;p&gt;Also we no longer de-duplicate small int values through our cache,
since there is no use in this, saving a bunch of startup time. And we
can create the values with our own API replacement, that will work
during startup already and save API calls as these can be relatively
slow. And esp. for the small values, this benefits from not having to
create them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster Python3 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; value startup initialization.&lt;/p&gt;
&lt;p&gt;On Python 3.10 or higher, we can create these values ourselves
without an API call, avoiding its overhead.&lt;/p&gt;
&lt;p&gt;Also we no longer de-duplicate small bytes values through our cache,
because that is already done by the API and our replacement, so this
was just wasting time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;slice&lt;/span&gt;&lt;/code&gt; object values with Python 3.10 or higher&lt;/p&gt;
&lt;p&gt;On Python 3.10 or higher, we can create these values ourselves
without an API call, avoiding its overhead.&lt;/p&gt;
&lt;p&gt;These are important for Python3, because &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a[x:y]&lt;/span&gt;&lt;/code&gt; in the general
case has to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a[slice(x,y)]&lt;/span&gt;&lt;/code&gt; on that version, making this
somewhat relevant to performance in some cases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; built-in with API calls&lt;/p&gt;
&lt;p&gt;For common cases, this avoids API calls. We mostly have this such
that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt; style tests do not have this as API calls where we
strive to remove all API calls for given programs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster exception normalization.&lt;/p&gt;
&lt;p&gt;For the common case, we have our own variant of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyErr_NormalizeException&lt;/span&gt;&lt;/code&gt; that will avoid the API call. It may
still call the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject_IsSubclass&lt;/span&gt;&lt;/code&gt; API, for which we only have
started replacement work, but this is already a step ahead in the
right direction.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster object releases&lt;/p&gt;
&lt;p&gt;For Python3.8 or higher when our code released objects, it was doing
that with an API call, due to a macro change in Python headers. We
revert that and do it still on our own which avoids the performance
penalty.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable Python threading during extension module DLL loading&lt;/p&gt;
&lt;p&gt;We now release the GIL for Python3.8 or higher when loading the DLL,
following a change in that version.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster variable handling in trace collection. The code was doing
checks for variable types, to decide what to do e.g. when control
flow escapes for a variable. However, this is faster if solved with a
virtual method in those variable classes, shifting the responsibility
to inside there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For call codes the need to check the return value was not perfectly
annotated in all cases. This is now driven by the expression rather
than passed, and will result in better code generated in some corner
cases.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Release: Make clear we require &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wheel&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; to
install by adding a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt; that addresses a warning of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pip&lt;/span&gt;&lt;/code&gt;. Part of 1.3.6 release already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: When plugins evaluate &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; conditions that raise,
output which it was exactly. Part of 1.3.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Added a mnemonic and more clear message for the case of
unwanted imports being encountered. Also do not warn about IPython
itself using IPython packages, that must of course be considered
normal. Now it also lists the module that does the unwanted usage
immediately. Previously this was not as clear.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: More clear output for not yet supported Python version. Make it
more clear in the message, what is the highest supported version, and
what version is Nuitka and what is Python in this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Make sure data files have normalized paths. Specifically on
Windows, otherwise a mix of slashes could appear. Part of 1.3.6
release already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Make it clear that disabling the console harms your debugging
when we suggest the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--disable-console&lt;/span&gt;&lt;/code&gt; for GUI packages. Otherwise
using that, they just deprive themselves of ways to get error
information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: The ordering of scons &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; report was not enforced. Part of
1.3.7 release already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Use proper temporary filename during autoformat, so as to
avoid flicker in Visual Code, e.g. search results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Was still using old option name for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-tempdir-spec&lt;/span&gt;&lt;/code&gt; that has since been made not OS specific,
with even the OS specific name being removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include data files scanned with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site-packages&lt;/span&gt;&lt;/code&gt;
or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__pycache__&lt;/span&gt;&lt;/code&gt; folders. This should make it easier to use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-data-file=./**.qml:.&lt;/span&gt;&lt;/code&gt; when you have a virtualenv living
in the same folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Added check for compression ability before starting the
compilation to inform the user immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Mark macOS as supported in PyPI categories. This is of
course true for a long time already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: Mark Android as supported in PyPI categories as well. With
some extra work, it can be used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added section pointing to and explaining compilation
reports. This has become extremely useful even if still somewhat work
in progress.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added table with included custom reports, at this time
only the license reports, which is very rough shape and needs
contributors for good looks and content.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Plugins: Moved parts of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywebview&lt;/span&gt;&lt;/code&gt; plugin that pertain to the
DLLs and data files to package configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made the user query code a dedicated function, so it can be reused
and more consistent across its uses in Nuitka. With a default that is
proposed to a user, and a default that applies if used
non-interactively. We will switch all prompts to using this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code generation for module, class and function frames is now unified,
removing duplication while also becoming more flexible. For
generators this work has been started, but is not yet completed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nodes exposing used modules now implement the same virtual method
providing a list of them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to pass &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt; values rather than &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; values from
the tree building stage and node optimization creating new nodes.
This allows us to drop conversions previously done inside of nodes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Do not enable deprecated plugins, the warnings about them break
tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ignore Qt binding warnings in tests, some are less supported than
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; or commercial &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The focus of this release was first a major restructuring of how
children are handled in the node tree. The generated code opens up the
possibility of many more scalability improvements in the coming
releases. The pure iteration speed for the node tree will make compile
times for the Python part even shorter in coming releases. Scalability
will be a continuous focus for some releases.&lt;/p&gt;
&lt;p&gt;Then the avoiding of API calls is a huge benefit for many platforms that
are otherwise at a disadvantage. This is also only started. We will aim
at getting more complex programs to do next to none of these, so far
only some tests are working after program start without them, which is
of course big progress. We will progress there with future releases as
well.&lt;/p&gt;
&lt;p&gt;Catching up on problems that previous migrations have not discovered is
also a huge step forward to restoring the performance supremacy, that
was not there anymore in extreme cases.&lt;/p&gt;
&lt;p&gt;The Yaml package configuration work is showing its fruits. More people
have been able to contribute changes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; or missing
dependencies than ever before.&lt;/p&gt;
&lt;p&gt;Some part of the Python 3.11 work have positively influenced things,
e.g. with the frame cleanup. THe focus of the next release cycle shall
be to add support for it. Right now, generator frames need a cleanup to
be finished, to also become better and working with 3.11 at the same
time. Where possible, work to support 3.11 was also conducted as a
cleanup action, or reduction of the technical debts.&lt;/p&gt;
&lt;p&gt;All in all, it is fair to say that this release is a big leap forward in
all kinds of ways.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-14.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2023-02-05T11:11:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-package-config-kickoff.html</id>
    <title>Nuitka Package Configuration Kickoff</title>
    <updated>2023-01-20T07:51:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-package-configuration-kickoff"&gt;

&lt;p&gt;The term “kickoff” refers to a series of posts about the Nuitka package
configuration. The details are here on a dedicate page on the web site
only. &lt;a class="reference external" href="https://nuitka.net/doc/nuitka-package-config.html"&gt;Nuitka Package Configuration&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This documentation is still very rough and bare of examples, but the
goal is to make it more complete as package of this series of posts.
When we have an instructive example, we will make a post.&lt;/p&gt;
&lt;p&gt;This is an area of Nuitka, where help will be very easy and a wide
variety of people will have the skills and desire to help, but the lack
of documentation, makes it hard or impossible to channel the common
knowledge.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="problem-package"&gt;
&lt;h1&gt;Problem Package&lt;/h1&gt;
&lt;p&gt;Each post will feature one package that caused a particular problem. In
this case, we are talking about the package &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkinterweb&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Problems are typically encountered in standalone mode only. Missing data
files and DLLs are usually only and issue there, but this one actually
also had a problem with accelerated mode.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="initial-symptom"&gt;
&lt;h1&gt;Initial Symptom&lt;/h1&gt;
&lt;p&gt;The compiled program gave the following error:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ne"&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="n"&gt;required&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="n"&gt;TkinterWeb&lt;/span&gt; &lt;span class="n"&gt;could&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;usually&lt;/span&gt; &lt;span class="n"&gt;occurs&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;bundling&lt;/span&gt; &lt;span class="n"&gt;TkinterWeb&lt;/span&gt; &lt;span class="n"&gt;into&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="n"&gt;without&lt;/span&gt; &lt;span class="n"&gt;forcing&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;application&lt;/span&gt; &lt;span class="n"&gt;maker&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="nb"&gt;all&lt;/span&gt; &lt;span class="n"&gt;nessessary&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;See&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Andereoo&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;TkinterWeb&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;blob&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tkinterweb&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;FAQ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;more&lt;/span&gt; &lt;span class="n"&gt;information&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Traceback&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:\...&lt;/span&gt;&lt;span class="se"&gt;\200&lt;/span&gt;&lt;span class="s2"&gt;~1.0&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;kinterweb\__init__.py&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;tkinterweb&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="ne"&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;No&lt;/span&gt; &lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;named&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bindings&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;The traceback has been redacted, removing user specific part and
replacing it with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;...&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The strange looking part of the filename &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;200~1.0&lt;/span&gt;&lt;/code&gt; in the traceback is
because Nuitka on Windows is convincing the program that it runs in a
short path. So the errors you get, are not pointing to the name of the
binary inside the dist folder, but to a shorter path, that is however
exactly the same folder. You wouldn’t believe how many parts of Python
still don’t have long filenames handled properly. Actually Tcl and
TkInter are among them.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-1-data-files"&gt;
&lt;h1&gt;Step 1 - data files&lt;/h1&gt;
&lt;p&gt;So, whenever a Python module fails to import, this can be caused by
missing data files. In Nuitka land, these are not extension modules,
DLLs, bytecode, etc. but everything else, and it has been seen that
these can cause issues. So what to do here. This is easy, Nuitka has
recently gained a command dedicated to this operation, making use of its
internal code to list data files for a package.&lt;/p&gt;
&lt;p&gt;Here we go&lt;/p&gt;
&lt;div class="highlight-shell notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python3.10&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;nuitka&lt;span class="w"&gt; &lt;/span&gt;--list-package-data&lt;span class="o"&gt;=&lt;/span&gt;tkinterweb
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Gives output:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Checking&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;C:\Python310\lib\site-packages&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s1"&gt;kinterweb&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;combobox&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tm&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;pkgIndex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tcl&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Darwin&lt;/span&gt;\&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;pkgIndex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tcl&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Linux&lt;/span&gt;\&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;pkgIndex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tcl&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Linux&lt;/span&gt;\&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;pkgIndex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tcl&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Windows&lt;/span&gt;\&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;pkgIndex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tcl&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Windows&lt;/span&gt;\&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;pkgIndex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tcl&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So there are data files, great. Lets just include them, and retry. There
appears to be need for that anyway. Now we could use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data=tkinterweb&lt;/span&gt;&lt;/code&gt; for quickly trying it out, but
since we are in here to make it generally useful, we will start
modification of the Yaml file right away.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tkinterweb&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;data-files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;dirs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tkhtml&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So, we retry, and nothing changes. Not enough, but on the other hand, it
was obviously necessary anyway.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-2-dll-files"&gt;
&lt;h1&gt;Step 2 - DLL files&lt;/h1&gt;
&lt;p&gt;The other big trouble maker, and easy to check nowadays, is missing
DLLs. Extension modules can depend on DLLs. When they are linked
against, this not usually and issue, and Nuitka and its plugins
typically resolve all of those perfectly, but often DLLs are loading
manually. Maybe this is what is going on here.&lt;/p&gt;
&lt;p&gt;Also recently, Nuitka gained a command to check for DLLs.&lt;/p&gt;
&lt;p&gt;Here we go&lt;/p&gt;
&lt;div class="highlight-shell notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python3.10&lt;span class="w"&gt; &lt;/span&gt;bin/nuitka&lt;span class="w"&gt; &lt;/span&gt;--list-package-dlls&lt;span class="o"&gt;=&lt;/span&gt;tkinterweb
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Gives output:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Checking&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;C:\Python310\lib\site-packages&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s1"&gt;kinterweb&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Darwin&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Darwin&lt;/span&gt;\&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;
&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Darwin&lt;/span&gt;\&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;Tkhtml30&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dylib&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Linux&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Linux&lt;/span&gt;\&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;
&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Linux&lt;/span&gt;\&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;Tkhtml30&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Linux&lt;/span&gt;\&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;
&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Linux&lt;/span&gt;\&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;Tkhtml30&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Windows&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Windows&lt;/span&gt;\&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;
&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Windows&lt;/span&gt;\&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;Tkhtml30&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dll&lt;/span&gt;
&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Python310&lt;/span&gt;\&lt;span class="n"&gt;lib&lt;/span&gt;\&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;\&lt;span class="n"&gt;tkinterweb&lt;/span&gt;\&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Windows&lt;/span&gt;\&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;
&lt;span class="n"&gt;tkhtml&lt;/span&gt;\&lt;span class="n"&gt;Windows&lt;/span&gt;\&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;\&lt;span class="n"&gt;Tkhtml30&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dll&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;The output could be not containing folders that have no DLLs
themselves, but well, such is life, we are going to improve that
another time.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;What this tells us, that in fact there are DLLs, and from the looks of
it, there is no automatic anything in this. This also appears to be one
of those PyPI packages that contain binaries for everything. Rather than
building a wheel per architecture this contains some things, on all
platforms. For a Python installation that is cool, but surely we do not
want to deploy both the 32 and 64 bit DLLs where the compiled binary is
only one of these. Do not even think of different OS, like including
Linux DLLs on Windows.&lt;/p&gt;
&lt;p&gt;So, luckily this is easy to handle. We can select for OS and
architecture on Windows for a while already.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tkinterweb&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;dlls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from_filenames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;relative_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tkhtml/Windows/32-bit&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;prefixes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Tkhtml&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;when&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;win32&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;arch_x86&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from_filenames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;relative_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tkhtml/Windows/64-bit&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;prefixes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Tkhtml&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;when&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;win32&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;arch_amd64&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Showing this here without the data files section for clarity,
obviously the DLLs just get added, and Nuitka prevents you from
having two blocks referencing the same module.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;So, including DLLs is fairly easy. If the package directory is not where
the DLL lives, you specify &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;relative_path&lt;/span&gt;&lt;/code&gt; which is otherwise
optional. This also influences where it is put in the distribution
folder. Then when specifying the DLL, we do only give the prefix of the
DLL. Choosing here to leave out the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;30&lt;/span&gt;&lt;/code&gt; part of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Tkhtml30.dll&lt;/span&gt;&lt;/code&gt; just
because it’s probably going to make our life easier down the road,
should they update that version number, it would still automatically
work.&lt;/p&gt;
&lt;p&gt;Obviously for other platforms than Windows, the DLLs are not included
now, but lets see if this works. And actually at the time of writing,
this is a first. As you can see, on macOS (recognized from “Darwin”)
only the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x86_64&lt;/span&gt;&lt;/code&gt; will work, and maybe we should check that out. For
Linux and 32 bit, this shows what an old package this is.&lt;/p&gt;
&lt;p&gt;So far, outside of Windows, we do not provide tags for arches.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;This is probably going to change now. At least on macOS this seems
very much needed. Maybe also time to cleanup &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;amd64&lt;/span&gt;&lt;/code&gt; vs &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x86_64&lt;/span&gt;&lt;/code&gt;
which kind of is an inconsistency the technical community has.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Anyway, so more branches will be needed. There is no &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;else&lt;/span&gt;&lt;/code&gt; in Nuitka
package configuration. All &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from_filenames&lt;/span&gt;&lt;/code&gt; blocks are applied if the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; matches.&lt;/p&gt;
&lt;p&gt;And actually for data files are similar thing should be done, however,
for the time being &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--noinclude-data-file&lt;/span&gt;&lt;/code&gt; can be your friend there.
You can manually exclude them.&lt;/p&gt;
&lt;p&gt;But low and behold, the DLLs are included. The data files are. Typically
that is enough, but it &lt;strong&gt;still&lt;/strong&gt; does not work.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-3-check-the-compilation-report"&gt;
&lt;h1&gt;Step 3 - Check the compilation report&lt;/h1&gt;
&lt;p&gt;So after following the easy steps to take, and still not working. We can
check the compilation report. You should always compile with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--report=compilation-report.xml&lt;/span&gt;&lt;/code&gt; which produces a very human readable
compilation report, where you can check things easily.&lt;/p&gt;
&lt;p&gt;It lists included DLLs and data files, and often also why it is
included, and as of recently it learned to output also modules that were
used by a module, and modules that were attempted to be used, but not
found.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;This newly tracked information about failed attempts to use a module
are the basis of largely enhanced bytecode caching (demoted e.g.
because too large or standard library) in latest Nuitka.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka will tell use here about the issue from its perspective. So a
module is not found at runtime, but what happened at compile time. Only
the report can tell.&lt;/p&gt;
&lt;p&gt;Lets quote the compilation report snippets.&lt;/p&gt;
&lt;div class="highlight-xml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;kind=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;PythonMainModule&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;reason=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Root module&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;optimization-time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;pass=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;time=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0.25&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;optimization-time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;pass=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;time=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0.01&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usages&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkinterweb&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkinter&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tkinter&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;not-found&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;6&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/module_usages&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/module&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is the main module. Even without giving you the source code, you
can see that the example code does import tkinterweb and tkinter. And
due to this being probably very old code, the Python2/Python3 module
name difference is present, so it imports the Python3 name successfully,
but not the Python2 name.&lt;/p&gt;
&lt;p&gt;How do we know this is a bug or not? The reality is, we do by context
knowledge, there is not a single best way to decide if an import that is
not found represents an issue in the compilation or not. But this looks
good. I am showing it to you for educational purpose mostly.&lt;/p&gt;
&lt;p&gt;Now lets find the module that raised the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ModuleNotFoundError&lt;/span&gt;&lt;/code&gt;
exception.&lt;/p&gt;
&lt;div class="highlight-xml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkinterweb&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;kind=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;CompiledPythonPackage&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;reason=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Instructed by user to follow to all non-standard library modules.&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;plugin-influence&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dll-files&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;influence=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;condition-used&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;condition=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;win32 and arch_x86&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tags_used=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;win32,arch_x86&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;result=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;plugin-influence&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dll-files&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;influence=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;condition-used&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;condition=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;win32 and arch_amd64&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tags_used=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;win32,arch_amd64&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;result=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;optimization-time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;pass=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;time=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0.07&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;optimization-time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;pass=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;time=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0.03&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usages&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;os&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;sys&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;built-in&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;sys&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;built-in&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;27&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;os&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;27&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ntpath&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;28&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bindings&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;not-found&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;31&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;htmlwidgets&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;not-found&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;32&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;utilities&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;not-found&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;33&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;traceback&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;35&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;sys&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;built-in&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;41&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkinter&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;44&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkinter&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;45&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkinter.messagebox&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;relative&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;45&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tkinter&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;not-found&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;47&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkMessageBox&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;not-found&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;48&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkinter&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;67&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tkinter&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;not-found&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;69&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/module_usages&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/module&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;At the top, you can see the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plugin-influence&lt;/span&gt;&lt;/code&gt;. This is where the
plugin records that it influenced. It records what conditions were
checked, and the result. Actually further down, we got this.&lt;/p&gt;
&lt;div class="highlight-xml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;included_dll&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tkhtml30.dll&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;dest_path=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkinterweb\tkhtml\Windows\64-bit\Tkhtml30.dll&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;source_path=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:\Python310_64\lib\site-packages\tkinterweb\tkhtml/Windows/64-bit\Tkhtml30.dll&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;package=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tkinterweb&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;ignored=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;no&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;reason=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Yaml config of &amp;#39;tkinterweb&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;But that is now why we are here. You can also see the imports being
done. They are given with line numbers and the one we care about is this
snippet.&lt;/p&gt;
&lt;div class="highlight-xml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;module_usage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bindings&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;finding=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;not-found&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;line=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;31&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So Nuitka didn’t find it at compile time. And a quick check with Python
on the prompt would reveal that this name is not importable. So now we
switch to the source code of the trouble making module. There is no tool
for that yet, typically just do this manually:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tkinterweb&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;tkinterweb&lt;/span&gt;
&lt;span class="go"&gt;&amp;lt;module &amp;#39;tkinterweb&amp;#39; from &amp;#39;C:\\Python310\\lib\\site-packages\\tkinterweb\\__init__.py&amp;#39;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is a clickable link in my Visual Code terminal, and after I click
it and go to the line, what we see is:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;realpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vm"&gt;__file__&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;bindings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TkinterWeb&lt;/span&gt;
    &lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;htmlwidgets&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HtmlFrame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HtmlLabel&lt;/span&gt;
    &lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;utilities&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Notebook&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ne"&gt;ImportError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ne"&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Useless code goes here.&lt;/span&gt;
    &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;What strikes immediately is that Visual Code agrees, and displays the
imported names a color used for modules that it couldn’t resolve. And
actually the first like on top there is revealing rather rare code. This
package is extending the global import path with its package contents.
In this way, what would be &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkinterweb.bindings&lt;/span&gt;&lt;/code&gt; is available as
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bindings&lt;/span&gt;&lt;/code&gt; &lt;strong&gt;after&lt;/strong&gt; the module has been imported at runtime.&lt;/p&gt;
&lt;p&gt;Expanding the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt; is therefore our next step. Since I am
using bash, I can prefix the call to Nuitka with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH='C:\\Python310_64\\lib\\site-packages\\tkinterweb'&lt;/span&gt;&lt;/code&gt; and
low and behold, it works with this. Compilation takes longer and
includes more modules, and the initial message is gone.&lt;/p&gt;
&lt;p&gt;So, how to resolve this. Nuitka has gained a feature dedicated to this.
It will be nice if this was automatically resolved at compile time,
which is well could, note has been taken that there is value in tracking
expanding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; at compile time.&lt;/p&gt;
&lt;p&gt;There is another section called &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;import-hacks&lt;/span&gt;&lt;/code&gt; and it too recently
gained a new feature dedicated to this.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tkinterweb&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;import-hacks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;global-sys-path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# This package forces itself into &amp;quot;sys.path&amp;quot; and expects absolute&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# imports to be available.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We can here provide a list of relative paths, that are added when a
package is imported to the search path of Nuitka. With this we can drop
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt; which while being a nice workaround, required using
absolute paths of the install, never easy to handle.&lt;/p&gt;
&lt;p&gt;With this it now works fully automatically. One issue remains. The
compiled program does not need the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; trick at runtime. And
for isolation purposes, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; ought to be empty, so what we do we
do with this here?&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-4-cleanup-the-code"&gt;
&lt;h1&gt;Step 4 - Cleanup the code&lt;/h1&gt;
&lt;p&gt;In order to get rid of that code, we can use the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt;
mechanism. It is very powerful and can do all sorts of things, but today
we got a simple task for it.&lt;/p&gt;
&lt;p&gt;This is the troubling line.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;realpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vm"&gt;__file__&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There are many ways to change this, it’s always good be at less invasive
as possible, so we do not want to append. We could prefix that line with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;if&lt;/span&gt; &lt;span class="pre"&gt;False:&lt;/span&gt;&lt;/code&gt;, but that typically only works well for single liners.
What we can do rather generally is something like this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;realpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vm"&gt;__file__&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="c1"&gt;# -&amp;gt; we want this instead:&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;realpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vm"&gt;__file__&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Notice that just not calling will be good enough and extremely likely
robust against all kinds of formatting changes, multiple lines, etc. and
probably also very applicable should be encounter similar ones.&lt;/p&gt;
&lt;p&gt;So this can be expressed with the following yaml snippet.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;tkinterweb&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;anti-bloat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;remove&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;sys.path&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hack&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;replacements_plain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;sys.path.append&amp;#39;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And to know what effect it had and to see the wonders if anti-bloat in
general, you can use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-source-changes&lt;/span&gt;&lt;/code&gt; and output the diffs done
on module source changes.&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt; &lt;span class="n"&gt;original&lt;/span&gt;
&lt;span class="o"&gt;+++&lt;/span&gt; &lt;span class="n"&gt;modified&lt;/span&gt;

&lt;span class="o"&gt;@@&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="o"&gt;@@&lt;/span&gt;

 &lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;

&lt;span class="s2"&gt; import sys, os&lt;/span&gt;
&lt;span class="s2"&gt;-sys.path.append(os.path.dirname(os.path.realpath(__file__)))&lt;/span&gt;
&lt;span class="s2"&gt;+(os.path.dirname(os.path.realpath(__file__)))&lt;/span&gt;

&lt;span class="s2"&gt; try:&lt;/span&gt;
&lt;span class="s2"&gt;     from bindings import TkinterWeb&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So, now this is perfect. Just need to add more OS specific branches,
maybe also for the data files include more selectively, then this is
perfect.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="final-remarks"&gt;
&lt;h1&gt;Final remarks&lt;/h1&gt;
&lt;p&gt;I am hoping you will find this very helpful information and will join
the effort to make packaging for Python work out of the box. Adding
support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkinterweb&lt;/span&gt;&lt;/code&gt; was a little more complex than your typical
package. The OS specific DLLs in different places are relatively
unusual, although it has been seen before and will be gain.&lt;/p&gt;
&lt;p&gt;This is a simpler example, that is way less complex, with all defaults
just working.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;module-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;lightgbm.libpath&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;dlls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from_filenames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;prefixes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;lib_lightgbm&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Please review the guidelines for contributing, and esp. make sure to
install the commit hook as described, or run
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bin/autoformat-nuitka-source&lt;/span&gt; &lt;span class="pre"&gt;--yaml&lt;/span&gt;&lt;/code&gt; at least, so the CI will not
complain about formatting and we will have consistent files.&lt;/p&gt;
&lt;p&gt;The last hot fixes of 1.3 already have user provided packaging
enhancements that add dependencies and anti-bloat. We might discuss
those in the next installment.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-package-config-kickoff.html"/>
    <summary>The term “kickoff” refers to a series of posts about the Nuitka package
configuration. The details are here on a dedicate page on the web site
only. Nuitka Package Configuration.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="package_config" label="package_config"/>
    <published>2023-01-20T07:51:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-13.html</id>
    <title>Nuitka Release 1.3</title>
    <updated>2022-12-28T09:58:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-3"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a large amount of performance work, that should
specifically be useful on Windows, but also generally. A bit of
scalability work has been applied, and as usual many bug fixes and small
improvements, many of which have been in hotfixes.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;macOS: Framework build of PySide6 were not properly supporting the
use of WebEngine. This requires including frameworks and resources in
new ways, and actually some duplication of files, making the bundle
big, but this seems to be unavoidable to keep the signature intact.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dotenv&lt;/span&gt;&lt;/code&gt;. Do not insist on
compiled package directories that may not be there in case of no data
files. Fixed in 1.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8+: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes.CDLL&lt;/span&gt;&lt;/code&gt; node attributes the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;winmode&lt;/span&gt;&lt;/code&gt;
argument to Python2, which is wrong, it was actually added with 3.8.
Fixed in 1.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Attempt to detect corrupt object file in MSVC linking. These
might be produced by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cl.exe&lt;/span&gt;&lt;/code&gt; crashes or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; bugs. When
these are reported by the linker, it now suggests to use the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--clean-cache=ccache&lt;/span&gt;&lt;/code&gt; which will remove it, otherwise there would
be no way to cure it. Added in 1.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;folium&lt;/span&gt;&lt;/code&gt; package. Added in 1.2.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;branca&lt;/span&gt;&lt;/code&gt; package. Added in 1.2.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, some forms &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt; that had exiting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; branches were
tracing values only assigned in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt; block incorrectly. Fixed
in 1.2.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alpine: Fix, Also include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libstdc++&lt;/span&gt;&lt;/code&gt; for Alpine to not use the
system one which is required by its other binaries, much like we
already do for Anaconda. Fixed in 1.2.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for latest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytorch&lt;/span&gt;&lt;/code&gt;. One of our
workarounds no longer applies. Fixed in 1.2.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for webcam on Windows with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opencv-python&lt;/span&gt;&lt;/code&gt;. Fixed in 1.2.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytorch_lightning&lt;/span&gt;&lt;/code&gt;, it was not
finding metadata for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rich&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.2.4 already.&lt;/p&gt;
&lt;p&gt;For the release we found that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytorch_lightning&lt;/span&gt;&lt;/code&gt; may not find
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rich&lt;/span&gt;&lt;/code&gt; installed. Need to guard &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;version()&lt;/span&gt;&lt;/code&gt; checks in our package
configuration.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dash&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.2.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Retry replace &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; entry after a delay, this works
around Virus scanners giving access denied while they are checking
the file. Naturally you ought to disable those for your build space,
but new users often don’t have this. Fixed in 1.2.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt; 1.9.2 changes. Fixed in 1.2.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Catch corrupt object file outputs from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt;&lt;/code&gt; as well and suggest to
clean cache as well. This has been observed to happen at least on
Windows and should help resolve the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; situation there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: In case &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; fails to acquire the global lock, simply
ignore that. This happens sporadically and barely is a real locking
issue, since that would require two compilations at the same time and
for that it largely works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Classes should have the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f_locals&lt;/span&gt;&lt;/code&gt; set to the actual
mapping used in their frame. This makes Nuitka usable with the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multidispatch&lt;/span&gt;&lt;/code&gt; package which tries to find methods there while the
class is building.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Fix, newer Anaconda versions have TCL and Tk in new places,
breaking the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; automatic detection. This was fixed in
1.2.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows 7: Fix, onefile was not working anymore, a new API usage was
not done in a compatible fashion. Fixed in 1.2.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lark&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.2.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil.iter_modules&lt;/span&gt;&lt;/code&gt; without arguments was given wrong
compiled package names. Fixed in 1.2.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clr&lt;/span&gt;&lt;/code&gt; DLLs changes. Fixed in
1.2.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added workarounds for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow.compat&lt;/span&gt;&lt;/code&gt; namespace not
being available. Fixed in 1.2.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkextrafont&lt;/span&gt;&lt;/code&gt;. Fixed in 1.2.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, locals dict test code testing if a variable was present
in a mapping could leak references. Fixed in 1.2.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;timm&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.2.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Add &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tls&lt;/span&gt;&lt;/code&gt; to list of sensible plugins. This enables at
least &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyqt6&lt;/span&gt;&lt;/code&gt; plugin to do networking with SSL encryption.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn.cluster&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FreeBSD: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;fcopyfile&lt;/span&gt;&lt;/code&gt; is no longer available on newest OS
version, and include files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sendfile&lt;/span&gt;&lt;/code&gt; have changed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: Add back support for MSYS Posix variant. Now onefile works
there too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, when picking up data files from command line and plugins,
different exclusions were applied. This has been unified to get
better coverage for avoiding to include DLLs and the like as data
files. DLLs are not data files and must be dealt with differently
after all.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;UI: Added new option for cache disabling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--disable-cache&lt;/span&gt;&lt;/code&gt; that
accepts &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;all&lt;/span&gt;&lt;/code&gt; and cache names like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytecode&lt;/span&gt;&lt;/code&gt; and on
Windows, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dll-dependencies&lt;/span&gt;&lt;/code&gt; with selective values.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; is implied in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; for simplicity.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: With the same values as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--disable-cache&lt;/span&gt;&lt;/code&gt; Nuitka may now also
be called with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--clean-cache&lt;/span&gt;&lt;/code&gt; in a compilation or without a
filename argument, and then it will erase those caches current data
before making a compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-app-mode&lt;/span&gt;&lt;/code&gt; option for application bundles that
should run in the background (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;background&lt;/span&gt;&lt;/code&gt;) or are only a UI
element (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ui-element&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: In the Nuitka Package Configuration files, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt;
allows now to check if a plugin is active. This allowed us to limit
console warnings to only packages whose plugin was activated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Can now mark a plugin as a GUI toolkit responsible with the
consequence that other toolkit detector plugins are all disabled, so
when using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; no longer will you be asked about &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt;
plugin, as that is not what you are using apparently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Generalized the GUI toolkit detection to include
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; as well, so it will now point out that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wx&lt;/span&gt;&lt;/code&gt; and the Qt
bindings should be removed for best results, if they are included in
the compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added ability to provide data files for macOS &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Resources&lt;/span&gt;&lt;/code&gt;
folder of application bundles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, Qt WebEngine was not working for framework using Python
builds, like the ones from PyPI. This adds support for both PySide2
and PySide6 to distribute those as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: When asking a CPython installation to compress from the POSIX
Python, it crashed on the main filename being not the same.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, need to preserve environment attached modes when
switching to WinLibs gcc on Windows. This was observed with MSYS2,
but might have effects in other cases too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: When creating dictionaries, lists, and tuples, we use
the newly exposed dictionary free list. This can speedup code that
repeatedly allocates and releases dictionaries by a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Added fast path to dictionary copy. Compact dictionaries
have their keys and values copied directly. This is inspired by a
Python3.10 change, but it is applicable to older Python as well, and
so we did.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: Faster compiled object creation, esp. on Python platforms
that use a DLLs for libpython, which is a given on Windows. This
makes up for core changes that went unnoticed so far and should
regain relative speedups to standard Python.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Faster float operations, we use the newly exposed float
free list. This can speed up all kinds of float operations that are
not doable in-place by a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8+: On Windows, faster object tracking is now available, this
previously had to go through a DLL call, that is now removed in this
way as it was for non-Windows only so far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7+: On non-Windows, faster object tracking is now used, this
was regressed when adding support for this version, becoming equally
bad as all of Windows at the time. However, we now managed to restore
it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Faster deep copy of mutable tuples and list constants,
these were already faster, but e.g. went up from 137% gain factor to
201% on Python3.10 as a result. We now use guided a deep copy, which
then has the information, what types it is going to copy, removing
the need to check through a dictionary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Also have own allocator function for fixed size
objects. This accelerates allocation of compiled cells, dictionaries,
some iterators, and lists objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More efficient code for object initialization, avoiding one DLL calls
to set up our compiled objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have our own &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject_Size&lt;/span&gt;&lt;/code&gt; variant, that will be slightly faster
and avoids DLL usage for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;len&lt;/span&gt;&lt;/code&gt; and size hints, e.g. in container
creations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using non-optimal &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;malloc&lt;/span&gt;&lt;/code&gt; related macros and functions of
Python, and instead of the fasted form generally. This avoids Python
DLL calls that on Windows can be particularly slow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Generated child mixins are now used for the generated
package metadata hard import nodes calls, and for all instances of
single child tuple containers. These are more efficient for creation
and traversal of the tree, directly improving the Python compile
time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Slightly more efficient compile time constant property
detections. For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;frozenset&lt;/span&gt;&lt;/code&gt; there was not need to check for
hashable values, and some branches could be replaced with e.g.
defining our own &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;EllipsisType&lt;/span&gt;&lt;/code&gt; for use in short paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: When using MSVC and LTO, the linking stage was done with
only one thread, we now use the proper options to use all cores. This
is controlled by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--jobs&lt;/span&gt;&lt;/code&gt; much like C compilation already is. For
large programs this will give big savings in overall execution time.
Added in 1.2.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dash&lt;/span&gt;&lt;/code&gt; package
compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove the use of IPython for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dotenv&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyvista&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python_utils&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;trimesh&lt;/span&gt;&lt;/code&gt; package compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove IPython usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rdkit&lt;/span&gt;&lt;/code&gt; improving compile time
for standalone by a lot. Fixed in 1.2.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;keras&lt;/span&gt;&lt;/code&gt; testing framework when using that
package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Plugins: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; plugin functionality was moved to Nuitka
package configuration, and as a result, the plugin is now deprecated
and devoid of functionality. On non-Windows, this removes unused
duplications of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.core&lt;/span&gt;&lt;/code&gt; DLLs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added information about macOS entitlements and Windows
console. These features are supported very well by Nuitka, but needed
documentation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Remove alternative options from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--help&lt;/span&gt;&lt;/code&gt; output. These are
there often only for historic reasons, e.g. when an option was
renamed. They should not bother users reading them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Expose the mnemonics option to plugin warnings function, and
use it for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyside2&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyqt5&lt;/span&gt;&lt;/code&gt; plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Detect trailing/leading spaces in Nuitka package
configuration &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;description&lt;/span&gt;&lt;/code&gt; values during their automatic check.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Detect the CPython official flavor on Windows by comparing to
registry paths and consider real prefixes, when being used in
virtualenv more often, e.g. when checking for CPython on Apple.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output to include the C compiler
selection. It is doing that respecting your other options, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--clang&lt;/span&gt;&lt;/code&gt;, etc. so it will be helpful in debugging setup issues.&lt;/p&gt;
&lt;p&gt;UI: Some error messages were using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%r&lt;/span&gt;&lt;/code&gt; rather than &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;'%s'&lt;/span&gt;&lt;/code&gt; to
output file paths, but that escaped backslashes on Windows, making
them look worse, so we changed away from this.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Document more clearly what &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--output-dir&lt;/span&gt;&lt;/code&gt; actually controls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added options hint that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Foundation&lt;/span&gt;&lt;/code&gt; module requires
bundle mode to be usable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Allow using both &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--follow-imports&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--nofollow-imports&lt;/span&gt;&lt;/code&gt;
on command line rather than erroring out. Simply use what was given
last, this allows overriding what was given in project options tests
should the need arise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Include plugin reasons for pre and post load modules
provided. This solves a TODO and makes it easier to debug plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Handle &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data&lt;/span&gt;&lt;/code&gt; before compilation, removing
the ability to use pattern. This makes it easier to recognize
mistakes without a long compilation and plugins can know them this
way too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: Migration workflows to using newer actions for Python and
checkout. Also use newer Ubuntu LTS for Linux test runner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Catch user error of running Nuitka with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pythonw&lt;/span&gt;&lt;/code&gt; binary on
Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Make it clear that &lt;strong&gt;MSYS2&lt;/strong&gt; defaults to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mingw64&lt;/span&gt;&lt;/code&gt; mode. It
had been like this, but the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--help&lt;/span&gt;&lt;/code&gt; output didn’t say so.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: Updated contribution guidelines for better readability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: Use organisation URLs everywhere, some were still pointing to
the personal rather than the organisation one. While these are
redirected, it is not good to have them like this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mastodon: Added link to &lt;a class="reference external" href="https://fosstodon.org/&amp;#64;kayhayen"&gt;https://fosstodon.org/&amp;#64;kayhayen&lt;/a&gt; to the PyPI
package and User Manual.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nodes for hard import calls of package meta data now have their base
classes fully automatically created, replacing what was previously
manual code. This aims at making them more consistent and easier to
add.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When adding the new Scons file for C compiler version output, more
values that are needed for both onefile and backend compilation were
moved to centralized code, simplifying these somewhat again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove unused &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;main_module&lt;/span&gt;&lt;/code&gt; tag. It cannot happen that a module
name matches, and still thinks of itself as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt; during
compilation, so that idea was unnecessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate the dictionary copy variants from template code rather than
having manual duplications. For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict.copy()&lt;/span&gt;&lt;/code&gt;, for deep copy
(needed e.g. when there are escaping mutable keyword argument
constant values in say a function call), and for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;**kw&lt;/span&gt;&lt;/code&gt; value
preparation in the called function (checking argument types), we have
had diverged copies, that are now unified in a single Jinja2 template
for optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Also allow providing generators for providing extra DLLs
much like we already do for data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Naming of basic tests now makes sure to use a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Test&lt;/span&gt;&lt;/code&gt; suffix, so in
Visual Code selector they are more distinct from Nuitka code modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rather than populating empty dictionaries, helper code now uses
factory functions to create them, passing keys and values, and
allowing values to be optional, removing noisy &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;if&lt;/span&gt;&lt;/code&gt; branches at
call side.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed remaining &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyDev&lt;/span&gt;&lt;/code&gt; annotations, we don’t need those anymore
for a long time already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanup, avoid lists objects for ctypes defined functions and their
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;arglist&lt;/span&gt;&lt;/code&gt;, actually tuples are sufficient and naturally better to
use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spelling cleanups were resumed, as an ongoing action.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added construct test that demonstrates the mutable constant argument
passing for lists to see the performance gains in this area too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made construct runner &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--diff&lt;/span&gt;&lt;/code&gt; output usable for interactive usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repaired Nuitka Speedcenter, but it’s not yet too usable for general
consumption. More work will be needed there, esp. to make comparisons
more accessible for the general public.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The major achievement of this release was the removal of the long lived
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; plug-in, replacing it with package based configuration, that
is even more optimal and works perfectly across all platforms on both
important package installation flavors.&lt;/p&gt;
&lt;p&gt;This release has a lot of consolidation efforts, but also as a result of
3.11 investigations, addresses a lot of issues, that have crept in over
time with Python3 releases since 3.7, each time, something had not been
noticed. There will more need for investigation of relative performance
losses, but this should address the most crucial ones, and also takes
advantage of optimization that had become with 3.10 already.&lt;/p&gt;
&lt;p&gt;There is also some initial results from cleanups with the composite node
tree structure, and how it is managed. Generated “child(ren) having”
mixins, allow for faster traversal of the node tree.&lt;/p&gt;
&lt;p&gt;Some technical things also improved in Scons. Using multiple cores in
LTO with MSVC with help this a lot, although for big compilations
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto=no&lt;/span&gt;&lt;/code&gt; probably has to be recommended still.&lt;/p&gt;
&lt;p&gt;More &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; work on more packages rounds up the work.&lt;/p&gt;
&lt;p&gt;For macOS specifically, the WebEngine support is crucial to some users,
and the new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-app-mode&lt;/span&gt;&lt;/code&gt; with more GUI friendly default resolves
long standing problems in this area.&lt;/p&gt;
&lt;p&gt;And for &lt;strong&gt;MSYS2&lt;/strong&gt; and &lt;strong&gt;FreeBSD&lt;/strong&gt;, support has been re-activated, so now
4 OSes work extremely well (others too likely), and on those, most
Python flavors work well.&lt;/p&gt;
&lt;p&gt;The performance and scalability improvements are going to be crucial.
It’s a pity that 3.11 is not yet supported, but we will be getting
there.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-13.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2022-12-28T09:58:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/python311-support.html</id>
    <title>Python 3.11 and Nuitka</title>
    <updated>2022-12-10T11:29:24+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="python-3-11-and-nuitka"&gt;

&lt;p&gt;In my &lt;a class="reference external" href="/posts/all-in-with-nuitka.html"&gt;all in with Nuitka&lt;/a&gt; post, I
promised to give you an update on the current status of Python 3.11
support and Nuitka, and this is the report on my busy bee activities
there.&lt;/p&gt;
&lt;section id="what-is-now"&gt;
&lt;h2&gt;What is now&lt;/h2&gt;
&lt;p&gt;Current Nuitka 1.2 and likely the coming 1.3 release, will react pretty
hefty to attempts to compile with Python3.11, so this command:&lt;/p&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python3.11&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;nuitka&lt;span class="w"&gt; &lt;/span&gt;tests/basics/Asserts.py
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Gives the following output:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;3.11&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;currently&lt;/span&gt; &lt;span class="n"&gt;supported&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Expect&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;problems&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;FATAL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;Python&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;3.11&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;supported&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;1.2.7&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;but&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;upcoming&lt;/span&gt; &lt;span class="n"&gt;release&lt;/span&gt; &lt;span class="n"&gt;will&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="what-you-can-do"&gt;
&lt;h2&gt;What you can do?&lt;/h2&gt;
&lt;p&gt;As a mere mortal, what you can and should do is to consider becoming a
&lt;a class="reference external" href="https://nuitka.net/doc/commercial.html"&gt;subscriber of Nuitka commercial&lt;/a&gt;, even if you do not need the
IP protection features it mostly has. All essential packaging and
performance features are free, and I have put incredible amounts of
works in this, and I need to now make a living off it.&lt;/p&gt;
&lt;p&gt;And working on 3.11 support, just so tings then continue to work, mostly
on my own deserves financial support. Once a year, for weeks on end, I
am re-implementing features that a collective of developers came up
with.&lt;/p&gt;
&lt;p&gt;Otherwise, unless you are CPython core developer responsible for the
changes, I am afraid, not a lot. Having to know both Nuitka and CPython
details is a tall ask. I might be the only one to do this for a while. I
will however strive to get more people involved each time.&lt;/p&gt;
&lt;p&gt;That is not to say this does not happen. Not too long ago, I merged
proposed changes that will help Nuitka with 3.12 compatibility. This
would be nice if it was more frequent, and the fact that it is not, is
probably my fault entirely.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="what-was-done"&gt;
&lt;h2&gt;What was done?&lt;/h2&gt;
&lt;p&gt;In the summer, with release candidates, there was some refactoring done
that aimed at making Nuitka compile, at least with less errors. One of
the changes that was addressed at the time was the reduction of
exception state to only a value.&lt;/p&gt;
&lt;p&gt;In Python during an exception, you typically have a exception “type”,
“value”, and a “traceback”. And these used to be sort of independent
objects, which then through a process called “normalization” got
aligned. E.g. when raising an exception, you would simply put a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ZeroDivisionError&lt;/span&gt;&lt;/code&gt; as a type, and a string as the value, and only on
normalization, which was attempted to be done as late as possible, the
actual exception object was created.&lt;/p&gt;
&lt;p&gt;For 3.11 now, in some parts (but not all of course), this got reduced,
and making Nuitka cope with that was a bigger task, and even one that
had then introduced a regression to pre-3.11, i.e. affecting other
versions. I had to make a hotfix because of this for the release that
included these changes. This is of course, due to also cleaning up the
code that was changed, to reduce e.g. duplications that were considered
harmless in the past.&lt;/p&gt;
&lt;p&gt;Now, during the 1.3 releases cycle, many more changes have been
addressed. The CPython core is using now “interpreter frames”, which are
lightweight non-objects, and does only create a frame when an exception
is needed. Nuitka on the other hand used to cache frame objects, that it
also created only when needed. Adapting the interactions with the frame
stack appears somewhat solved, but actually poses some bugs when dealing
with generators that raise exceptions, and is currently being analysed.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="the-process"&gt;
&lt;h2&gt;The Process&lt;/h2&gt;
&lt;p&gt;When the goal is getting 3.11 supported (or any later Python, this will
repeat forever), in a first step it just doesn’t compile on the C level
anymore. First, all kinds of changes need to be addressed that show when
compiling on the C level. Or extra time spent to disable some things to
migrate only later (which I tend to not do), but the unfortunate truth
is, that at that point, running with 3.11 to find out things, is not yet
an option.&lt;/p&gt;
&lt;p&gt;Once compiled 3.11 started being executable, it was hard crashing (worst
case) and asserting (good case) like hell. Many assumptions made proved
to be untrue, or things that used to be true, are no more true. That is
pretty normal when you mingle with internal details of course.&lt;/p&gt;
&lt;p&gt;Right now reference leaks are being seen with generators, and so are
crashes. This is probably the same issue, where some link between
objects, some reference to an object is taken, and what is most likely,
in other instance, it is lost, which then causes corrupted objects.
These are among the hardest things to debug in Python, often the symptom
only shows later. Many times development in this phase is about adding
assertions. This is where we are now.&lt;/p&gt;
&lt;p&gt;The next phase then is to run the CPython 3.10 test suite compiled with
3.11 and compare its results to running with plain 3.11, and expect it
to be the same. It is normal for CPython 3.10 tests to fail with 3.11,
and this does two things.&lt;/p&gt;
&lt;p&gt;Either the test passes where it should not, then 3.11 added extra
checks, e.g. making it illegal to provide certain types of inputs that
were legal in the past, or it fails where 3.11 does not, then it
highlights a behavior change or a mistake in the migration. Another case
of course is it crashing. Then some bug in e.g. frame handling or
exception handling might cause that.&lt;/p&gt;
&lt;p&gt;During this phase it is esp. initially very hard to assess where we
stand. Often one bug affects many tests with different symptoms. We we
just look for things that are easy to analyse.&lt;/p&gt;
&lt;p&gt;In the next phase, the 3.11 test suite is used in the same way. This
will often uncover new features, new behaviors, newly allowed things.
For example Nuitka might reject an input, but that is correct for 3.10,
but not for 3.11 anymore, this this will be added.&lt;/p&gt;
&lt;p&gt;This phase has not even started.&lt;/p&gt;
&lt;p&gt;One interesting case is new test coverage. Often is has happened in the
past that something was incompatible with 3.10 already, but that has
never been seen. Of course, in this instance, the modification will be
backported, this is often revealed when running the 3.11 tests compiled
with 3.11 and comparing the result with pure 3.10.&lt;/p&gt;
&lt;p&gt;And this is also not even started. Once the test suite is adapted for
Nuitka’s needs (avoiding random outputs, to make tests comparable e.g.)
this could be started, and would enhance 3.10 compatibility already with
its findings.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="intermediate-results"&gt;
&lt;h2&gt;Intermediate Results&lt;/h2&gt;
&lt;p&gt;Once the Python3.11 more or less well passed the 3.10 test suite without
big issues, experimental support for it will be added. The warning from
above will be given, but the error will cease.&lt;/p&gt;
&lt;p&gt;But only once the CPython 3.11 test suite is completely passing, it will
be added as supported officially. Again, not all tests have to pass
perfectly for this, cosmetic things are not counted of course.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="when"&gt;
&lt;h2&gt;When&lt;/h2&gt;
&lt;p&gt;Very hard to predict. Supporting existing Nuitka is also a side tracking
thing, that makes it unclear how much time I will have for it. But the
worst things with debugging is that I just never know how much time it
will be. In past releases, the time has varied. I do not know at this
time, what will have to be done for support of 3.11, it clearly is one
of the harder ones. But I am hoping these core changes were the bulk of
the work.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benefits-for-older-python-too"&gt;
&lt;h2&gt;Benefits for older Python too&lt;/h2&gt;
&lt;p&gt;When I noticed that the dictionary implementation had heavily changed,
and Nuitka’s “illegal” friendship (accessing internal details of it)
caused it to not compile, step one was to compare current details with
3.10 and find that there are a bunch of things that were added over
time. For example one fast branch that was added to 3.10, Nuitka now has
it too, for 3.6 or higher. So we are also back-porting some speed
improvements.&lt;/p&gt;
&lt;p&gt;Also the allocator of 3.11 changed, and as a result, the allocator for
all older Python will be way faster to use, esp. with platforms that use
DLLs.&lt;/p&gt;
&lt;p&gt;There are other benefits, e.g. 3.10 is exposing free lists (re-usable
objects without going through allocation) it is using, allowing Nuitka
to accelerate dictionary object creation esp. on Windows, and so on.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="expected-results"&gt;
&lt;h2&gt;Expected results&lt;/h2&gt;
&lt;p&gt;People tend to expect that gains from Nuitka and enhancements of CPython
stack up. The truth of the matter is, no they do not. CPython is
applying some tricks that Nuitka already did. Not using its bytecode
will then become less of a benefit, but that’s OK, this is not what
Nuitka is about.&lt;/p&gt;
&lt;p&gt;We need to get somewhere else entirely anyway, in terms of speed up. I
will be talking about PGO and C types a lot in the coming year, that is
at least the hope. That is where the “all in” part kicks in.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="final-words"&gt;
&lt;h2&gt;Final Words&lt;/h2&gt;
&lt;p&gt;Look ma, I posted about something that is not complete. I am getting
better.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/python311-support.html"/>
    <summary>In my all in with Nuitka post, I
promised to give you an update on the current status of Python 3.11
support and Nuitka, and this is the report on my busy bee activities
there.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2022-12-10T11:29:24+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/all-in-with-nuitka.html</id>
    <title>All in with Nuitka</title>
    <updated>2022-12-09T08:22:42+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="all-in-with-nuitka"&gt;

&lt;p&gt;After more than 10 years of working on the Python compiler Nuitka, and
at the age of 50, I have finally decided to take the plunge. My projects
“Nuitka” and “Nuitka commercial” are now my &lt;em&gt;day job&lt;/em&gt;, and I quit my
work in the Air Traffic Community, after working on &lt;a class="reference external" href="https://en.wikipedia.org/wiki/ARTAS"&gt;ARTAS&lt;/a&gt; (a software to create an Air
Situation Picture from radar and other sensors) for 20 years.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="why-now"&gt;
&lt;h1&gt;Why now?&lt;/h1&gt;
&lt;p&gt;That is very good question. I feel I could have done this a long time
ago, and my heart was torn for a while, and also I prepared this for a
while now. Listing back to interviews from 4 years ago, it seems though
as if it had not been on the radar (pun intended).&lt;/p&gt;
&lt;p&gt;So then I launched Nuitka commercial around 1.5 years ago, first as
vapor ware, with early bird customers, and meanwhile it has matured to a
point, where it is the obvious solution to many corporate users, with
big guys picking it up and small business as well. From startups, big
name technology giants, universities, mid sized companies, and from
individuals, I have all kinds of support.&lt;/p&gt;
&lt;p&gt;I liked my old job very much, but it was getting old, and I felt like
Nuitka needs me to fulfil my mission. And my wife needed my help with
driving her to work, which was getting the load to high, something had
to give. And it seems nothing related to what is called Nuitka (my wife,
and the compiler share the name) was going to be that.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="what-will-change"&gt;
&lt;h1&gt;What will change?&lt;/h1&gt;
&lt;p&gt;Already, ever since I launched Nuitka commercial, Nuitka has become way
more of a out of the box experience. It just works, and covers more
packages than ever before, and steps have been taken, to make it
possible to extend this even further with your help. Sure there are
still shortcoming.&lt;/p&gt;
&lt;p&gt;But Nuitka has become very polished, and shows this very much that I
also love details and doing things correctly. I have conducted Nuitka
from day one as an attempt to create a software that would be usable to
the enterprise with a million lines of code, that they cannot check for
unsupported language features, so Nuitka is just fully compatible, to a
level of absurdity.&lt;/p&gt;
&lt;p&gt;Having conducted Nuitka on a level of where a corporate business can
throw it’s code at Nuitka and have it just work, and reliably, this will
only improve now.&lt;/p&gt;
&lt;p&gt;Naturally bugs have happened once in a while, but I was always more
careful. You know, like if this was for safety critical software, on
which lives might depend. Hard to not be affected by that stance.&lt;/p&gt;
&lt;p&gt;So lets talk about other ways I plan to expand.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="nuitka-package-configuration"&gt;
&lt;h1&gt;Nuitka Package Configuration&lt;/h1&gt;
&lt;p&gt;Extending Nuitka with tweaks for package has become increasingly
simpler. Many previous plugins, e.g. for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt;, and
most recently &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt;, and definitely also the Qt binding ones in the
future, have been or will be converted to Yaml configuration applied by
generic plugins that deal with DLLs, data-files, tweaks (called
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt;) etc.&lt;/p&gt;
&lt;p&gt;Adding stuff there is simple, and as of recently, there is even
documentation for it. This is going to be explained in a series of posts
detailing Nuitka Package Configuration, under the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;package_config&lt;/span&gt;&lt;/code&gt;
tag.&lt;/p&gt;
&lt;p&gt;I must say it’s so much fun, I love working with it. But the goal is for
this to have you join it, and PRs are indeed starting to come in more
frequently it seems from first glance, but I need to make this more
known.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="streaming"&gt;
&lt;h1&gt;Streaming&lt;/h1&gt;
&lt;p&gt;I have experimented with streaming in the past, and I absolutely love
it. Without my day job, effectively working two jobs at the same time, I
expect to have the time to do more of them in December and then on a
regular basis.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python-3-11"&gt;
&lt;h1&gt;Python 3.11&lt;/h1&gt;
&lt;p&gt;There will be a separate post on this issue later this week. I am
scrambling to add support for it and it feels very far already. Many
basic tests already work, but more debugging will be needed. I hope
Nuitka 1.3 will add support for it, at least on the usual experimental
level.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-you-can-help"&gt;
&lt;h1&gt;How you can help?&lt;/h1&gt;
&lt;p&gt;Please become a &lt;a class="reference external" href="https://nuitka.net/doc/commercial.html"&gt;subscriber of Nuitka commercial&lt;/a&gt;, even if you do not need the
IP protection features it mostly has. All essential packaging and
performance features are free, and I have put incredible amounts of
works in this, and I need to now make a living off it.&lt;/p&gt;
&lt;p&gt;Right now, I am far from being able to sustain my income from it, and I
am taking a risk with this effort, hoping for support from you.&lt;/p&gt;
&lt;p&gt;Nuitka commercial makes creating a Windows Service a blast. It has a
PySide2 that is compatible with Nuitka (I did make PySide6 compatible
myself, and backported it to PySide2), so if you need to stay on old
software. And for IP protection, it is just incredibly important to not
ship bytecode at all, and with Nuitka commercial, it protects your data
and files at runtime too.&lt;/p&gt;
&lt;p&gt;I am bad at marketing, but good at software, which is one more reason to
purchase it. You know you love these kinds of people. Was that good
marketing? Also, there are share buttons on this page. Please try them
out and let people know about this.&lt;/p&gt;
&lt;p&gt;In future postings, I will make it a regular thing to ask for help with
some of the technical tasks. Stay tuned, there might be something that
you can help with.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="becoming-more-active"&gt;
&lt;h1&gt;Becoming more active&lt;/h1&gt;
&lt;p&gt;I am the kind of person that would much rather do good stuff than to
talk about it, like when it finally supports Python 3.11, normal old me
would just mention it maybe on Twitter once, and have it in the
changelog only.&lt;/p&gt;
&lt;p&gt;I need to get away from that. I need to resume TWN (This week in Nuitka)
and have all plans to do it. Obviously I can get caught up in things,
and may just always do it later when there is more or better news.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/all-in-with-nuitka.html"/>
    <summary>After more than 10 years of working on the Python compiler Nuitka, and
at the age of 50, I have finally decided to take the plunge. My projects
“Nuitka” and “Nuitka commercial” are now my day job, and I quit my
work in the Air Traffic Community, after working on ARTAS (a software to create an Air
Situation Picture from radar and other sensors) for 20 years.</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="package_config" label="package_config"/>
    <category term="stream" label="stream"/>
    <published>2022-12-09T08:22:42+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-12.html</id>
    <title>Nuitka Release 1.2</title>
    <updated>2022-11-26T09:23:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-2"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a large amount of new compatibility features and a
few new optimization, while again consolidating what we have.
Scalability should be better in many cases.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;thinc&lt;/span&gt;&lt;/code&gt; backend. Fixed in
1.1.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; statements with unnamed star matches could
give incorrect results. Fixed in 1.1.1 already.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="k"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
         &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="c1"&gt;# y had wrong value here.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: Fix, file reader objects must convert to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; objects.
Fixed in 1.1.1 already.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# This was the `repr` rather than a path value, but it must be usable&lt;/span&gt;
&lt;span class="c1"&gt;# like that too.&lt;/span&gt;
&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;importlib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;package_name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;joinpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;lala&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data file of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;echopype&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.1.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove non-sense warning of compiled &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyscf&lt;/span&gt;&lt;/code&gt;. Fixed in
1.1.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, in LTO mode using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;incbin&lt;/span&gt;&lt;/code&gt; can fail, switch to source
mode for constants resources. Fixed in 1.1.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sv_ttk&lt;/span&gt;&lt;/code&gt; module. Fixed in 1.1.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, was no longer correcting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; path, this was a
regression preventing CPython for creating properly portable binary.
Fixed in 1.1.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, main binary was not included in signing command. Fixed in
1.1.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;orjson&lt;/span&gt;&lt;/code&gt;. Due to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zoneinfo&lt;/span&gt;&lt;/code&gt; not being automatically included anymore, this was
having a segfault. Fixed in 1.1.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shapely&lt;/span&gt;&lt;/code&gt;. Fixed in 1.1.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Ignore extension module of non-matching architecture. Some
wheels contain extension modules for only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x86_64&lt;/span&gt;&lt;/code&gt; arch, and others
contain them only for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;arm64&lt;/span&gt;&lt;/code&gt;, preventing the standalone build.
Fixed in 1.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt; dependencies. Fixed in 1.1.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, packages available through relative import paths could be
confused with the same ones imported by absolute paths. This should
be very hard to trigger, by normal users, but was seen during
development. Fixed in 1.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Apply import hacks for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywin32&lt;/span&gt;&lt;/code&gt; modules only on
Windows, otherwise it can break e.g. macOS compilation. Fixed in
1.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: More robust DLL dependency caching, otherwise e.g. a Windows
update can break things. Also consider plugin contribution, and
Nuitka version, to be absolutely sure, much like we already do for
bytecode caching. Fixed in 1.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;seaborn&lt;/span&gt;&lt;/code&gt; needs the same workaround as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt;
for corruption with MSVC. Fixed in 1.1.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;options-nanny&lt;/span&gt;&lt;/code&gt; was no longer functional and therefore
failed to warn about non working options and package usages. Fixed in
1.1.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Do not use extension modules of non-matching architecture.
Fixed in 1.1.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, resolving symlinks could fail for spaces in paths.
Fixed in 1.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing DLL for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lightgbm&lt;/span&gt;&lt;/code&gt; module. Fixed in 1.1.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Respect &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; module variable. It is now possible
to have a module level change of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; but still get compatible
behavior with Nuitka. Fixed in 1.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Make sure we respect &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; overloads in the
builtin module. Fixed in 1.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the anti-bloat replacement code for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.testing&lt;/span&gt;&lt;/code&gt; was
missing a required function. Fixed in 1.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.import_module&lt;/span&gt;&lt;/code&gt; static optimization was mishandling
a module name of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.&lt;/span&gt;&lt;/code&gt; with a package name given. Fixed in 1.1.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, some extension modules use wrong suffixes in self
references, we need to not complain about this kind of error. Fixed
in 1.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, do not make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes.wintypes&lt;/span&gt;&lt;/code&gt; a hard import on non-Windows.
Nuitka asserted against it failing, where some code handles it
failing on non-Windows platforms. Fixed in 1.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vedo&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.1.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi&lt;/span&gt;&lt;/code&gt; plugin did always set &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;GI_TYPELIB_PATH&lt;/span&gt;&lt;/code&gt;
even if already present from user code. Also it did not handle errors
to detect its value during compile time. Fixed in 1.1.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlalchemy&lt;/span&gt;&lt;/code&gt; to have all
SQL backends working. Fixed in 1.1.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support Nixpkgs’s default non-writable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;HOME&lt;/span&gt;&lt;/code&gt; directory.
Fixed in 1.1.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, distribution metadata name and package name need not align, need
to preserve the original looked up name from
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata.distribution&lt;/span&gt;&lt;/code&gt; call. Fixed in 1.1.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, catch usage of unsupported &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CLCACHE_MEMCACHED&lt;/span&gt;&lt;/code&gt; mode
with MSVC compilation. It is just unsupported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, file version was spoiled from product version if it was
the only version given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The default for file description in version information was
not as intended.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Workaround for PyQt5 as contained in Anaconda providing
wrong paths from the build machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: After signing a binary with a certificate, compiling the next
one was crashing on a warning about initially creating an ad-hoc
binary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, detect case of non-writable cache path, make explaining error
exit rather than crashing attempting to write to the cache.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyobjc&lt;/span&gt;&lt;/code&gt; in version 9.0 or higher.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3.11: For now prevent the execution with 3.11 and give a
warning to the user for a not yet supported version. This can be
overridden with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--experimental=python311&lt;/span&gt;&lt;/code&gt; but at this times will
not compile anything yet due to required and at this time missing
core changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-sign-notarization&lt;/span&gt;&lt;/code&gt; that signs with
runtime signature, but requires a developer certificate from Apple.
As its name implies, this is for use with notarization for their App
store.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DLLs used via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;delvewheel&lt;/span&gt;&lt;/code&gt; were so far only handled in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zmq&lt;/span&gt;&lt;/code&gt;
plugin, but this has been generalized to cover any package using it.
With that, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shapely&lt;/span&gt;&lt;/code&gt; just works. This probably helps many
other packages as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled_constant__&lt;/span&gt;&lt;/code&gt; attributes to
compiled functions.&lt;/p&gt;
&lt;p&gt;With this, it can be decided per function what it is and bridges like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyobjc&lt;/span&gt;&lt;/code&gt; can use it to create better code on their side for
constant value returning functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;support_info&lt;/span&gt;&lt;/code&gt; check to Nuitka package format. Make it clear
that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyobjc&lt;/span&gt;&lt;/code&gt; is only supported after &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;9.0&lt;/span&gt;&lt;/code&gt; by erroring out if it
has a too low version. It will not work at all before that version
added support in upstream. Also using this to make it clear that
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;opencv-python&lt;/span&gt;&lt;/code&gt; is best supported in version 4.6 or higher. It
seems e.g. that video capture is not working with 4.5 at this time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--report-template&lt;/span&gt;&lt;/code&gt; which can be used to provide Jinja2
templates to create custom reports, and refer to built-in reports, at
this time e.g. a license reports.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Trust the absence of a few selected hard modules and convert those to
static raises of import errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For conditional nodes where only one branch exits, and the other does
not, no merging of the trace collection should happen. This should
enhance the scalability and leads to more static optimization being
done after these kinds of branches on variables assigned in such
branches.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;condition1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;KeyError&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;condition2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="c1"&gt;# Here, &amp;quot;a&amp;quot; is known to be assigned, but before it was only &amp;quot;maybe&amp;quot;&lt;/span&gt;
&lt;span class="c1"&gt;# assigned, like &amp;quot;b&amp;quot; would have to be since, the branch may or may&lt;/span&gt;
&lt;span class="c1"&gt;# not have been taken.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not merge tried blocks that are aborting with an exception handler
that is not aborting. This is very similar to the change for
conditional statements, again there is a control flow branch, that
may have to be merged with an optional part, but sometimes that part
is not optional from the perspective of the code following.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="c1"&gt;# potentially raising, but not aborting code&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# this aborts&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="c1"&gt;# potentially raising, but not aborting code&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="c1"&gt;# Here, &amp;quot;a&amp;quot; is known to be assigned, but before it was only &amp;quot;maybe&amp;quot;&lt;/span&gt;
&lt;span class="c1"&gt;# assigned, like &amp;quot;b&amp;quot; would have to be since, the branch may or may&lt;/span&gt;
&lt;span class="c1"&gt;# not have been taken.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception matches were annotating a control flow escape and an
exception exit, even when it is known that no error is possible to be
happening that comparison.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;ImportError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# an exception match is done here, that cannot raise&lt;/span&gt;
   &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trust &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata.PackageNotFoundError&lt;/span&gt;&lt;/code&gt; to exist, with this
some more metadata usages are statically optimized. Added in 1.1.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handle constant values from trusted imports as trusted values. So
far, trusted import values were on equal footing to regular
variables, which on the module level could mean that no optimization
was done, due to control flow escapes happening.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Known to be False at compile time.&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;typing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TYPE_CHECKING&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;TYPE_CHECKING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;something&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;normally_unused_unless_type_checking&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In this code example above, the static optimization was not done
because the value may be changed on the outside. However, for trusted
constants, this is no longer assumed to be happening. So far only
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;if&lt;/span&gt; &lt;span class="pre"&gt;typing.TYPE_CHECKING:&lt;/span&gt;&lt;/code&gt; using code had been optimized.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Use sections for main binary constants binary blob rather than
C source code (which we started in a recent hotfix due to LTO issues
with incbin) and onefile payload. The latter enables notarization of
the onefile binary as well and makes it faster to unpack as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Do not include DLLs from SxS. For PyPI packages these are
generally unused, and self compiled modules won’t be SxS
installations either. We can add it back where it turns out needed.
This avoids including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;comctl32&lt;/span&gt;&lt;/code&gt; and similar DLLs, which ought to
come from the OS, and might impede backward compatibility only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disabled C compilation of very large &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;azure&lt;/span&gt;&lt;/code&gt; modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The per module usage information of other modules was only updated in
first pass was used in later passes. But since they can get optimized
away, we have to update every time, avoiding to still include unused
modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Fight the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xarray&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pint&lt;/span&gt;&lt;/code&gt;,
adding a mode controlling its use. This is however still incomplete
and needs more work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the anti-bloat configuration for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rich.pretty&lt;/span&gt;&lt;/code&gt; introduced a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; that went unnoticed. In the future compilation will
abort when this happens.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for including DLLs of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;llvmlite.binding&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywin32&lt;/span&gt;&lt;/code&gt; through &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; import.
This seems rather pointless and follows an optimization done for the
inline copy of Nuitka already, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt; code path works just
fine, and this may well be the only reason why &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywin32&lt;/span&gt;&lt;/code&gt; is
included, which is by itself relatively large.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cache directory contents when scanning for modules. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt;
and package directories were listed over and over, wasting time
during the import analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Was not caching not found modules, but retrying every
time for each usage, potentially wasting time during import analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Initial work to avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; in patsy, it is however
incomplete.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;User Manual: Explain how to create 64/32 bits binaries on Windows,
with there being no option to control it, this can otherwise be a bit
unobvious that you have to just use the matching Python binary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added an example for a cached onefile temporary location spec to
the help output of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-tempdir-spec&lt;/span&gt;&lt;/code&gt; to make cached more
easy to achieve in the proper way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Quote command line options with space in value better, no need to
quote an affected command line option in its entirety, and it looks
strange.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Catch user error of disabling the console without using the
bundle mode, as it otherwise it has no effect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Warn about not providing an icon with disabled console,
otherwise the dock icon is empty, which just looks bad.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Also need to depend on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;glob2&lt;/span&gt;&lt;/code&gt; packages which the yaml
engine expects to use when searching for DLLs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Pertain inline copies of modules in very old builds, there is
e.g. no &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;glob2&lt;/span&gt;&lt;/code&gt; for older releases, but only recent Debian releases
need very pure packages, our backport doesn’t have to do it right.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: More reliable detection of Homebrew based Python. Rather than
checking file system via its &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sitecustomize&lt;/span&gt;&lt;/code&gt; contents. The
environment variables are only present to some usages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Installations with pip did not include all license, README files,
etc. which however was intended. Also the attempt to disable bytecode
compilation for some inline copies was not effective yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renamed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyzmq&lt;/span&gt;&lt;/code&gt; plugin to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;delvewheel&lt;/span&gt;&lt;/code&gt; as it is now absolutely
generic and covers all uses of said packaging technique.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Caching: Use cache directory for cached downloads, rather than
application directory, which is just wrong. This will cause all
previously cached downloads to become unused and repeated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Updated development requirements to latest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yamllint&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code: Added recommendation for extension for Debian packaging
files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added warning for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5&lt;/span&gt;&lt;/code&gt; usage, since its support is very
incomplete. Made the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt6&lt;/span&gt;&lt;/code&gt; warning more concrete. It seems only
Qt threading does not work, which is of course still significant.
Instead PySide2 and PySide6 are recommended.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Have dedicated options group for onefile, the spec for the
temporary files is not a Windows option at all anymore. Also move the
warnings group to the end, people need to see the inclusion related
group first.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Explain how to create 64/32 bits binaries on Windows,
which is not too obvious.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved PySide plugins DLL search extra paths to the Yaml
configuration. In this way it is not dependent on the plugin being
active, avoiding cryptic errors on macOS when they are not found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Avoid duplicate link libraries due to casing. We are now
normalizing the link library names, which avoids e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Shell32&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shell32&lt;/span&gt;&lt;/code&gt; to be in the result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanups to prepare a PyLint update that so otherwise failed due to
encountered issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Pass so called build definitions for generically. Rather
than having dedicated code for each, and plugins can now provide them
and pass their index to the scons builds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Moved file handling code to common code reducing code
duplication and heavily cleaning up the bootstrap code generally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: The CRC32 checksum code was duplicated between constants
blob and onefile, and has moved to shared code, with an actual
interface to take the checksum.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spelling cleanups resumed, e.g. this time more clearly distinguishing
between &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;run&lt;/span&gt; &lt;span class="pre"&gt;time&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;runtime&lt;/span&gt;&lt;/code&gt;, the first is when the program
executes, but the latter can be an environment provided by a C
compiler.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Tests: Added test that applies anti-bloat configuration to all found
modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: Tests: Avoid including unused &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.tools&lt;/span&gt;&lt;/code&gt; code in
reflected test, which should make it faster. The compiler itself
doesn’t use that code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is again mainly a consolidation of previous release, as
well as finishing off existing features. Optimization added in previous
releases should have all regressions fixed now, again with a strong
series of hotfixes.&lt;/p&gt;
&lt;p&gt;New optimization was focused around findings with static optimization
not being done, but still resulting in general improvements. Letting
static optimization drive the effort is still paying off.&lt;/p&gt;
&lt;p&gt;Scalability has seen improvements through some of the optimization, this
time a lot less anti-bloat work has been done, and some things are only
started. The focus will clearly now shift to making this a community
effort. Expect postings that document the Yaml format we use.&lt;/p&gt;
&lt;p&gt;For macOS specifically, with the sections work, onefile should launch
faster, should be more compatible with signing, and can now be used in
notarization, so for that platform, things are more round.&lt;/p&gt;
&lt;p&gt;For Windows, a few issues with version information and onefile have been
addressed. We should be able to use memory mapped view on this platform
too, for faster unpacking of the payload, since it doesn’t have to go
through the file anymore.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-12.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2022-11-26T09:23:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-11.html</id>
    <title>Nuitka Release 1.1</title>
    <updated>2022-10-16T10:56:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-1"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a large amount of new compatibility features,
while consolidating what we have. Scalability should be better in some
cases.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Standalone: Enhanced dependency scan of dependent DLLs to forward the
containing package, so it can be searched in as well. This fixed at
least PySide on macOS. Fixed in 1.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Enhanced dependency detection to use normalized paths and
therefore to be more stable. Fixed in 1.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;networkx&lt;/span&gt;&lt;/code&gt; package which uses new
support for a function decorator trying to copy function default
values. Fixed in 1.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Include data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas.io.format&lt;/span&gt;&lt;/code&gt; package. This
one has Jinja2 template files that will be needed when using this
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10: Fix, could crash in case a class was not giving &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt;
arguments, but the user did attempt to match them. This happened e.g.
with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt; objects. Fixed in 1.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files needed for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyenchant&lt;/span&gt;&lt;/code&gt; package. Fixed
in 1.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10: Fix, matching sequence with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;as&lt;/span&gt;&lt;/code&gt; assignments in them
didn’t check for sub-pattern given. Fixed in 1.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, do not attempt to list non-existent &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; entries
on Windows, these can crash the dependency detection otherwise. Fixed
in 1.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, on newer Linux, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;linux-vdso.so.1&lt;/span&gt;&lt;/code&gt; appears in
output of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ldd&lt;/span&gt;&lt;/code&gt; in a way that suggests it may exist, which of
course it does not, this is a kernel virtual DLL. Fixed in 1.0.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, comparison expressions could give wrong results as a regression
of the new release. Fixed in 1.0.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, on older Python (before 3.6), it could crash on data files
defined in the Yaml config. Fixed in 1.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, binary operations could give wrong results as a regression of
the new release. Fixed in 1.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyzbar&lt;/span&gt;&lt;/code&gt; package. Fixed in 1.0.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, empty directory structures were not working anymore
due to a regression in the last release. Fixed in 1.0.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, detected Pythons from Windows registry may of course
fail to execute, because they were e.g. manually deleted. This would
show e.g. in onefile compression. Fixed in 1.0.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Fix, using a too old &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zstandard&lt;/span&gt;&lt;/code&gt; without finding another
Python with a suitable one, lead to run time unpacking errors. Fixed
in 1.0.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the inline copy of Jinja2 imported &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;logging&lt;/span&gt;&lt;/code&gt; for no good
reason, which lead to errors for users who have a module of the same
name, that it was then using instead. Fixed in 1.0.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, disable LTO mode for Anaconda Python, it is known to not work.
Fixed in 1.0.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Fix, no need to insist on icon path for onefile anymore. Fixed
in 1.0.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, the new version &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;certifi&lt;/span&gt;&lt;/code&gt; was not working on
Windows and 3.10 anymore. Fixed in 1.0.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for more &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rapidfuzz&lt;/span&gt;&lt;/code&gt; implicit
dependencies. Fixed in 1.0.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vibora&lt;/span&gt;&lt;/code&gt;. Fixed in 1.0.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, must not expose module name objects to Python import hooks.
Fixed in 1.0.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, calls to bound methods of string values generated incorrect
calls. Fixed in 1.0.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, do not crash in version detection on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt;&lt;/code&gt; error exit querying
of its version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added back support for older versions of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyzmq&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Ignore &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; elements that fail to be listed as a
directory. It appears e.g. on Windows, folders can exist, despite
being unusable in fact. These can then cause errors in DLL dependency
scan. Also avoid having &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; set when executing dependency
walker, it appears to use it even if not asked to.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tzlocal&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;complex&lt;/span&gt;&lt;/code&gt; literals were not working for mappings
in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; statements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; built-in expressions were not properly annotating
exception raises, where the value cannot raise on truth check.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;agscheduler&lt;/span&gt;&lt;/code&gt; package. Plugins
must be done manually still with explicit &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shapely&lt;/span&gt;&lt;/code&gt; in Anaconda as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Fix, versioned dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libzstd&lt;/span&gt;&lt;/code&gt; should also be in
package, this should restore Nuitka package builds for Debian Jessie.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vtk&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywin32&lt;/span&gt;&lt;/code&gt; in our appdirs usage, it might
be a broken installation and is optional to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;appdirs&lt;/span&gt;&lt;/code&gt; anyway, which
then will fallback to using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt; to make the lookups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for more &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt; versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Adding support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mkl&lt;/span&gt;&lt;/code&gt; implicit DLL usage in
Anaconda.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jsonschema&lt;/span&gt;&lt;/code&gt; with Python 3.10.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyfiglet&lt;/span&gt;&lt;/code&gt; fonts data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Avoid gcc linker command line length limits for module mode
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data file of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distributed.config&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; GUI on Linux, the Qt platform
plugin is now included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the anti-bloat configuration for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.testing&lt;/span&gt;&lt;/code&gt; tools exposed
an incomplete &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;suppress_warnings&lt;/span&gt;&lt;/code&gt; replacement that could lead to
errors in some functions of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix DLL dependency caching on Windows, need to consider
DLL content of course too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torchvision&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torchvision&lt;/span&gt;&lt;/code&gt; on Anaconda as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;panda3d&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, need to make sure to use UTF-8 encoding for define
values like company name. Otherwise the local system encoding is
used, but the C compiler expects UTF-8 in wide literals. This may
crash of give wrong results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;facenet_torch&lt;/span&gt;&lt;/code&gt; data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libstdc++.so&lt;/span&gt;&lt;/code&gt; on Linux or else e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; will
not work with system library.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, can have file version without a company name.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3.10: Added support for assignments in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; alternatives
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;|&lt;/span&gt;&lt;/code&gt; syntax.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Register Nuitka meta path based loader with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; such that checking resource presence with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;has_resource&lt;/span&gt;&lt;/code&gt; works too. This should also add support for using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jinja2.PackageLoader&lt;/span&gt;&lt;/code&gt;, previously only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jinja2.FileSystemLoader&lt;/span&gt;&lt;/code&gt;
worked. Fixed in 1.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Make function &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__defaults__&lt;/span&gt;&lt;/code&gt; attribute size
changeable. For a long time, this was a relatively big issue for some
packages, but now this is supported as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata.distribution&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_metadata.distribution&lt;/span&gt;&lt;/code&gt; functions as well
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata.metadata&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_metadata.metadata&lt;/span&gt;&lt;/code&gt;
functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Added support for including other binaries than the main
executable in the payload. So far on non-Windows, we only made the
main binary executable, hard coded, and nothing else. But Some
things, e.g. Qt web engine, do require binaries to be used, and these
no longer have the issue of missing x-bit on macOS and Linux now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Resolve executable path when called through symbolic
link, which makes file resolutions work properly for it, for this
type of installing it in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PATH%&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resources.files&lt;/span&gt;&lt;/code&gt; with
compiled modules.&lt;/p&gt;
&lt;p&gt;It returns traversable objects, which can be used to opens files,
checks them, etc. and this e.g. allows &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jsonschema&lt;/span&gt;&lt;/code&gt; to work with
Python 3.10, despite bugs in CPython’s compatibility layer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added interface method to specify filename patterns with package
data inclusion option, making &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data&lt;/span&gt;&lt;/code&gt; usable in
many more cases, picking the only files or file types you want. You
can now use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data=package_name=*.txt&lt;/span&gt;&lt;/code&gt; and select
only a subset of package data files in this way. Before this, it
included everything and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--noinclude-data-files&lt;/span&gt;&lt;/code&gt; would have to be
used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;runtime&lt;/span&gt;&lt;/code&gt; signing an experimental option.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consistently allow &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; conditions for all package configuration
elements, e.g. also DLLs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added method to overload to work on standalone binary
specifically. This makes it easier to only modify that specific
binary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added support for regular expressions in anti-bloat
replacements, with new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;replacements_re&lt;/span&gt;&lt;/code&gt; code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Add support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path&lt;/span&gt;&lt;/code&gt; hard module imports along with
specialized nodes for file tests &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.exists&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.isfile&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.isdir&lt;/span&gt;&lt;/code&gt; aiming at tracking used
files, producing warnings about missing files in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;concurrent&lt;/span&gt;&lt;/code&gt; standard library package
automatically. This avoids the inclusion of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; which
we essentially had reverted during last release cycle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zoneinfo&lt;/span&gt;&lt;/code&gt; standard library package
automatically. It has many data files and is often not used (yet).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncio&lt;/span&gt;&lt;/code&gt; standard library package
automatically anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid compilation of large generated codes in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncua&lt;/span&gt;&lt;/code&gt;
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compile time optimize &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources.iter_entry_points&lt;/span&gt;&lt;/code&gt; too, such
that these can be used to resolve plugin modules, which helps with
adding support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;agscheduler&lt;/span&gt;&lt;/code&gt; package plugins. Note that these
still need to be manually included with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; but now
that works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For known truth values of the right hand side of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt;
conditions, reduce the expression as far as possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added dedicated assignment node for hard imports, which then are
propagated in classes as well, allowing for more static optimization
for code on the class level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added linker options to make static &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--static-libpython&lt;/span&gt;&lt;/code&gt; work with
clang on Linux as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Make sure &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; is loaded relative to the executable.
This is needed for at least Anaconda Python.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, need to search environment specific DLL paths and only
then global paths, otherwise mixed Python versions will not work
correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Remove IPython usage in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rich&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doctest&lt;/span&gt;&lt;/code&gt; dependency when using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyrect&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Some &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; removals from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytorch&lt;/span&gt;&lt;/code&gt; using
libraries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep the Scons report items sorted, or else it varies for the hashing
of dependencies with Python versions before 3.6, causing cache misses
without need.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;UI: Output the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.cmd&lt;/span&gt;&lt;/code&gt; file created (if any) on Windows, e.g. when
run in a virtualenv or for uninstalled Python versions, it will
otherwise not run in accelerated mode, but previously the output
suggested to run the executable directly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Enhanced command line option description of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-plugin-directory&lt;/span&gt;&lt;/code&gt; which is frequently misunderstood.
That option barely does what people want it to do. Point them to
using the other options that are easy to use and will work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Specified needed Python version for use in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-for-scons&lt;/span&gt;&lt;/code&gt;
so users can know ahead of time what versions are suitable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added information about data files including, optimization
times per module, active plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Repaired offline DLL dependency listing tool, such that it
can be used during Windows DLL analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--xml&lt;/span&gt;&lt;/code&gt; accept a filename for the node tree dump, and change
it so it can be executed in addition to actual compilation. This way
we need not be super-robust about keeping stdout clean, to not break
XML parsing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Avoid useless warning about PySide2 plugin usage if another
Qt plugin is actually selected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Catch error of directories being used as data files where plain
files are expected and point out that other options must be used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added section about accessing files in standalone mode
too, so people can make sure it works properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%TEMP%&lt;/span&gt;&lt;/code&gt; folder should not by itself prevent cached
onefile mode, only really variable paths should. People may want to
have this as some kind of temporary cache still.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Catch user error of using elements, that resolve to absolute
values in the middle of path specs, so using e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;something/%PROGRAM%&lt;/span&gt;&lt;/code&gt; is now a mistake caught at compile time.
These values can only be at the start of spec values naturally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Updated to newer version of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rstfmt&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Nicer error message when a forbidden import is requested as an
implicit import by a plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.11: Adapted to allocator and exception state changes, but
more will be needed to compile at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code: Find &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format&lt;/span&gt;&lt;/code&gt; from the recommended C++ extension
of Visual Code, which makes it finally available on macOS easily too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Quote command line argument values as necessary when stating them
in the logging. Otherwise they are not directly usable on the shell
and also less readable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Do not list fake modules as used debian packages codes, which
could e.g. happen with the pre-load code of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; if that
is from a Debian package. Fake packages should not be mentioned for
these lists though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka-Python: Added support to set link time flags coming from
statically included packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For our &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt; trick of splitting files in two parts (mostly to
setup import paths for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; package), make sure the second
parts starts with a new line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added more usable form &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--output-filename&lt;/span&gt;&lt;/code&gt; to specify the output
filename, the short form has become barely usable after we switched
to enforcing no space separation for command line arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Check if output filename’s directory exists ahead of time, and
error exit if not, otherwise compilation crashed only in the very
end, trying to create the final result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: When exiting with no error code, do not use red color or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;FATAL&lt;/span&gt;&lt;/code&gt; error annotation, that is not justified.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Make sure the Yaml auto-format does not change effective
contents.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Added ability to limit autoformat by file type, which can be
handy when e.g. only the yaml files should be scanned.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-onefile-tempdir-spec&lt;/span&gt;&lt;/code&gt; alias of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-tempdir-spec&lt;/span&gt;&lt;/code&gt; option, it is no longer Windows specific.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Prefer single quotes rather than double quotes in our package
configuration Yaml files, otherwise esp. regular expressions with
escapes become very confusing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move import hacks to general mechanism in Yaml package configuration
files. This is for extra paths from package names or from directory
paths relative to the package. This removes special purpose code from
core code paths and allows their reuse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Again more spelling cleanups have been done, to make the code cleaner
to read and search.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified how plugins treat iteration over their value list, and how
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; condition is applied for the various kinds of sections.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Output compilation command that failed during coverage taking, which
makes it unnecessary to attempt to reconstruct what happened from
test modes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added coverage for comparisons that need argument swaps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow more time in onefile keyboard signal test, otherwise it can be
a race on slow machines, e.g. emulated machines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: Added support for running a local web server.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is mainly a consolidation of previous release. Optimization
added in previous release did in fact introduce regressions, that needed
to be addressed and were cause for relatively many hotfixes.&lt;/p&gt;
&lt;p&gt;The Yaml Nuitka Package Configuration feature is getting ever more
powerful, but is not one bit more documented, such that the community as
a whole is not yet capable of adding missing dependencies, data files,
DLLs, and even anti-bloat patches.&lt;/p&gt;
&lt;p&gt;New optimization was focused around compatibility with very few
exceptions, where the non-automatic standard library work is standing
out, and allows for smaller binaries in many cases.&lt;/p&gt;
&lt;p&gt;Scalability has seen improvements through a few optimization, but mainly
again with anti-bloat work being done. This is owed to the fact that
consolidation was the name of the game.&lt;/p&gt;
&lt;p&gt;For Anaconda specifically, a lot more software is covered, and
generally, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; related tools are now working better,
but it seems DLL handling will remain problematic in many instances.&lt;/p&gt;
&lt;p&gt;The compilation report contains much more information and is getting
there is terms of completeness. At some point, we should ask for it in
bug reports.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-11.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2022-10-16T10:56:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-10.html</id>
    <title>Nuitka Release 1.0</title>
    <updated>2022-08-16T13:45:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-1-0"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a large amount of new features, while
consolidating what we have with many bug fixes. Scalability should be
dramatically better, as well as new optimization that will accelerate
some code quite a bit. See the summary, how this release is paving the
way forward.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes.decode&lt;/span&gt;&lt;/code&gt; with only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;errors&lt;/span&gt;&lt;/code&gt; argument given
was not working. Fixed in 0.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: Fix, the accelerate mode &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.cmd&lt;/span&gt;&lt;/code&gt; file was not working
correctly. Fixed in 0.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Fix, the bootstrap when waiting for the child, didn’t
protect against signals that interrupt this call. This only affected
users of the non-public &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-tempdir&lt;/span&gt;&lt;/code&gt; option on Linux, but
with that becoming the default in 1.0, this was discovered. Fixed in
0.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; compile time generated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Distribution&lt;/span&gt;&lt;/code&gt; values
could cause issues with code that put it into calls, or in tried
blocks. Fixed in 0.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Xlib&lt;/span&gt;&lt;/code&gt; package. Fixed in
0.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, the package configuration for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wx&lt;/span&gt;&lt;/code&gt; had become invalid
when restructuring the Yaml with code and schema disagreeing on
allowed values. Fixed in 0.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.format&lt;/span&gt;&lt;/code&gt; with a single positional argument didn’t
generate proper code and failed to compile on the C level. Fixed in
0.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the type shape of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.count&lt;/span&gt;&lt;/code&gt; result was wrong. Fixed in 0.9.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Fix, the warning about collision of just compiled package and
original package in the same folder hiding the compiled package
should not apply to packages without an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__.py&lt;/span&gt;&lt;/code&gt; file, as
those do &lt;strong&gt;not&lt;/strong&gt; take precedence. Fixed in 0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Fix, the fallback to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lldb&lt;/span&gt;&lt;/code&gt; from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gdb&lt;/span&gt;&lt;/code&gt; when using the
option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debugger&lt;/span&gt;&lt;/code&gt; was broken on anything but Windows. Fixed in
0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8: The module &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata&lt;/span&gt;&lt;/code&gt; was not recognized
before 3.9, but actually 3.8 already has it, causing the compile time
resolution of package versions to not work there. Fixed in 0.9.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, at least on macOS we should also scan from parent
folders of DLLs, since they may contain sub-directories in their
names. This is mostly the case, when using frameworks. Fixed in 0.9.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added package configuration for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5&lt;/span&gt;&lt;/code&gt; to require
onefile bundle mode on macOS, and recommend to disable console for
PyQt6. This is same as we already do for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt;.
Fixed in 0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Removed stray macOS onefile bundle package configuration
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pickle&lt;/span&gt;&lt;/code&gt; module which must have been added in error. Fixed in
0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Catch user error of attempting to compile the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__.py&lt;/span&gt;&lt;/code&gt;
rather than the package directory. Fixed in 0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, hard name import nodes failed to clone, causing issues in
optimization phase. Fixed in 0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, avoid warnings given with gcc 11. Fixed in 0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, dictionary nodes where the operation itself has no effect, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict.copy&lt;/span&gt;&lt;/code&gt; were not properly annotating that their dictionary
argument could still cause a raise and have side effects, triggering
an assertion violation in Nuitka. Fixed in 0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pynput&lt;/span&gt;&lt;/code&gt; implicit dependencies on Linux. Fixed in
0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, boolean condition checks on variables converted immutable
constant value assignments to boolean values, leading to incorrect
code execution. Fixed in 0.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9: Fix, could crash on generic aliases with non-hashable
values. Fixed in 0.9.3 already.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;any&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, an iteration over &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.version_info&lt;/span&gt;&lt;/code&gt; was falsely
optimized into a tuple, which is not always compatible. Fixed in
0.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xgboost&lt;/span&gt;&lt;/code&gt; package. Fixed in 0.9.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data file for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;text_unidecode&lt;/span&gt;&lt;/code&gt; package. Fixed in
0.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;swagger_ui_bundle&lt;/span&gt;&lt;/code&gt; package. Fixed
in 0.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;connexion&lt;/span&gt;&lt;/code&gt; package. Fixed in
0.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn.utils&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rapidfuzz&lt;/span&gt;&lt;/code&gt;. Fixed in 0.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10: Fix, the reformulation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; statements could
create nodes that are used twice, causing code generation to assert.
Fixed in 0.9.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, module objects removed from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.modules&lt;/span&gt;&lt;/code&gt; but still used could
lack a reference to themselves, and therefore crash due to working on
a released module variables dictionary. Fixed in 0.9.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the MSVC compiles code generated for SciPy 1.8 wrongly. Added a
workaround for that code to avoid triggering it. Fixed in 0.9.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.format&lt;/span&gt;&lt;/code&gt; where the result is not used, could
crash the compiler during code generation. Fixed in 0.9.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: For DLLs on macOS and Anaconda, also consider the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib&lt;/span&gt;&lt;/code&gt;
directory of the root environment, as some DLLs are otherwise not
found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, allow &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nonlocal&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;global&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__class__&lt;/span&gt;&lt;/code&gt; to be used
on the class level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; with large values didn’t work on all platforms. This
affected at least Python2 on macOS, but potentially others as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: When scanning for installed Pythons to e.g. run Scons or
onefile compression, it was attempting to use installations that got
deleted manually and could crash.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, DLL conflicts are now resolved by checking the version
information too, also all cases that previously errored out after a
conflict was reported, will now work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, conditional expressions whose statically decided condition
picking a branch will raise an exception could crash the compilation.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Would previously crash Nuitka during optimization.&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;nt&amp;quot;&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Make sure we set C level standard file handles too&lt;/p&gt;
&lt;p&gt;At least newer subprocess was affected by this, being unable to
provide working handles to child processes that pass their current
handles through, and also this should help DLL code to use it as
level.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyqtgraph&lt;/span&gt;&lt;/code&gt; data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dipy&lt;/span&gt;&lt;/code&gt; by anti-bloat removal of its
testing framework that wants to do unsupported stuff.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Could still give warnings about modules not being followed, where
that was not true.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; was not working for non-automatic standard
library paths.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Onefile: Recognize a non-changing path from
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-tempdir-spec&lt;/span&gt;&lt;/code&gt; and then use cached mode. By default a
temporary folder is used in the spec value, make it delete the files
afterwards.&lt;/p&gt;
&lt;p&gt;The cached mode is not necessarily faster, but it is not going to
change files already there, leaving the binaries there intact. In the
future it may also become faster to execute, but right now checking
the validity of the file takes about as long as re-creating it,
therefore no gain yet. The main point, is to not change where it runs
from.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added option to exclude DLLs. You can npw use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--noinclude-dlls&lt;/span&gt;&lt;/code&gt; to exclude DLLs by filename patterns.&lt;/p&gt;
&lt;p&gt;The may e.g. come from Qt plugins, where you know, or experimented,
that it is not going to be used in your specific application. Use
with care, removing DLLs will lead to very hard to recognize errors.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CondaCC&lt;/span&gt;&lt;/code&gt; from environment variables for Linux and
macOS, in case it is installed. This can be done with e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;conda&lt;/span&gt;
&lt;span class="pre"&gt;install&lt;/span&gt; &lt;span class="pre"&gt;gcc_linux-64&lt;/span&gt;&lt;/code&gt; on Linux or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;conda&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt; &lt;span class="pre"&gt;clang_osx-64&lt;/span&gt;&lt;/code&gt; on
macOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--nowarn-mnemonic&lt;/span&gt;&lt;/code&gt; to disable warnings that use
mnemonics, there is currently not that many yet, but it’s going to
expand. You can use this to acknowledge the ones you accept, and not
get that warning with the information pointer anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added method for resolving DLL conflicts on macOS too. This is using
version information and picks the newer one where possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--user-package-configuration-file&lt;/span&gt;&lt;/code&gt; for user provided
Yaml files, which can be used to provide package configuration to
Nuitka, to e.g. add DLLs, data files, do some anti-bloat work, or add
missing dependencies locally. The documentation for this does not yet
exist though, but Nuitka contains a Yaml schema in the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;misc/nuitka-package-config-schema.json&lt;/span&gt;&lt;/code&gt; file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-project-else&lt;/span&gt;&lt;/code&gt; to avoid repeating conditions in Nuitka
project configuration, this can e.g. be used like this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# nuitka-project-if: os.getenv(&amp;quot;TEST_VARIANT&amp;quot;, &amp;quot;pyside2&amp;quot;) == &amp;quot;pyside2&amp;quot;:&lt;/span&gt;
&lt;span class="c1"&gt;#   nuitka-project: --enable-plugin=no-qt&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project-else:&lt;/span&gt;
&lt;span class="c1"&gt;#   nuitka-project: --enable-plugin=no-qt&lt;/span&gt;
&lt;span class="c1"&gt;#   nuitka-project: --noinclude-data-file=*.svg&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Previously, the inverted condition had to be used in another
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-project-if&lt;/span&gt;&lt;/code&gt; which is no big deal, but less readable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for deep copying uncompiled functions. There is now a
section in the User Manual that explains how to clone compiled
functions. This allows a workaround like this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;binder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
   &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
   &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;AttributeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FunctionType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__code__&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__globals__&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;argdefs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__defaults__&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;closure&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__closure__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;functools&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update_wrapper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__kwdefaults__&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__kwdefaults__&lt;/span&gt;

   &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added explicit deprecation status of a plugin. We now have a
few that do nothing, and are just there for compatibility with
existing users, and this now informs the user properly rather than
just saying it is not relevant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, some Python installations crash when attempting to import
modules, such as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os&lt;/span&gt;&lt;/code&gt; with a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ModuleName&lt;/span&gt;&lt;/code&gt; object, because we
limit string operations done, and e.g. refuse to do &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.startswith&lt;/span&gt;&lt;/code&gt;
which of course, other loaders that your installation has added,
might still use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: In case of not found DLLs, we can still examine the run time
of the currently compiling Python process of Nuitka, and locate them
that way, which helps for some Python configurations to support
standalone, esp. to find CPython DLL in unusual spots.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib2to3&lt;/span&gt;&lt;/code&gt; data files. These are from stdlib
and therefore the patched code from Debian needs to be undone, to
make these portable again.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Scalability: Avoid merge traces of initial variable versions, which
came into play when merging a variable used in only one branch. These
are useless and only made other optimization slower or impossible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Also avoid merge traces of merge traces, instead flatten
merge traces and avoid the duplication doing so. There were
pathological cases, where this reduced optimization time for
functions from infinite to instant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For comparison helpers, switch comparison where possible, such that
there are only 3 variants, rather than 6. Instead the boolean result
is inverted, e.g. changing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;gt;=&lt;/span&gt;&lt;/code&gt; into &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;&amp;lt;&lt;/span&gt;&lt;/code&gt; effectively. Of
course this can only be done for types, where we know that nothing
special, i.e. no method overloads of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__gte__&lt;/span&gt;&lt;/code&gt; is going on.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For binary operations that are commutative with the selected types,
in mixed type cases, swap the arguments during code generation, such
that e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long_a&lt;/span&gt; &lt;span class="pre"&gt;+&lt;/span&gt; &lt;span class="pre"&gt;float_b&lt;/span&gt;&lt;/code&gt; is actually computed as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float_b&lt;/span&gt; &lt;span class="pre"&gt;+&lt;/span&gt;
&lt;span class="pre"&gt;long_a&lt;/span&gt;&lt;/code&gt;. This again avoids many helpers. It also can be done for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; with integers and container types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In cases, where a comparison (or one of the few binary operation
where we consider it useful), is used in a boolean context, but we
know it is impossible to raise an exception, a C boolean result type
is used rather than a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka_bool&lt;/span&gt;&lt;/code&gt; which is now only used when
necessary, because it can indicate the exception result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: More anti-bloat work was done for popular packages,
covering also uses of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_scm&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nose&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nose2&lt;/span&gt;&lt;/code&gt;
package removals and warnings. There was also a focus on making
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mmvc&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tifffile&lt;/span&gt;&lt;/code&gt; compile well, removing e.g.
the uses of the tensorflow testing framework.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster comparison of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; values with constant values, this uses
helpers that work with C &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; values that represent a single
“digit” of a value, or ones that use the full value space of C
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster comparison of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; values with constant values, this uses
helpers that work with C &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; values, avoiding the useless
Python level constant objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Comparison of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; now has specialized
helpers that avoids converting the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; to a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; through
coercion. This takes advantage of code to compare C &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; values
(which are at the core of Python2 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; objects, with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt;
objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For binary operation on mixed types, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt; &lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; the slot of
the first function was still considered, and called to give a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_NotImplemented&lt;/span&gt;&lt;/code&gt; return value for no good reason. This also
applies to mixed operations of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt;
types, and for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; values on Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added missing helper for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt; operation with floats, this had been
overlooked so far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added dedicated nodes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes.CDLL&lt;/span&gt;&lt;/code&gt; which aims to allow us to
detect used DLLs at compile time in the future, and to move closer to
support its bindings more efficiently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added specialized nodes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict.popitem&lt;/span&gt;&lt;/code&gt; as well. With this, now
all of the dictionary methods are specialized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added specialized nodes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.expandtabs&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.translate&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.ljust&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.rjust&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.center&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.zfill&lt;/span&gt;&lt;/code&gt;, and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.splitlines&lt;/span&gt;&lt;/code&gt;. While these are barely performance relevant, this
completes all &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; methods, except &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;removeprefix&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;removesuffix&lt;/span&gt;&lt;/code&gt; that are Python3.9 or higher.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added type shape for result of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.index&lt;/span&gt;&lt;/code&gt; operation as well, this
was missing so far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; method calls through
variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize calls through variables containing e.g. mutable constant
values, these will be rare, because they all become exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize calls through variables containing built-in values,
unlocking optimization of such calls, where it is assigned to a local
variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For generated attribute nodes, avoid local doing import statements on
the function level. While these were easier to generate, they can
only be slow at run time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; built-in annotate its value as derived from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;,
which unfortunately does not allow much optimization, since that can
still change many things, but it was still a missing attribute.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For variable value release nodes, specialize them by value type as
well, enhancing the scalability, because e.g. parameter variable
specific tests, need not be considered for all other variable types
as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Plugins: Major changes to the Yaml file content, cleaning up some of
the DLL configuration to more easy to use.&lt;/p&gt;
&lt;p&gt;The DLL configuration has two flavors, one from code and one from
filename matching, and these got separated into distinct items in the
Yaml configuration. Also how source and dest paths get provided got
simplified, with a relative path now being used consistently and with
sane defaults, deriving the destination path from where the module
lives. Also what we called patterns, are actually prefixes, as there
is still the platform specific DLL file naming appended.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Move mode checks to dedicated plugin called
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;options-nanny&lt;/span&gt;&lt;/code&gt; that is always enabled, giving also much cleaner
Yaml configuration with a new section added specifically for these.
It controls advice on the optional or required use of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--disable-console&lt;/span&gt;&lt;/code&gt; and the like. Some packages, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wx&lt;/span&gt;&lt;/code&gt; are
known to crash on macOS when the console is enabled, so this advice
is now done with saner configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Also for all Yaml configuration sub-items where is now a
consistent &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; field, that allows checking Python version, OS,
Nuitka modes such as standalone, and only apply configuration when
matching this criterion, with that the anti-bloat options to allow
certain bloat, should now have proper effect as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AppImage&lt;/span&gt;&lt;/code&gt; on Linux is no more. The performance for
startup was always slower, while having lost the main benefit of
avoiding IO at startup, due to new cached mode, so now we always use
the same bootstrap binary as on macOS and Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Do not display implicit reports reported by plugins by default
anymore. These have become far too many, esp. with the recent stdlib
work, and often do not add any value. The compilation report will
become where to turn to find out why a module in included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Ask the user to install the ordered set package that will
actually work for the specific Python version, rather than making him
try one of two, where sometimes only one can work, esp. with Python
3.10 allowing only one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: More clear wording in the issue template that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt;
&lt;span class="pre"&gt;nuitka&lt;/span&gt; &lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output is really required for support to given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attempt to use Anaconda &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; binary if installed on
non-Windows. This is esp. handy on macOS, where it is harder to get
it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid byte-compiling the inline copy of Scons that uses
Python3 when installing for Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental switches to disable certain optimization in order
to try out their impact, e.g. on corruption bugs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added included DLLs for standalone mode to compilation
report.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reports: Added control tags influencing plugin decisions to the
compilation report.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Make the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;implicit-imports&lt;/span&gt;&lt;/code&gt; dependency section in the Yaml
package configuration a list, for consistency with other blocks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added checking of tags such from the package configuration,
so that for things dependent on python version (e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python39_or_higher&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;before_python39&lt;/span&gt;&lt;/code&gt;), the usage of Anaconda
(&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anaconda&lt;/span&gt;&lt;/code&gt;) or certain OS (e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;macos&lt;/span&gt;&lt;/code&gt;), or modes (e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;standalone&lt;/span&gt;&lt;/code&gt;), expressions in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;when&lt;/span&gt;&lt;/code&gt; can limit a configuration
item.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Re-enabled string normalization from black, the issues with
changes that are breaking to Python2 have been worked around.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Describe using a minimal virtualenv as a possible help
low memory situations as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: The yaml auto-format now properly preserves comments, being
based on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ruamel.yaml&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka-Python: Added support for the Linux build with Nuitka-Python
for our own CPython fork as well, previously only Windows was
working, amd macOS will follow later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The commit hook when installed from git bash was working, but doing
so from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cmd.exe&lt;/span&gt;&lt;/code&gt; didn’t find a proper path for shell from the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt;&lt;/code&gt; location.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: A lot of experimental toggles were added, that allow
control over the use of certain optimization, e.g. use of dict, list,
iterators, subscripts, etc. internals, to aid in debugging in
situations where it’s not clear, if these are causing the issue or
not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Fedora 36, which requires some specific linker
options, also recognize Fedora based distributions as such.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed long deprecated option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--noinclude-matplotlib&lt;/span&gt;&lt;/code&gt; from numpy
plugin, as it hasn’t had an effect for a long time now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code: Added extension for editing Jinja2 templates. This one
even detects that we are editing C or Python and properly highlights
accordingly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Standalone: Major cleanup of the dependency analysis for standalone.
There is no longer a distinction between entry points (main binary,
extension modules) and DLLs that they depend on. The OS specific
parts got broken out into dedicated modules as well and decisions are
now taken immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Split the Yaml package configuration files into 3 files. One
contains now Python2 only stdlib configuration, and another one
general stdlib.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Also cleanup the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zmq&lt;/span&gt;&lt;/code&gt; plugin, which was one the last
holdouts of now removed plugin method, moving parts to the Yaml
configuration. We therefore no longer have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;considerExtraDlls&lt;/span&gt;&lt;/code&gt;
which used to work on the standalone folder, but instead only plugin
code that provides included DLL or binary objects from
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getExtraDlls&lt;/span&gt;&lt;/code&gt; which gives Nuitka much needed control over DLL
copying. This was a long lasting battle finally won, and will allow
many new features to come.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Avoid changing whitespace in warnings, where we have intended
line breaks, e.g. in case of duplicate DLLs. Went over all warnings
and made sure to either avoid new-lines or have them, depending on
wanted output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Iterator end check code now uses the same code as rich comparison
expressions and can benefit from optimization being done there as
well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Solved TODO item about code generation time C types to specify if
they have error checking or not, rather than hard coding it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Production of binary helper function set was cleaned up massively,
but still needs more work, comparison helper function set was also
redesigned.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changing the spelling of our container package to become more clear.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Used &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;namedtuple&lt;/span&gt;&lt;/code&gt; objects for storing used DLL information for more
clear code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added spellchecker ignores for all attribute and argument names of
generated fixed attribute nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In auto-format make sure the imports float to the top. That very much
cleans up generated attribute nodes code, allowing also to combine
the many ones it makes, but also cleans up some of our existing code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The package configuration Yaml files are now sorted according to
module names. This will help to avoid merge conflicts during hotfixes
merge back to develop and automatically group related entries in a
sane way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved large amounts of code producing implicit imports to Yaml
configuration files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; plugin to Yaml based configuration, making
it a deprecated do nothing plugin, that only remains there for a few
releases, to not crash existing build scripts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lots of spelling cleanups, e.g. renaming &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen&lt;/span&gt;&lt;/code&gt; to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.code_generation&lt;/span&gt;&lt;/code&gt; for clarity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added generated test to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; method. This would have found
the issue with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;decode&lt;/span&gt;&lt;/code&gt; potentially.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced standalone test for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt; on Linux to actually have
something to test.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release improves on many things at once. A lot of work has been put
into polishing the Yaml configuration that now only lacks documentation
and examples, such that the community as a whole should become capable
of adding missing dependencies, data files, DLLs, and even anti-bloat
patches.&lt;/p&gt;
&lt;p&gt;Then a lot of new optimization has been done, to close the missing gaps
with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; methods, but before completing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; which
is already a work in progress pull request, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt;, we want to
start and generate the node classes that form the link or basis of
dedicated nodes. This will be an area to work on more.&lt;/p&gt;
&lt;p&gt;The many improvements to existing code helpers, and them being able to
pick target types for the arguments of comparisons and binary
operations, is a pre-cursor to universal optimization of this kind. What
is currently only done for constant values, will in the future be
interesting for picking specific C types for use. That will then be a
huge difference from what we are doing now, where most things still have
to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; based types.&lt;/p&gt;
&lt;p&gt;Scalability has again seen very real improvements, memory usage of
Nuitka itself, as well as compile time inside Nuitka are down by a lot
for some cases, very noticeably. There is never enough of this, but it
appears, in many cases now, large compilations run much faster.&lt;/p&gt;
&lt;p&gt;For macOS specifically, the new DLL dependency analysis, is much more
capable or resolving conflicts all by itself. Many of the more complex
packages with some variants of Python, specifically Anaconda will now be
working a lot better.&lt;/p&gt;
&lt;p&gt;And then, of course there is the big improvement for Onefile, that
allows to use cached paths. This will make it more usable in the general
case, e.g. where the firewall of Windows hate binaries that change their
path each time they run.&lt;/p&gt;
&lt;p&gt;Future directions will aim to make the compilation report more concise,
and given reasons and dependencies as they are known on the inside more
clearly, such that is can be a major tool for testing, bug reporting and
analysis of the compilation result.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-10.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2022-08-16T13:45:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-09.html</id>
    <title>Nuitka Release 0.9</title>
    <updated>2022-07-02T08:17:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-9"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has a many optimization improvements, and scalability
improvements, while also adding new features, with also some important
bug fixes.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fix, hard module name lookups leaked a reference to that object.
Fixed in 0.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.decode&lt;/span&gt;&lt;/code&gt; with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;errors&lt;/span&gt;&lt;/code&gt; as the only argument
wasn’t working. Fixed in 0.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, could corrupt created uncompiled class objects &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__&lt;/span&gt;&lt;/code&gt;
functions in case of descriptors being used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt;. Fixed in 0.8.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torchvision&lt;/span&gt;&lt;/code&gt;. Fixed in 0.8.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, could compile time crash during initial parsing phase on
constant dictionary literals with non-hashable keys.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;{}:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, hard imported sub-modules of hard imports were falsely resolved
to their parent. Fixed in 0.8.3 already.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;importlib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_bytes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# gave importlib has no attribute...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, outputs with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--force-stdout-spec&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--force-stderr-spec&lt;/span&gt;&lt;/code&gt; were created with the file system encoding on
Python3, but they nee to be &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;utf-8&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, didn’t allow zero spaces in Nuitka project options, which is not
expected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modules: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt; &lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; in the top level module in module
mode caused crashes at run time, when trying to restore the original
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; value, after the loading CPython corrupted it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2.6: Fixes for installations without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix for very old Python 2.6 versions, these didn’t have a
language assigned that could be used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security: Fix for &lt;a class="reference external" href="https://security-tracker.debian.org/tracker/CVE-2022-2054"&gt;CVE-2022-2054&lt;/a&gt; where
environment variables used for transfer of information between Nuitka
restarting itself, could be used to execute arbitrary code at compile
time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Fix, the torch plugin was not working on Linux due to
missing DLL dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, static optimization of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.import_module&lt;/span&gt;&lt;/code&gt; with a
package given, for an absolute import was optimized into the wrong
import, package was not ignored as it should be.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Installed Python scan could crash on trying installation
paths from registry that were manually removed in the mean time, but
not through an uninstaller.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyreadstat&lt;/span&gt;&lt;/code&gt;
because parts of standard library it uses are no more automatically
included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Could still crash when no &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;powershell&lt;/span&gt;&lt;/code&gt; is available with
symlinks, handle this more gracefully.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added more missing Plotly dependencies, but more work
will be needed to complete this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add missing stdlib dependency on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; by
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;concurrent.futures.process&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, implicit dependencies assigned to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imageio&lt;/span&gt;&lt;/code&gt; on PIL
plugins should actually be assigned to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PIL.Image&lt;/span&gt;&lt;/code&gt; that actually
loads them, so it works outside of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imageio&lt;/span&gt;&lt;/code&gt; too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;UI: Added new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--user-package-configuration-file&lt;/span&gt;&lt;/code&gt; to allow
users to provide extra Yaml configuration files for the Nuitka plugin
mechanism to add hidden dependencies, anti-bloat, or data files, for
packages. This will be useful for developing PRs to the standard file
of Nuitka. Currently the schema is available, but it is not
documented very well yet, so not really ready for end users just yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no-qt&lt;/span&gt;&lt;/code&gt; plugin as an easy way to prevent all
of the Qt bindings from being included in a compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include module search path in compilation report.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Faster dictionary iteration with our own replacement for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyDict_Next&lt;/span&gt;&lt;/code&gt; that avoids the DLL call overhead (in case of
non-static &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt;) and does less unnecessary checks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.count&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.format&lt;/span&gt;&lt;/code&gt; methods as
well, this should help in some cases with compile time optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The node for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict.update&lt;/span&gt;&lt;/code&gt; with only an iterable argument, but no
keyword arguments, was in fact unused due to wrongly generated code.
Also the form with no arguments wasn’t yet handled properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Use specialized nodes for pair values, i.e. the
representation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;y&lt;/span&gt;&lt;/code&gt; in e.g. dictionary creations. With
constant keys, and values, these avoid full constant value nodes, and
therefore save memory and compile time for a lot of code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Added more scalability work to avoid including modules
that make compilation unnecessarily big.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: Faster calls in case of mixed code, i.e. compiled code
calling uncompiled code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removing duplicates and non-existent entries from modules search path
should improve performance when locating modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize calls through variables as well. These are needed for the
package resource nodes to properly resolve at compile time from their
hard imports to the called function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hard imported names should also be considered very trusted
themselves, so they are e.g. also optimized in calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Avoid more useless imports in Pandas, Numba, Plotly, and
other packages, improving the scalability some more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added dedicated nodes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources.require&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources.get_distribution&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata.version&lt;/span&gt;&lt;/code&gt;,
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_metadata.version&lt;/span&gt;&lt;/code&gt;, so we can use compile time
optimization to resolve their argument values where possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid annotating control flow escape for all release statements.
Sometimes we can tell that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__del__&lt;/span&gt;&lt;/code&gt; will not execute outside code
ever, so this then avoids marking values as escaped, and taking the
time to do so.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calls of methods through variables on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt;
that have dedicated nodes are now also optimized through variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Boolean tests through variables now also are optimized when the
original assignment is a compile time constant that is not mutable.
This is only basic, but will allow tests on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TYPE_CHECKING&lt;/span&gt;&lt;/code&gt; coming
from a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;typing&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;TYPE_CHECKING&lt;/span&gt;&lt;/code&gt; statement to be
optimized, avoiding this overhead.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Changed to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;torch&lt;/span&gt;&lt;/code&gt; plugin to Yaml based configuration, making it
obsolete, it only remains there for a few releases, to not crash
existing build scripts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved older package specific hacks to the Yaml file. Some of these
were from hotfixes where the Yaml file wasn’t yet used by default,
but now there is no need for them anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed most of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg-resources&lt;/span&gt;&lt;/code&gt; plugin work. This is now done
during optimization phase and rather than being based on source code
matches, it uses actual value tracing, so it immediately covers many
more cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continued spelling improvements, renaming identifiers used in the
source that the cspell based extension doesn’t like. This aims at
producing more readable and searchable code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generated attribute nodes no longer do local imports of the operation
nodes they refer to. This also avoids compile time penalties during
optimization that are not necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid useless bytecode of inline copy used by Python3 when
installing for Python2, this spams just a lot of errors.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Removed MSI installers from the download page. The MSI installers are
discontinued as Python has deprecated their support for them, as well
as Windows 10 is making it harder for users to install them. Using
the PyPI installation is recommended on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Merged our Yaml files into one and added schema description, for
completion and checking in Visual Code while editing. Also check the
schema in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;check-nuitka-with-yamllint&lt;/span&gt;&lt;/code&gt; which is now slightly
misnamed. The schema is in no way final and will see improvements in
future releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Nicer progress bar layout that avoids flicker when optimizing
modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: When linking, output the total number of object files used, to
have that knowledge after the progress bar for C compilation is gone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Auto-format the package configuration Yaml file for
anti-bloat, implicit dependencies, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: Point out the commit hook in the PR template.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Nicer output in case of no commercial version is used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated the WinLibs MinGW64 download used on Windows to the latest
version based on gcc 11, the gcc 12 is not yet ready.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git: Make sure we are not affected by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;core.autocrlf&lt;/span&gt;&lt;/code&gt; setting, as
it interferes with auto-format enforcing Unix newlines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed the MSI downloads. Windows 10 has made them harder to install
and Python itself is discontinuing support for them, while often it
was only used by beginners, for which it was not intended.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Make it more clear how to install static libpython with
precise command.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Warn about using module from Debian packages. These can be made
non-portable to other OSes. Read more on &lt;a class="reference external" href="https://nuitka.net/info/debian-dist-packages.html"&gt;the info page&lt;/a&gt; for detailed
information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: The auto-format now floats imports to the top for
consistency. With few exceptions, it was already done like this. But
it makes things easier for generated code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The reflected test was adapted to preserve &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt; now that
module presence influences optimization.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release marks a point, that will allow us to open up the
compatibility work for implicit dependencies and anti-bloat stuff even
further. The Yaml format will need documentation and potentially more
refinement, but will open up a future, where latest packages can be
supported with just updating this configuration.&lt;/p&gt;
&lt;p&gt;The scalability improvements really make a difference for many libraries
and are a welcome improvement on both memory usage and compile time.
They are achieved by an accord of static optimization of&lt;/p&gt;
&lt;p&gt;One optimization aimed at optimizing tuple unpacking, was not finished
in time for this release, but will be subject of a future release. It
has driven many other improvements though.&lt;/p&gt;
&lt;p&gt;Generally, also from the UI, this is a huge step forward. With links to
the website for complex topics being started, and the progress bar
flicker being removed, the tool has yet again become more user friendly.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-09.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2022-07-02T08:17:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/next-nuitka-live-stream-04-06-2022.html</id>
    <title>Next Nuitka Live Stream</title>
    <updated>2022-05-27T00:00:00+01:00</updated>
    <content type="html">&lt;section id="next-nuitka-live-stream"&gt;

&lt;p&gt;In the coming weekend, Saturday 04.06.2022, there will be the next live
streams of me coding on Nuitka, and talking and chatting with visitors
in the Discord channel created specifically for this. I will go from
10-14 CEST and potentially also one in the evening.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="last-time"&gt;
&lt;h1&gt;Last time&lt;/h1&gt;
&lt;p&gt;It’s actually been too long for me to remember what I did, but I do know
that it took some time to get it right. It probably was about caching,
but there are usually several topics.&lt;/p&gt;
&lt;p&gt;I do however think that I need to use my CI machine with more processing
power rather than my normal desktop, or maybe even both, because the
screen capture, compiling, Visual Studio, and all, may make the Video
otherwise stutter a bit too much.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="this-time"&gt;
&lt;h1&gt;This time&lt;/h1&gt;
&lt;p&gt;So, streaming is a huge success or Nuitka, however time is also scarce,
and me starting new things, risks the release being bogged down by
stabilization phases that are extended.&lt;/p&gt;
&lt;p&gt;Not sure yet, what to do. I think, I want to look at adding the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;
as a C type and/or specializing code for mix of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CLONG&lt;/span&gt;&lt;/code&gt; (C long value)
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;LONG&lt;/span&gt;&lt;/code&gt; (Python3 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; object) and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;INT&lt;/span&gt;&lt;/code&gt; (Python2 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;
object). Right now adding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1&lt;/span&gt;&lt;/code&gt; goes through a constant object, one that
is prepared, and not time consuming to reference, but still overhead to
use.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-to-join-nuitka-live"&gt;
&lt;h1&gt;How to Join Nuitka Live&lt;/h1&gt;
&lt;p&gt;There is a &lt;a class="reference external" href="/pages/Streaming.html"&gt;dedicated page on the web site&lt;/a&gt;
which has the details. Spoiler, it’s free and I have no plans for
anything that involves a subscription of any kind. Of course, talking of
subscription, do also checkout the &lt;a class="reference external" href="/doc/commercial.html"&gt;Nuitka commercial&lt;/a&gt; offering. That is a subscription with adds that
protect your IP even more than regular Nuitka.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="join-me"&gt;
&lt;h1&gt;Join me&lt;/h1&gt;
&lt;p&gt;Come and join me there. &lt;a class="reference external" href="/pages/Streaming.html"&gt;Instructions&lt;/a&gt; here.
You know you want to do it. I know I want you to do to it!&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/next-nuitka-live-stream-04-06-2022.html"/>
    <summary>In the coming weekend, Saturday 04.06.2022, there will be the next live
streams of me coding on Nuitka, and talking and chatting with visitors
in the Discord channel created specifically for this. I will go from
10-14 CEST and potentially also one in the evening.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="stream" label="stream"/>
    <published>2022-05-27T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-08.html</id>
    <title>Nuitka Release 0.8</title>
    <updated>2022-05-26T10:54:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-8"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has a massive amount of bug fixes, builds on existing
features, and adds new ones.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, need to ignore cases where shorting in path for
external use during compilation gives an permission error. Fixed in
0.7.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy.stats&lt;/span&gt;&lt;/code&gt; function copying.
Fixed in 0.7.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, detect ARM64 arch of MSVC properly, such that we can
give a proper mismatch for the Python architecture. Fixed in 0.7.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata&lt;/span&gt;&lt;/code&gt; module failed to
include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;email&lt;/span&gt;&lt;/code&gt; from standard library parts no longer included by
default. Fixed in 0.7.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix, the dependency parser was using normalized paths where
original paths must be used. Fixed in 0.7.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shiboken6&lt;/span&gt;&lt;/code&gt; module (mostly due to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt;) failed to include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;argparse&lt;/span&gt;&lt;/code&gt; from the standard library
from standard library parts no longer included by default. Fixed in
0.7.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Fix, the detection of a usable Python for compression could
crash. Fixed in 0.7.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Adding the payload on Windows could run into locks still
being held, need to wait in that case. Fixed in 0.7.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; as well, we need it for when
we use Jinja2, which is more often now. For Python3 this was fixed in
0.7.3 already. Later a version to use with Python2 was added as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release: The wheels built for Nuitka when installed through URLs were
not version specific, but due to different inline copies per OS and
Python version, they must not be reused. Therefore we now pretend to
contain an extension module, which handles that. Fixed in 0.7.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;urllib.requests&lt;/span&gt;&lt;/code&gt; module failed to include
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;http.client&lt;/span&gt;&lt;/code&gt; from standard library parts no longer included by
default. Fixed in 0.7.3 already. Later &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;http.cookiejar&lt;/span&gt;&lt;/code&gt; was added
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not compress MSVC run time library when using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;upx&lt;/span&gt;&lt;/code&gt;
plugin, that is not going to work. Fixed in 0.7.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, on Windows more files should be included for TkInter
to work with all software. Fixed in 0.7.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;package_dir&lt;/span&gt;&lt;/code&gt; directive to specify
where source code lives. Fixed in 0.7.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shelve&lt;/span&gt;&lt;/code&gt; module failed to include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dbm&lt;/span&gt;&lt;/code&gt;
from standard library parts no longer included by default. Fixed in
0.7.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;arcade&lt;/span&gt;&lt;/code&gt; data files. Fixed in 0.7.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, bytecode demotions should use relative filenames
rather than original ones. Fixed in 0.7.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, must remove extension module objects from
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.modules&lt;/span&gt;&lt;/code&gt; before executing an extension module that will create
it. This fixes cases of cyclic dependencies from modules loaded by
the extension module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: In case of an exception, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; was itself triggering
one during its handling, hiding the real exception behind a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TypeError&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Improved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; locking behavior, avoiding a race. Also
increase characters used for key from 2 to 3 chars, making collisions
far more rare.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;persistent&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module: Fix, need to restore the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; values
of top level module. It is changed by CPython after import to an
incompatible file name, and not our loader, preventing package
resources to be found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Crpytodome.Cipher.PKCS1_v1_5&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil.iter_modules&lt;/span&gt;&lt;/code&gt; without arguments was not working
properly with our meta path based loader.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, could crash on when the Scons report was written due to
directories in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; that failed to encode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, positive &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;divmod&lt;/span&gt;&lt;/code&gt; and modulo &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%&lt;/span&gt;&lt;/code&gt; with
negative remainders of positive floats was not correct.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.encode&lt;/span&gt;&lt;/code&gt; with only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;errors&lt;/span&gt;&lt;/code&gt; value, but default value for
encoding was crashing the compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; statement sliced values must be lists,
not tuples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;glfw&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OpenGL&lt;/span&gt;&lt;/code&gt; packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, failed to read bytecode only stdlib files. This affect
mostly Fedora Python which does this for encodings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5+: Fix, two phase loading of modules could release it
immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.split&lt;/span&gt;&lt;/code&gt; rejected default &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sep&lt;/span&gt;&lt;/code&gt; value with only
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;maxsplit&lt;/span&gt;&lt;/code&gt; given as a keyword argument.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wsgiref&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;falcon&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eliot&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to mark assigned from variables as escaped. Without it,
some aliased loop variables could be misunderstood and falsely
statically optimized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;uvicorn&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;accessible_output2&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;babel&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;frozendict&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sound_lib&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tkinterdnd2&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7+: Fix, the error message wasn’t fully compatible for
unsubscriptable type exception messages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;idlelib&lt;/span&gt;&lt;/code&gt; from stdlib was always ignored.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4+: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__.origin&lt;/span&gt;&lt;/code&gt; as produced by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;find_spec&lt;/span&gt;&lt;/code&gt;
of our meta path based loader, didn’t have the correct &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;origin&lt;/span&gt;&lt;/code&gt;
attribute value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Disable QtPDF plugin of PySide 6.3.0, because it’s
failing dependency checks. On macOS this was blocking, we will change
it to detection if that is necessary in a future release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;orderedmultidict&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clr&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cv2&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--module-name-choice&lt;/span&gt;&lt;/code&gt; to select what value
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__package__&lt;/span&gt;&lt;/code&gt; are going to be. With
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--module-name-choice=runtime&lt;/span&gt;&lt;/code&gt; (default for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--module&lt;/span&gt;&lt;/code&gt; mode), the
created module uses the parent package to deduce the value of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__package__&lt;/span&gt;&lt;/code&gt;, to be fully compatible. The value
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--module-name-choice=original&lt;/span&gt;&lt;/code&gt; (default for other modes) allows
for more static optimization to happen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;get_resource_reader&lt;/span&gt;&lt;/code&gt; to our meta path based
loader. This allows to avoid useless temporary files in case
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resources.path&lt;/span&gt;&lt;/code&gt; is used, due to a bad interaction with
the fallback implementation used without it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--force-stdout-spec&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--force-stderr-spec&lt;/span&gt;&lt;/code&gt;
on all platforms, this was previously limited to Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for requiring and suggesting modes. In part this was
added to 0.7.3 already, and is used e.g. to enforce that on macOS the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wx&lt;/span&gt;&lt;/code&gt; will only work as a GUI program and crash unless
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--disable-console&lt;/span&gt;&lt;/code&gt; is specified. These will warn the user or
outright error the compilation if something is known to be needed or
useful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Detect version information for “Debian Sid”. Added in 0.7.4
already, and also improved how Debian/Ubuntu versions are output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--noinclude-data-files&lt;/span&gt;&lt;/code&gt; to instruct Nuitka to not
include data files matching patterns given. Also attached loggers and
tags to included data file and include them in the compilation
report.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: When using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt; without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setup.py&lt;/span&gt;&lt;/code&gt; so far
it was not possible to pass arguments. This is now possible by adding
a section like this.&lt;/p&gt;
&lt;div class="highlight-toml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[tool.nuitka]&lt;/span&gt;
&lt;span class="c1"&gt;# options without an argument are passed as boolean value&lt;/span&gt;
&lt;span class="n"&gt;show-scons&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;# options with single values, e.g. enable a plugin of Nuitka&lt;/span&gt;
&lt;span class="n"&gt;enable-plugin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pyside2&amp;quot;&lt;/span&gt;

&lt;span class="c1"&gt;# options with several values, e.g. avoiding including modules, accepts&lt;/span&gt;
&lt;span class="c1"&gt;# list argument.&lt;/span&gt;
&lt;span class="n"&gt;nofollow-import-to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*.tests&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*.distutils&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The option names are the same, but without leading dashes. Lists are
only needed when passing multiple values with the same option.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Add support for specifying signing identity with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-sign-identity&lt;/span&gt;&lt;/code&gt; and access to protected resources
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-app-protected-resource&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Included data files are now reported in the compilation report XML as
well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accept absolute paths for searching paths of binaries. This allows
e.g. the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;upx&lt;/span&gt;&lt;/code&gt; plugin to accept both a folder path and the full
path including the binary name to work when you specify the binary
location with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--upx-binary&lt;/span&gt;&lt;/code&gt; making it more user friendly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10: Added support for positional matching of classes, so far
only keyword matching was working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for path spec values &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%CACHE_DIR&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%COMPANY%&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PRODUCT%&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%VERSION%&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%HOME&lt;/span&gt;&lt;/code&gt; in preparation of onefile
once again being able to be cached and not unpacked repeatedly for
each execution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Detect missing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; plugin at run time. When TCL
fails to load, it then outputs a more helpful error. This ought to be
done for all plugins, where it’s not clear if they are needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anti-Bloat: Added support for plain replacements in the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat.yml&lt;/span&gt;&lt;/code&gt; file. Before with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;replacement`&lt;/span&gt;&lt;/code&gt;, the new value
had to be produced by an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eval&lt;/span&gt;&lt;/code&gt;, which makes for less readable
values due to extra quoting. for plain values.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.10+: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ordered-set&lt;/span&gt;&lt;/code&gt; PyPI package to speed
up compilation on these versions too, adding a warning if no
accelerated form of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OrderedSet&lt;/span&gt;&lt;/code&gt; is used, but believed to be
usable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes.decode&lt;/span&gt;&lt;/code&gt; operations. This is only a start
and we needed this for internal usage, more should follow later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Much more &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; work was added. Avoiding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ipython&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt;, and sometimes even &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doctest&lt;/span&gt;&lt;/code&gt; usage for some more
packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; was not always used, sometimes it believed to catch a
potential race, that we need to tell it to ignore. This will speed up
re-compilation of the C side in many cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not compile the meta path based loader separate, which allows us
to not expose functions and values only used by it. Also spares the C
compiler one file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added various dedicated nodes for querying package resources data,
e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil.get_data&lt;/span&gt;&lt;/code&gt;. This will make it easier to detect cases
of missing data files in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added more hard imports, some of which help scalability in the
compilation, because these are then known to exist in standalone
mode, others are used for package resource specific operations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Releasing decompression buffers avoiding unnecessary high
memory usage of bootstrap binary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid proving directories with no DLLs (e.g. from
packages) towards &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ldd&lt;/span&gt;&lt;/code&gt;, this should avoid exceeding command line
limits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; remove writing of the stats file before Scons has
completed, which avoids IO and locking churn.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wsgiref&lt;/span&gt;&lt;/code&gt; from stdlib by default.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Removed references to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;chrpath&lt;/span&gt;&lt;/code&gt; and dead code around it, it was
still listed as a dependency, although we stopped using it a while
ago.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed uses of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; in examples and tests, it is now
enabled by default.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made standard plugin file naming consistent, their name should be
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*Plugin.py&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleaned up &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tensorflow&lt;/span&gt;&lt;/code&gt; plugin. The source modification was moved
to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; where it is easy to do. The implicit dependencies
are now in the config file of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;implicit-imports&lt;/span&gt;&lt;/code&gt; plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Massive cleanups of data file handling in plugins. Adding methods for
producing the now required objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Scons file handling got further cleaned up and unified, doing
more things in common code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;#ifdefs&lt;/span&gt;&lt;/code&gt; usages with new helper function
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka_String_FromFormat&lt;/span&gt;&lt;/code&gt; that implies them for more readable
code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split the allowance check from the encountering. Allow plugins and
options all to say if an import should be followed, and only when
that is decided, to complain about it. Previously the attempt was
causing an error, even if another plugin were to decide against it
later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2.6: Avoid warnings from MSVC for out specialized &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt;
code. In testing it worked correctly, but this is more explicit and
doesn’t rely on C implementation specific behavior, although it
appears to be universal.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;UI: Warning tests are now wrapped to multiple lines if necessary.
That makes it more accessible for larger messages that contain more
guiding information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Documented how to use local Nuitka checkout with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt;
files, this makes debugging Nuitka straightforward in these setups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added instructions on how to pass extra C and linker flags and to the
User Manual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made our auto-format usable for the Nuitka website code too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed dependencies on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;chrpath&lt;/span&gt;&lt;/code&gt; and the now dead code that would
use it, we are happy with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;patchelf&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated to latest versions of requirements for development, esp.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pylint&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renamed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-onefile-icon&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-app-icon&lt;/span&gt;&lt;/code&gt; because that
is what it is really used for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified how dependencies are installed in GitHub actions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated man page contents for option name changes from last releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated the WinLibs MinGW64 download used on Windows to the latest
version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; binary used on Windows with MinGW64. This is
in preparation of using it potentially for MSVC as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated Visual Code C config to use Python3.10 and MSVC 2022 include
paths.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Better outputs from standalone library compilation test, esp. when
finding a problem, present the script to reproduce it immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced generated tests to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; methods to use keyword
arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added automatic execution of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt; driven test case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced output in case of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;optimization&lt;/span&gt;&lt;/code&gt; test failures, dumping
what value is there that has not become a compile time constant.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release has seen a lot of consolidation. The plugins layer for data
files is now all powerful, allowing much nicer handling of them by the
plugins, they are better reported in normal output, and they are also
part of the report file that Nuitka can create. You may now also inhibit
their inclusion from the command line, if you decide otherwise.&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt; now supporting Nuitka arguments is closing an
important gap.&lt;/p&gt;
&lt;p&gt;Generally many features got more polished, e.g. non-automatic inclusion
of stdlib modules has most problems fixed up.&lt;/p&gt;
&lt;p&gt;An important area of improvement, are the hard imports. These will be
used to replace the source based resolution of package requirements with
ones that are proper nodes in the tree. Getting these hard imports to
still retain full compatibility with existing imports, that are more or
less &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; uses only, was revealing quite a bit of technical
debt, that has been addressed with this release.&lt;/p&gt;
&lt;p&gt;For onefile, the cached mode is being prepared with the variables added,
but will only be in a later release.&lt;/p&gt;
&lt;p&gt;Also a bunch of new or upgraded packages are working now, and the push
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; work has increased, making many compilations even
more lean, but scalability is still an issue.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-08.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2022-05-26T10:54:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-07.html</id>
    <title>Nuitka Release 0.7</title>
    <updated>2022-02-21T13:10:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-7"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is massively improving macOS support, esp. for M1 and the
latest OS releases, but it also has massive improvements for usability
and bug fixes in all areas.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt; creation wasn’t annotating its possible exception exit
from hashing values and is not as free of side effects as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt; creations are. Fixed in 0.6.19.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--experimental&lt;/span&gt;&lt;/code&gt; option values got lost for the C
compilation when switching from MSVC to MinGW64, making them have no
effect. Fixed in 0.6.19.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, Clang from MinGW64 doesn’t support LTO at this time,
therefore default to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no&lt;/span&gt;&lt;/code&gt; for it. Fixed in 0.6.19.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Fix, failed to detect Debian unstable as suitable for
linking, it doesn’t have the release number. Fixed in 0.6.19.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pygsheets&lt;/span&gt;&lt;/code&gt; package. Fixed in
0.6.19.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, paths from plugin related file paths need to be made absolute
before used internally, otherwise the cache can fail to deduplicate
them. Fixed in 0.6.19.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: With gcc before version 5, e.g. on CentOS 7, where we switch
to using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;g++&lt;/span&gt;&lt;/code&gt; instead, the gcc version checks could crash. Fixed
in 0.6.19.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Disable MinGW64 wildcard expansion for command line
arguments. This was breaking command lines with arguments like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--filename&lt;/span&gt; &lt;span class="pre"&gt;*.txt&lt;/span&gt;&lt;/code&gt;, which under &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cmd.exe&lt;/span&gt;&lt;/code&gt; are left alone by the
shell, and are to be expanded by the program. Fixed in 0.6.19.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency needed for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--follow-stdlib&lt;/span&gt;&lt;/code&gt; with Python for some uses of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locale&lt;/span&gt;&lt;/code&gt;
module. Fixed in 0.6.19.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added workarounds for newest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; that wants to set
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__code__&lt;/span&gt;&lt;/code&gt; objects and required improvements for macOS library
handling. Fixed in 0.6.19.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Caching of DLL dependencies for the main programs was not
really working, requiring to detect them anew for every standalone
compilation for no good reason. Fixed in 0.6.19.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, CTRL-C from a terminal was not propagated to child
processes on Windows. Fixed in 0.6.19.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: With &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;certifi&lt;/span&gt;&lt;/code&gt; and Python3.10 the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.resource&lt;/span&gt;&lt;/code&gt; could trigger Virus scanner inflicted file
access errors. Fixed in 0.6.19.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.10: Reverted error back iteration past end of generator
change for Python 3.10.2 or higher to become compatible with that
too. Fixed in 0.6.19.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anyio&lt;/span&gt;&lt;/code&gt; and by proxy for Solana.
Fixed in 0.6.19.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, compilation with resource mode &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;incbin&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debugger&lt;/span&gt;&lt;/code&gt; was
not working together. Fixed in 0.6.19.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, format optimization of known &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; objects was not properly
annotating an exception exit when being optimized away, causing
consistency checks to complain. Fixed in 0.6.19.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; didn’t work for non-standard encoding
source paths due to using th direct mode, where wrong filenames are
output by MSVC. Fixed in 0.6.19.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; cannot handle source code paths for
non-standard encoding source paths. Fixed in 0.6.19.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2.6: Fix, calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iteritems&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iterkeys&lt;/span&gt;&lt;/code&gt; on known
dictionary values could give wrong values. Fixed in 0.6.19.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the value of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__module__&lt;/span&gt;&lt;/code&gt; if set by the metaclass was
overwritten when creating types. Fixed in 0.6.19.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Add support for the latest version of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; that
has “vendored” even more packages. Fixed in 0.6.19.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: The onefile binary was locked during run time and could not
be renamed, preventing in-place updates. This has been resolved and
now on Windows, the standard trick for updating a running binary of
renaming it, then placing the new file works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, wasn’t checking the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zstandard&lt;/span&gt;&lt;/code&gt; version and as a result could
crash if too old versions of it. This is now checked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Large amounts of bug fixes for the dependency scanner. It got
cleaned up and now handles many more cases correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, was not properly detecting wrong ClangCL architecture
mismatch with the Python architecture. This could result in strange
errors during C compilation in this setup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncpg&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Detect Debian or Ubuntu base and distribution name more
reliably. This helps esp. with static libpython optimization being
recognized automatically.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We now disallow options that take arguments to be provided without
using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;=&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Previously &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto&lt;/span&gt; &lt;span class="pre"&gt;no&lt;/span&gt;&lt;/code&gt; worked just as well as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto=no&lt;/span&gt;&lt;/code&gt; did. And
that was the cause of problems when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto&lt;/span&gt;&lt;/code&gt; first became a choice.&lt;/p&gt;
&lt;p&gt;Recently similar, but worse problems were observed, where e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; could swallow trailing other arguments when
users forgot to specify the name by accident. Therefore this style of
giving options is now explicitly rejected.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiled types of Nuitka now inherit from uncompiled types. This
should allow easier and more complete compatibility, making even code
in extension modules that uses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject_IsInstance&lt;/span&gt;&lt;/code&gt; work, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added signing of application bundles and standalone binaries
for deployment to newer macOS platforms and esp. M1 where these are
mandatory for execution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added support for selecting the single macOS target arch to
create a binary for. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;universal&lt;/span&gt;&lt;/code&gt; architecture is not yet
supported though, but will be added in a future release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for compression in onefile mode through the use of an
other Python installation, that has the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zstandard&lt;/span&gt;&lt;/code&gt; module
installed. With this it will work with 2.6 or higher, but require a
3.5 or higher Python with it installed in either &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; or on
Windows in the registry alternatively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added UPX plugin to compress created extension modules and binaries
and for standalone mode, the included DLLs. For onefile, the
compression is not useful since it has the payload already
compressed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a more explicit way to list usable MSVC versions with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--msvc=list&lt;/span&gt;&lt;/code&gt; rather than requiring an invalid value. Check values
given in the same way that Scons will do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-u&lt;/span&gt;&lt;/code&gt; which disabled outputs
buffers, so that these outputs are written immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Always on plugins now can have command line options. We want
this for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; plugin that is enabled by default in this
release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added ability for plugin to provide fake dependencies for a
module. We want the this for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; plugin, that is
now enabled by default in this release too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added ability for plugins to modify DLLs after copy for
standalone. We will be using this in the new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;upx&lt;/span&gt;&lt;/code&gt; plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added retry for file copies that fail due to still running program.
This can happen on Windows with DLLs in standalone mode. For
interactive compilation, this allows a retry to happen after
prompting the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added ability to list MSVC versions with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--msvc=list&lt;/span&gt;&lt;/code&gt;, and
detect illegal values given to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--msvc=&lt;/span&gt;&lt;/code&gt; before Scons sees them, it
also crashes with a relative unhelpful error message.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: When linking, close the C compilation progress bar and state that
that linking is going on. For some very large LTO compilations, it
was otherwise at 100% and still taking a long time, confusing users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added new plugin that is designed to handle DLL dependencies
through a configuration file that can both handle filename patterns
as well as code provided DLL locations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Exclude parts of the standard library by default. This
allows for much smaller standalone distributions on modules, that can
be expected to never be an implicit dependency of anything, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;argparse&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydoc&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;encodings.bz2_codec&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;encodings.idna&lt;/span&gt;&lt;/code&gt; anymore, these are not file system encodings, but
require extension modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure we use proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;(void)&lt;/span&gt;&lt;/code&gt; arguments for C functions without
arguments, as for C functions, that makes a real difference, they are
variable args functions and more expensive to call otherwise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For standalone, default to using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=no_site&lt;/span&gt;&lt;/code&gt; to avoid
the overhead that the typically unused &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module incurs. It
often includes large parts of the standard library, which we now want
to be more selective about. There is new Python flag added called
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=site&lt;/span&gt;&lt;/code&gt; that restores the inclusion of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt;
module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Exclude non-critical codec modules from being technical,
i.e. have to be available at program startup. This removes the need
for e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bz2&lt;/span&gt;&lt;/code&gt; related extension modules previously included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In reformulations, use dictionary methods directly, we have since
introduced dictionary specific methods, and avoid the unnecessary
churn during optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The complex call helper could trigger unnecessary passes in some
cases. The pure functions were immediately optimized, but usages in
other modules inside loops sometimes left them in incomplete states.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid repeated hashing of the same files over and over for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cache dependencies of bytecode demoted modules in first compile and
reuse that information in subsequent compilations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Added option for switching compression method for onefile
created with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AppImage&lt;/span&gt;&lt;/code&gt;. The default is also now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gzip&lt;/span&gt;&lt;/code&gt; and not
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xz&lt;/span&gt;&lt;/code&gt; which has been observed to cause much slower startup for
little size gains.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: For failed relative imports, during compiled time
absolute imports were attempted still and included if successful, the
imports would not be use them at run time, but lead to more modules
being included than necessary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;There is now a &lt;a class="reference external" href="https://discord.gg/nZ9hr9tUck"&gt;Discord server for Nuitka community&lt;/a&gt; where you can hang out with the
developers and ask questions. It is mirrored with the Gitter
community chat, but offers more features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; is now on by default. It helps scalability by
changing popular packages to not provide test frameworks,
installation tools etc. in the resulting binary. This oftentimes
reduces the compilation by thousands of modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; plugin is now on by default. Detecting
its need automatically removes a source of problems for first time
users, that didn’t know to enable it, but had all kinds of strange
crashes from multiprocessing malfunctioning. This should enhance the
out of the box experience by a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With this release, the version numbering scheme will be changed. For
a long time we have used 4 digits, where one is a leading zero. That
was initially done to indicate that it’s not yet ready. However, that
is just untrue these days. Therefore, we switch to 3 digits, and a
first hotfix with now be 0.7.1 rather than 0.6.19.1, which is too
long.&lt;/p&gt;
&lt;p&gt;It has been observed that people disregard differences in the third
digit, but actually for Nuitka these have oftentimes been very
important updates. This change is to rectify it, and a new release
will be &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;0.8&lt;/span&gt;&lt;/code&gt;, and there will be a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1.0&lt;/span&gt;&lt;/code&gt; release after &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;0.9&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a new section to User Manual that explains how to manually load
files, such that it is cleaner and compatible code. Using paths
relative to current directory is not the right way, but there are
nice helpers that make it very simple and correct with all kinds of
contexts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Report the MSVC version in Scons output during compilation. The 2022
version is required, but we support everything back to 2008, to work
on very old systems as well. This will help identifying differences
that arise from there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality: Find Clang format from MSVC 2022 too. We use in auto format
of Nuitka source code, but need to also search that as a new path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a spellchecker extension for Visual Code, resulting in many
spelling fixes in all kinds of documentation and code. This finds
more things than &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;codespell&lt;/span&gt;&lt;/code&gt;, but also has a lot of false alarms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check value of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-tempdir-spec&lt;/span&gt;&lt;/code&gt; for typical user errors. It
cannot be &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.&lt;/span&gt;&lt;/code&gt; as that would require to overwrite the onefile binary
on Windows, and will generally behave very confusing. Warn about
absolute or relative paths going outside of where the binary lives.
Can be useful in controlled setups, but not generally. Also warn
about using no variables, making non-unique paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Flavor detection was largely expanded. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Apple&lt;/span&gt;&lt;/code&gt; flavor is
recognized on more systems. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Homebrew&lt;/span&gt;&lt;/code&gt; was newly added, and we
actually can detect &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CPython&lt;/span&gt;&lt;/code&gt; reliably as a first.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a tool from leo project to create better &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files for
modules. We will make use of it in the future to enhance the files
created by Nuitka to not only contain hidden dependencies, but
optionally also module signatures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Clearer information from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyside2&lt;/span&gt;&lt;/code&gt; that patched wheels
might be mandatory and workarounds only patches cannot be done for
older Python.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added progress bars for DLL dependency detection and DLL copying for
standalone. These both can end up using take a fair bit of time
depending on project size, and it’s nice to know what’s going on.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added support for using both &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-create-app-bundle&lt;/span&gt;&lt;/code&gt; as it is needed for PySide2 due to
issues with signing code now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added warning when attempting to include extension modules in an
accelerated compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modules: Catch the user error of following all imports when creating
a module. This is very unlikely to produce usable results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start integrating &lt;a class="reference external" href="https://sourcery.ai"&gt;Sourcery&lt;/a&gt; for improved
Nuitka code. It will comment on PRs and automatically improve Nuitka
code as we develop it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging: Added command line tool &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;find-module&lt;/span&gt;&lt;/code&gt; that outputs how
Nuitka locates a module in the Python environment it’s ran with. That
removes the need to use Python prompt to dump &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; of
imported modules. Some modules even hide parts of their namespace
actively during run-time, the tool will not be affected by that.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Refactored Python scan previously used for Scons usage on versions
that need to run in with another Python to be more generally usable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use explicit &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.utils.Hashing&lt;/span&gt;&lt;/code&gt; module that allows the core to
perform these operations with simpler code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isPathBelow&lt;/span&gt;&lt;/code&gt; for checking if something is a system
library for enhanced robustness and code clarity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Make sure to use our proper error checking wrappers for
command execution when using tools like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;otool&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;codesign&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid a temporary file with a script during technical
import detection. These have been observed to potentially become
corrupted, and this avoids any chance of that happening, while also
being simpler code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid naming things &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shlib&lt;/span&gt;&lt;/code&gt; and call them &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;extension&lt;/span&gt;&lt;/code&gt; instead.
Inspired by the spell checker disliking the former term, which is
also less precise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed the dead architecture selection option for Windows, it was
unused for a long time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved Windows &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SxS&lt;/span&gt;&lt;/code&gt; handling of DLLs to a more general place where
also macOS specific tasks are applied, to host standard modification
of DLLs during their copying.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Better matching of relative filenames for search modes of the
individual test suite runners.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugger outputs on segfaults were no longer visible and have been
restored.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is tremendous progress for macOS. Finally biting the bullet
and paying obscene amounts of money to rent an M1 machine, it was
possible to enhance the support for this platform. Currently typical
packages for macOS are being made compatible as well, so it can now be
expected to perform equally well.&lt;/p&gt;
&lt;p&gt;On the quality side, the spell checker has had some positive effects,
finding typos and generally misspelled code, that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;codespell&lt;/span&gt;&lt;/code&gt; does
not, due to it being very conservative.&lt;/p&gt;
&lt;p&gt;The trend to enhance plugins has continued. The copying of DLLs is very
nearly finalized. Making more plugins enabled by default is seeing a lot
of progress, with 2 important ones addressed.&lt;/p&gt;
&lt;p&gt;Work on the size of distributions has seen a lot of positive results, in
that now standalone distributions are often very minimal, with many
extension modules from standard library no longer being present.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-07.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2022-02-21T13:10:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/next-nuitka-live-stream-30-01-2022.html</id>
    <title>Next Nuitka Live Stream</title>
    <updated>2022-01-30T00:00:00+00:00</updated>
    <content type="html">&lt;section id="next-nuitka-live-stream"&gt;

&lt;p&gt;Today, Sunday 30.01.2022, there will be the third live stream of me
coding on Nuitka, and talking and chatting with visitors in the Discord
channel created specifically for this. I will go from 9-12 CEST and from
18 CEST until probably at least 20 CEST, but it seems I tend to go
overtime.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="last-time"&gt;
&lt;h1&gt;Last time&lt;/h1&gt;
&lt;p&gt;So the last two streams are on my Youtube, these are around 4h videos,
done on the same day.&lt;/p&gt;
&lt;p&gt;In the second stream I was working on Onefile compression for all Python
versions, by making the location of another Python that for Scons we
sort of did already, reusable. So now, you can run Nuitka with Python2.6
and compile your legacy code, while with say 3.6 also installed on the
same system, you do the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zstandard&lt;/span&gt;&lt;/code&gt; compression. That will be used for
other things in the future as well. This is going to be part of the next
release and currently on develop.&lt;/p&gt;
&lt;p&gt;In the first stream, I also did a little bit of performance plans, but
mostly only showing people what I have there in stock, not actually went
there and I started work on a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;upx&lt;/span&gt;&lt;/code&gt; plugin, such that DLLs for
standalone are compressed with that. That also required a bit of plugin
interface changes and research. This one works mostly, but will need
more live. Also I think I looked at reducing what is included with the
follow standard library option, getting very minimal distributions out
of it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="this-time"&gt;
&lt;h1&gt;This time&lt;/h1&gt;
&lt;p&gt;All around, this last stream, was a huge success. I was a bit under the
weather last weekend, but we go on now.&lt;/p&gt;
&lt;p&gt;Not sure yet, what to do. I might be debugging issues I have with 2.6
and a recent optimization, that prevents factory branch from becoming
the next pre-release, I might be looking at macOS still. And I might be
looking at the caching of bytecode demoted modules, that is kind of
ready to be used, but is not currently, which is a pity. And of course,
the Python PGO may get a closer look, such that e.g. it works for
standalone mode.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="how-to-join"&gt;
&lt;h1&gt;How to Join&lt;/h1&gt;
&lt;p&gt;There is a &lt;a class="reference external" href="/pages/Streaming.html"&gt;dedicated page on the web site&lt;/a&gt;
which has the details. Spoiler, it’s free and I have no plans for
anything that involves a subscription of any kind. Of course, talking of
subscription, do also checkout the &lt;a class="reference external" href="/doc/commercial.html"&gt;Nuitka commercial&lt;/a&gt; offering. That is a subscription with adds that
protect your IP even more than regular Nuitka.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="join-me"&gt;
&lt;h1&gt;Join me&lt;/h1&gt;
&lt;p&gt;Come and join me there. &lt;a class="reference external" href="/pages/Streaming.html"&gt;Instructions&lt;/a&gt; here.
You know you want to do it. I know I want you to do to it!&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/next-nuitka-live-stream-30-01-2022.html"/>
    <summary>Today, Sunday 30.01.2022, there will be the third live stream of me
coding on Nuitka, and talking and chatting with visitors in the Discord
channel created specifically for this. I will go from 9-12 CEST and from
18 CEST until probably at least 20 CEST, but it seems I tend to go
overtime.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="stream" label="stream"/>
    <published>2022-01-30T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/first-nuitka-live-stream.html</id>
    <title>First Nuitka Live Stream</title>
    <updated>2022-01-14T00:00:00+00:00</updated>
    <content type="html">&lt;section id="first-nuitka-live-stream"&gt;

&lt;p&gt;Tomorrow, Saturday 15.01.2022, there will be not one, but two live
stream of me coding on Nuitka, and talking and chatting with visitors in
the Discord channel created specifically for this. I will go from 9-12
CEST and from 17-20 CEST.&lt;/p&gt;
&lt;p&gt;There is a &lt;a class="reference external" href="/pages/Streaming.html"&gt;dedicated page on the web site&lt;/a&gt;
which has the details. Spoiler, it’s free and I have no plans for
anything that involves a subscription of any kind. Of course, talking of
subscription, do also checkout the &lt;a class="reference external" href="/doc/commercial.html"&gt;Nuitka commercial&lt;/a&gt; offering. That is a subscription with adds that
protect your IP even more than regular Nuitka.&lt;/p&gt;
&lt;p&gt;I want to do this on a regular basis, and I will be happy to do this
even when nearly nobody shows up. It will be however your chance, and in
previous GSoC and generally, I made very good experiences with joint
sessions. So I hope you will help me pasting code snippets and Google
results in chat, and discuss the optimization that we are going to add.&lt;/p&gt;
&lt;p&gt;Come and join me there. &lt;a class="reference external" href="/pages/Streaming.html"&gt;Instructions&lt;/a&gt; here.
You know you want to do it. I know I want you to do to it!&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/first-nuitka-live-stream.html"/>
    <summary>Tomorrow, Saturday 15.01.2022, there will be not one, but two live
stream of me coding on Nuitka, and talking and chatting with visitors in
the Discord channel created specifically for this. I will go from 9-12
CEST and from 17-20 CEST.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="stream" label="stream"/>
    <published>2022-01-14T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0619.html</id>
    <title>Nuitka Release 0.6.19</title>
    <updated>2022-01-12T10:51:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-19"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release adds support for 3.10 while also adding very many new
optimization, and doing a lot of bug fixes.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.import_module&lt;/span&gt;&lt;/code&gt; with expressions that need
releases, i.e. are not constant values, could crash the compilation.
Fixed in 0.6.18.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After a fix for the previous release, modules that fail to import are
attempted again when another import is executed. However, during this
initialization for top level module in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--module&lt;/span&gt;&lt;/code&gt; mode, this was
was done repeatedly, and could cause issues. Fixed in 0.6.18.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Ignore warning given by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;patchelf&lt;/span&gt;&lt;/code&gt; on Linux with at
least newer OpenSUSE. Fixed in 0.6.18.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to avoid computing large values out of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;/code&gt; operation as
well. Fixed in 0.6.18.2 already.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# This large value was computed at run time and then if used, also&lt;/span&gt;
&lt;span class="c1"&gt;# converted to a string and potentially hashed, taking a long time.&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;maxint&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Ignore warning given by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;patchelf&lt;/span&gt;&lt;/code&gt; on Linux about a
workaround being applied.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.import_module&lt;/span&gt;&lt;/code&gt; were not correctly creating
code for dynamic argument values that need to be released, causing
the compilation to report the error. Fixed in 0.6.18.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: Fix, the console scripts are actually good for it as opposed
to CPython, and the batch scripts should not be installed. Fixed in
0.6.18.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setuptools: Added support older version of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; in meta
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;build&lt;/span&gt;&lt;/code&gt; integration of Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.import_module&lt;/span&gt;&lt;/code&gt; with 2 arguments that are
dynamic, were not working at all. Fixed in 0.6.18.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Compiling with MinGW64 without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; was not working
due to issues in Scons. Fixed in 0.6.18.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;repr&lt;/span&gt;&lt;/code&gt; built-in was falsely annotated as producing a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; value, but it can be also derived or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; in Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, attribute nodes were not considering the value they are looking
up on. Now that more values will know to have the attributes, that
was causing errors. Fixed in 0.6.18.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, left shifting can also produce large values and needs to be
avoided in that case, similar to what we do for multiplications
already. Fixed in 0.6.18.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: The new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--disable-ccache&lt;/span&gt;&lt;/code&gt; didn’t really have the
intended effect. Fixed in 0.6.18.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: The progress bar was causing tearing and corrupted outputs, when
outputs were made, now using proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; API for doing it, this
has been solved. Fixed in 0.6.18.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the constant value &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.version_info&lt;/span&gt;&lt;/code&gt; didn’t yet have support
for its type to be also a compile time constant in e.g. tuples. Fixed
in 0.6.18.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Assertions were not disabled, and on Windows with MinGW64
this lead to including the C filenames of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zstd&lt;/span&gt;&lt;/code&gt; inline copy
files and obviously less optimal code. Fixed in 0.6.18.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bottle.ext&lt;/span&gt;&lt;/code&gt; loading extensions to
resolve at compile time. Fixed in 0.6.18.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;seedir&lt;/span&gt;&lt;/code&gt; required data file. Fixed in
0.6.18.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: Failed to link when using the static libpython, which is also
now the default for &lt;strong&gt;MSYS2&lt;/strong&gt;. Fixed in 0.6.18.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Fix, the intended finalizer of compiled &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncgen&lt;/span&gt;&lt;/code&gt; was
not present and in fact associated to help type. This could have
caused corruption, but that was also very unlikely. Fixed in 0.6.18.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, need to set &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; before executing modules, as
some modules, e.g. newer PyWin32 use them to locate things during
their initialization already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Handle all PyWin32 modules that need the special DLLs and
not just a few.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, some &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pth&lt;/span&gt;&lt;/code&gt; files create module namespaces with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt;
that does not exist, ignore these in module importing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2.6-3.4: Fix, modules with an error could use their module name
after it was released.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: When providing arguments, the method suggested in the docs
is not compatible with all other systems, e.g. not
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools_rust&lt;/span&gt;&lt;/code&gt; for which a two elements tuple form needs to be
used for values. Added support for that and documented its use as
well in the User Manual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7+: Do no longer allow deleting cell values, this can lead to
corruption and should be avoided, it seems unlikely outside of tests
anyway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for more ciphers and hashes with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pycryptodome&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pycryptodomex&lt;/span&gt;&lt;/code&gt;, while also only including
Ciphers when needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Was not including modules or packages only referenced in
the entry point definition, but not in the list of packages. That is
not compatible and has been fixed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, must not expose the constants blob from extension modules, as
loading these into a compiled binary can cause issues in this case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for including OpenGL and SSL libraries with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cmd&lt;/span&gt;&lt;/code&gt; files created for uninstalled Python and
accelerated programs to find the Python installation were not passing
command line arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Executing modules with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--run&lt;/span&gt;&lt;/code&gt; was not working properly
due to missing escaping of file paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, parsing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files that make relative imports was not
resolving them correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, when disabling the console on Windows, make sure the
file handles still work and are not &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, need to claim all OS versions of Windows as supported,
otherwise e.g. high DPI features are not available.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Programs that are to be executed with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-m&lt;/span&gt;&lt;/code&gt; flag, can now be
compiled with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-m&lt;/span&gt;&lt;/code&gt; and will then behave in a
compatible way, i.e. load the containing package first, and have a
proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__package__&lt;/span&gt;&lt;/code&gt; value at run time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We now can write XML reports with information about the compilation.
This is initially for use in PGO tests, to decide if the expected
forms of inclusions have happened and should grow into a proper
reporting tool over time. At this point, the report is not very
useful yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Python 3.10, only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt; statements are not
completely supported. Variations with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;|&lt;/span&gt;&lt;/code&gt; matches that also assign
are not allowed currently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Allow using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--clang&lt;/span&gt;&lt;/code&gt; with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mingw64&lt;/span&gt;&lt;/code&gt; to e.g. use the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang.exe&lt;/span&gt;&lt;/code&gt; that is contained in the Nuitka automatic download
rather than &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc.exe&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Kivy. Works through a plugin that is automatically
enabled and needs no other inputs, detecting everything from using
Kivy at compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added initial support for Haiku OS, a clone of BeOS with a few
differences in their Python installation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental plugin &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;trio&lt;/span&gt;&lt;/code&gt; that works around issues with that
package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Also trust hard imports made on the module level in function level
code, this unlocks many more static optimization e.g. with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.version_info&lt;/span&gt;&lt;/code&gt; when the import and the use are not on the same
level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the built-in type method calls with generic implementation, we
now do faster method descriptor calls. These avoid creating a
temporary &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyCFunction&lt;/span&gt;&lt;/code&gt; object, that the normal call slot would,
this should make these calls faster. Checking them for compiled
function, etc. was only wasteful, so this makes it more direct.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Loop and normal merge traces were keeping assignments made before the
loop or inside a branch, that was otherwise unused alive. This should
enable more optimization for code with branches and loops. Also
unused loop traces are now recognized and removed as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoiding merges of escaped traces with the unescaped trace, there is
no point in them. This was actually happening a lot and should mean a
scalability improvement and unlock new optimization as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid escaping un-init traces. Unset values need not be considered as
potentially modified as that cannot be done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; shape is now detected through variables, this enables
many optimization on the function level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added many &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; operation nodes.&lt;/p&gt;
&lt;p&gt;These are specifically all methods with no arguments, as these are
very generic to add, introduced a base class for them, where we know
they all have no effect or raise, as these functions are all
guaranteed to succeed and can be served by a common base class.&lt;/p&gt;
&lt;p&gt;This covers the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.capitalize&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.upper&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.lower&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.swapcase&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.title&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.isalnum&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.isalpha&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.isdigit&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.islower&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.isupper&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.isspace&lt;/span&gt;&lt;/code&gt;,
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.istitle&lt;/span&gt;&lt;/code&gt; functions.&lt;/p&gt;
&lt;p&gt;For static optimization &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.find&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.rfind&lt;/span&gt;&lt;/code&gt; were added, as
they are e.g. used in a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.version.find(...)&lt;/span&gt;&lt;/code&gt; style in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os&lt;/span&gt;&lt;/code&gt;
module, helping to decide to not consider &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OS/2&lt;/span&gt;&lt;/code&gt; only modules.&lt;/p&gt;
&lt;p&gt;Then, support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.index&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.rindex&lt;/span&gt;&lt;/code&gt; was added, as
these are very similar to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.find&lt;/span&gt;&lt;/code&gt; forms, only that these may
raise an exception.&lt;/p&gt;
&lt;p&gt;Also add support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.split&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.rsplit&lt;/span&gt;&lt;/code&gt; which will be
used sometimes for code needed to be compile time computed, to e.g.
detect imports.&lt;/p&gt;
&lt;p&gt;Same goes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;endswith&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;startswith&lt;/span&gt;&lt;/code&gt;, the later is e.g.
popular with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.platform&lt;/span&gt;&lt;/code&gt; checks, and can remove a lot of code
from compilation with them now being decided at compile time.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;A few &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; methods are still missing, with time we will achieve
all of them, but this will take time.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added trust for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.builtin_module_names&lt;/span&gt;&lt;/code&gt; as well. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os&lt;/span&gt;&lt;/code&gt;
module is using it to make platform determinations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When writing constant values, esp. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt;
values, an encoding of “last value” has been added, avoiding the need
to repeat the same value again, making many values more compact.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When starting Nuitka, it usually restarts itself with information
collected in a mode without the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module loaded, and with hash
randomization disabled, for deterministic behaviour. There is a
option to prevent this from happening, where the goal is to avoid it,
e.g. in testing, say for the coverage taking, but that meant to parse
the options twice, which also loads a lot of code.&lt;/p&gt;
&lt;p&gt;Now only a minimal amount of code is used, and the options are parsed
only on the restart, and then an error is raised when it notices, it
was not allowed to do so. This also makes code a lot cleaner.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specialized comparison code for Python2 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; and Python3 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;
code, making these operations much faster to use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specialized comparison code for Python2 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; and Python3
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; code, making these operations much faster to use, currently
only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;==&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;!=&lt;/span&gt;&lt;/code&gt; are fully accelerated, the other comparisons
will follow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable static libpython with Python3 Debian packages too. As with
Python2, this will improve the performance of the created binary a
lot and reduce size for standalone distribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comparisons with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; also consider value traces and
go through variables as well where possible. So far only the rich
comparisons and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt; did that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create fixed import nodes in re-formulations rather than
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; nodes, avoiding later optimization doing that, and of
course that’s simpler code too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python 3.10: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;union&lt;/span&gt;&lt;/code&gt; types as compiled time
constants.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modules are now fully optimized before considering which modules they
are in turn using, this avoids temporary dependencies, that later
turn out unused, and can shorten the compilation in some cases by a
lot of time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On platforms without a static link library, in LTO mode, and with
gcc, we can use the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-O3&lt;/span&gt;&lt;/code&gt; mode, which doesn’t work for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt;, but that’s not used there. This also includes fake
static libpython, as used by MinGW64 and Anaconda on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; plugin now also handles newer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt; and
knows more about the standard library, and its runners which it will
exclude from compilation if use for it. Currently that is not the
default, but it should become that.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Migrated the Nuitka blog from Nikola to Sphinx based ABlog and made
the whole site render with Sphinx, making it a lot more usable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a small presentation about Nuitka on the Download page, to make
sure people are aware of core features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi&lt;/span&gt;&lt;/code&gt; plugin is now always on. The copying of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;typelib&lt;/span&gt;&lt;/code&gt;
when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi&lt;/span&gt;&lt;/code&gt; is imported is harmless and people can disable the plugin
if that’s not needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; plugin is new and also always on. It previously
was part of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; plugin, which is doing too many unrelated
things. Moving this one out is part of a plan to split it up and have
it on by default without causing issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: Detecting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MinGW&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;POSIX&lt;/span&gt;&lt;/code&gt; flavors of this Python. For
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MinGW&lt;/span&gt;&lt;/code&gt; flavor of MSYS2, the option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mingw64&lt;/span&gt;&lt;/code&gt; is now the
default, before it could attempt to use MSVC, which is not going to
work for it. And also the Tcl and Tk installations of it are being
detected automatically for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tk-inter&lt;/span&gt;&lt;/code&gt; plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Windows version to Nuitka version output, so we have this for
bug reports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added example explaining how to access values from your
code in Nuitka project options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: For Python flavors where we expect a static libpython, the error
message will now point out how to achieve it for each flavor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Disable progress bar when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-scons&lt;/span&gt;&lt;/code&gt; is used, it makes
capturing the output from the terminal only harder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Catch error of specifying both &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--msvc=&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mingw64&lt;/span&gt;&lt;/code&gt;
options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Improved error messages when using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;build&lt;/span&gt;&lt;/code&gt; integration and failing to provide packages to compile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Removed now unused feature to rename modules on import, as
it was only making the code more complex, while being no more needed
after recently adding a place for meta path based importers to be
accounted for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Twitter: Use embedded Tweet in Credits, and regular follow button in
User Manual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Warnings about imports not done, are now only given when optimization
can not remove the usage, and no options related to following have
been given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Windows version to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output of Nuitka. This is to
more clearly recognize Windows 10 from Windows 11 report, and also
the odd Windows 7 report, where tool chain will be different.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Visual Code, the default Python used is now 3.9 in the “Linux” C
configuration. This matches Debian Bullseye.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicer outputs from check mode of the auto-format as run for CI
testing, displays problematic files more clearly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove broken links to old bug tracker that is no longer online from
the Changelog.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: When hitting CTRL-C during initial technical import detection, no
longer ask to submit a bug report with the exception stack, instead
exit cleanly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Enable LTO mode for MinGW64 and other gcc by default. We
require a version that can do it, so take advantage of that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For cases, where code generation of a module takes long, make sure
its name is output when CTRL-C is hit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Splash screen only works with MSVC, added error indicator
for MinGW64 that states that and asks for porting help.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Generate all existing C code for generic builtin type method calls
automatically, and use those for method attribute lookups, making it
easier to add more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TkInter&lt;/span&gt;&lt;/code&gt; module to data file providing interface, yielding
the 2 directories in question, with a filter for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;demos&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The importing code got a major overhaul and no longer works with
relative filenames, or filenames combined with package names, and
module names, but always only with module names and absolute
filenames. This cleans up some of the oldest and most complex code in
Nuitka, that had grown to address various requirements discovered
over time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Major cleanup of Jinja2 template organisation.&lt;/p&gt;
&lt;p&gt;Renamed all C templates from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.j2&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.c.j2&lt;/span&gt;&lt;/code&gt; for clarity, this
was not done fully consistent before. Also move all C templates to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen&lt;/span&gt;&lt;/code&gt; package data, it will be confusing to make a
difference between ones used during compile time and for the static
generation, and the lines are going to become blurry.&lt;/p&gt;
&lt;p&gt;Added Jinja2 new macro &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CHECK_OBJECTS&lt;/span&gt;&lt;/code&gt; to avoid branches on
argument count in the call code templates. More of these things
should be added.&lt;/p&gt;
&lt;p&gt;Cleanup of code that generates header declarations, there was some
duplication going on, that made it hard to generate consistent code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.finalizatios.FinalizationBase&lt;/span&gt;&lt;/code&gt;, we only have one
final visitor that does everything, and that of course makes a lot of
sense for its performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Major cleanup of the Scons C compiler configuration setup. Moved
things to the dedicate function, and harmonized it more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resolved deprecation warnings given by with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-debug&lt;/span&gt;&lt;/code&gt; for
Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Started test suite for Python PGO, not yet completely working though,
it’s not yet doing what is needed though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added generated test that exercises str methods in multiple
variations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Revived &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;reflected&lt;/span&gt;&lt;/code&gt; test suite, that had been removed, because of
Nuitka special needs. This one is not yet passing again though, due
to a few details not yet being as compatible as needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test suite for CPython 3.10 and enable execution of tests with
this version on GitHub actions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is another big step forward.&lt;/p&gt;
&lt;p&gt;The amount of optimization added is again very large, some of which yet
again unlocks more static optimization of module imports, that
previously would have to be considered implicit. Now analyzing these on
the function level as well, we can start searching for cases, where it
could be done, but is not done yet.&lt;/p&gt;
&lt;p&gt;After starting with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt;, method optimization has focused on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;
which is esp. important for static optimization of imports. The next
goal will here be to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; which are important for run time
performance and currently not yet optimized. Future releases will
progress there, and also add more types.&lt;/p&gt;
&lt;p&gt;The C type specialization for Python3 has finally progressed, such that
it is also covering the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; and as such not limited
to Python2 as much. The focus now needs to turn back to not working with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; for these types, but e.g. with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+=&lt;/span&gt; &lt;span class="pre"&gt;1&lt;/span&gt;&lt;/code&gt; to make it
directly work with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CLONG&lt;/span&gt;&lt;/code&gt; rather than &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;LONG&lt;/span&gt;&lt;/code&gt; for which structural
changes in code generation will be needed.&lt;/p&gt;
&lt;p&gt;For scalability, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; work has not yet progressed as much
as to be able to enable it by default. It needs to be more possible to
disable it where it causes problems, e.g. when somebody really wants to
include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; and test frameworks generally, that’s something that
needs to be doable. Compiling without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; plugin is something
that is immediately noticeable in exploding module amounts. It is very
urgently recommended to enable it for your compilations.&lt;/p&gt;
&lt;p&gt;The support for Windows has been further refined, actually fixing a few
important issues, esp. for the Qt bindings too.&lt;/p&gt;
&lt;p&gt;This release adds support for 3.10 outside of very special &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;match&lt;/span&gt;&lt;/code&gt;
statements, bringing Nuitka back to where it works great with recent
Python. Unfortunately &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;orderedset&lt;/span&gt;&lt;/code&gt; is not available for it yet, which
means it will be slower than 3.9 during compilation.&lt;/p&gt;
&lt;p&gt;Overall, Nuitka is closing many open lines of action with this. The
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt; support has yet again improved and at this point should
be very good.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0619.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2022-01-12T10:51:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0618.html</id>
    <title>Nuitka Release 0.6.18</title>
    <updated>2021-12-11T17:21:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-18"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has a focus on new features of all kinds, and then also new
kinds of performance improvements, some of which enable static
optimization of what normally would be dynamic imports, while also
polishing plugins and adding also many new features and a huge amount of
organizational changes.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Fixes to asyncgen, need to raise &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopAsyncIteration&lt;/span&gt;&lt;/code&gt;
rather than &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; in some situations to be fully
compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Fix, LTO mode was always enabled for onefile compilation,
but not all compilers support it yet, e.g. MinGW64 did not. Fixed in
0.6.17.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; calls with 3 arguments didn’t annotate their potential
exception exit. Fixed in 0.6.17.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, trusted module constants were not working properly in all cases.
Fixed in 0.6.17.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg-resources&lt;/span&gt;&lt;/code&gt; exiting with error at compile time for
unresolved requirements in compiled code, but these can of course
still be optional, i.e. that code would never run. Instead give only
a warning, and run time fail on these. Fixed in 0.6.17.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Prevent the inclusion of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;drm&lt;/span&gt;&lt;/code&gt; libraries on Linux, they
have to come from the target OS at run time. Fixed in 0.6.17.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ipcqueue&lt;/span&gt;&lt;/code&gt;
module. Fixed in 0.6.17.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, Qt webengine support for everything but &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; wasn’t
working properly. Partially fixed in 0.6.17.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, bootstrap splash screen code for Windows was missing in
release packages. Fixed in 0.6.17.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, could crash on known implicit data directories not present.
Fixed in 0.6.17.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Disable download of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; binary for M1 architecture and
systems before macOS 10.14 as it doesn’t work on these. Fixed in
0.6.17.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pendulum.locals&lt;/span&gt;&lt;/code&gt; handling for Python 3.6 was
regressed. Fixed in 0.6.17.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Make sure the child process is cleaned up even after its
successful exit. Fixed in 0.6.17.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xmlschema&lt;/span&gt;&lt;/code&gt;. Fixed in 0.6.17.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;curses&lt;/span&gt;&lt;/code&gt; on Windows. Fixed in
0.6.17.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;coincurve&lt;/span&gt;&lt;/code&gt; module. Fixed in 0.6.17.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4+: Up until Python3.7 inclusive, a workaround for stream
encoding (was ASCII), causing crashes on output of non-ASCII, other
Python versions are not affected. Fixed in 0.6.17.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Workaround for LTO error messages from older gcc versions.
Fixed in 0.6.17.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32print&lt;/span&gt;&lt;/code&gt;. Fixed in 0.6.17.6
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to prevent usage of static &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; in module mode or
else on some Python versions, linker errors can happen. Fixed in
0.6.17.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not load &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module early anymore. This might
have caused issues in some configurations, but really only would be
needed for loading &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; which doesn`t depend on it in
standalone mode. Fixed in 0.6.17.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, could crash with generator expressions in finally blocks of
tried blocks that return. Fixed in 0.6.17.7 already.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;some_iterable&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5+: Compatibility of comparisons with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;types.CoroutineType&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;types.AsyncGeneratorType&lt;/span&gt;&lt;/code&gt; types was not yet implemented. Fixed
in 0.6.17.7 already.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# These already worked:&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;compiledCoroutine&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CoroutineType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;compiledAsyncgen&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsyncGeneratorType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;

&lt;span class="c1"&gt;# These now work too:&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;compiledCoroutine&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CoroutineType&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;compiledAsyncgen&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsyncGeneratorType&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ruamel.yaml&lt;/span&gt;&lt;/code&gt;. Fixed in 0.6.17.7
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Fix, when building more than one package, things could go
wrong. Fixed in 0.6.17.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, for module mode filenames are used, and for packages, you can
specify a directory, however, a trailing slash was not working. Fixed
in 0.6.17.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, when locating modules, a package directory and an
extension module of the same name were not used according to
priority. Fixed in 0.6.17.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added workaround &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_resources&lt;/span&gt;&lt;/code&gt; insisting on
Python source files to exist to be able to load datafiles. Fixed in
0.6.17.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Properly detect usage of hard imports from standard
library in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--follow-stdlib&lt;/span&gt;&lt;/code&gt; mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;openapi_spec_validator&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSYS2: Fix, need to normalize compiler paths before comparing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: For accelerated binaries, the created &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.cmd&lt;/span&gt;&lt;/code&gt; file wasn’t
containing all needed environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Set minimum OS version derived from the Python executable
used, this should make it work on all supported platforms (of that
Python).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for automatic inclusion of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xmlschema&lt;/span&gt;&lt;/code&gt;
package datafiles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for automatic inclusion of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eel&lt;/span&gt;&lt;/code&gt; package
datafiles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;h5py&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;phonenumbers&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;feedparser&lt;/span&gt;&lt;/code&gt; package, this currently
depends on the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; plugin to be enabled, which will become
enabled by default in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi&lt;/span&gt;&lt;/code&gt; plugin for said package that copies
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;typelib&lt;/span&gt;&lt;/code&gt; files and sets the search path for them in standalone
mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added necessary datafiles for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eel&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;QtWebEngine&lt;/span&gt;&lt;/code&gt; to all Qt bindings and
also make it work on Linux. Before only PySide2 on Windows was
supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;all&lt;/span&gt;&lt;/code&gt; built-in was wrongly assuming that bytes
values could not be false, but in fact they are if they contain
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;\0&lt;/span&gt;&lt;/code&gt; which is actually false. The same does not happen for string
values, but that’s a difference to be considered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The LTO was supposed to be used automatically on with MSVC
14.2 or higher, but that was regressed and has been repaired now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Extension modules contained in packages, depending on
their mode of loading had the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__package__&lt;/span&gt;&lt;/code&gt; value set to a wrong
value, which at least impacted new matplotlib detection of Qt
backend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; was installing binaries for
no good reason.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Setuptools support. Documented &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bdist_wheel&lt;/span&gt;&lt;/code&gt;
integration and added support for Nuitka as a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;build&lt;/span&gt;&lt;/code&gt; package
backend in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyproject.toml&lt;/span&gt;&lt;/code&gt; files. Using Nuitka to build your
wheels is supposed to be easy now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Python 3.10, there are however still
important issues with compatibility with the CPython 3.9 test suite
with at least asyncgen and coroutines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: For app bundles, version information can be provided with the
new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--macos-app-version&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Python vendor detection of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Anaconda&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyenv&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Apple&lt;/span&gt;
&lt;span class="pre"&gt;Python&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyenv&lt;/span&gt;&lt;/code&gt; and output the result in version output, this
should make it easiert to analyse reported issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Also handle the usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; for metadata version
resolution of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg-resources&lt;/span&gt;&lt;/code&gt; standard plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;data-files&lt;/span&gt;&lt;/code&gt; standard plugin now reads configuration
from a Yaml file that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;data-files.yml&lt;/span&gt;&lt;/code&gt; making it more accessible
for contributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Allow enforcing usage of MSVC with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--msvc=latest&lt;/span&gt;&lt;/code&gt;. This
allows you to prevent accidental usage of MinGW64 on Windows, when
MSVC is intended, but achieves that without fixing the version to
use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for LTO with MinGW64 on Windows, this was
previously limited to the MSVC compiler only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debugger&lt;/span&gt;&lt;/code&gt; with the downloaded
MinGW64 provided &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gdb.exe&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;It doesn`t work when executed from a Git bash prompt, but e.g.
from a standard command prompt.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new experimental flag for compiled types to inherit from
uncompiled types. This should allow easier and more complete
compatibility, making even code in extension modules that uses
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject_IsInstance&lt;/span&gt;&lt;/code&gt; work, providing support for packages like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The Qt binding plugins now resolve &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyqtgraph&lt;/span&gt;&lt;/code&gt; selection
of binding by hard coding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;QT_LIB&lt;/span&gt;&lt;/code&gt;. This will allow to resolve its
own dynamic imports depending on that variable at compile time. At
this time, the compile time analysis is not covering all cases yet,
but we hope to get there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Provide &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;minOS&lt;/span&gt;&lt;/code&gt; for standalone builds, derived from the
setting of the Python used to create it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--disable-ccache&lt;/span&gt;&lt;/code&gt; to prevent Nuitka from
injecting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; (Clang, gcc) and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; (MSVC) for caching
the C results of the compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added experimental support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt6&lt;/span&gt;&lt;/code&gt;. While using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; is very much recommended with Nuitka, this
allows its use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--low-memory&lt;/span&gt;&lt;/code&gt; to allow the user to specify that
the compilation should attempt to use less memory where possible,
this increases compile times, but might enable compilation on some
weaker machines.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added dedicated attribute nodes for attribute values that match names
of dictionary operations. These are optimized into dedicate nodes for
methods of dictionaries should their expression have an exact
dictionary shape. These in turn optimize calls on them statically
into dictionary operations. This is done for all methods of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt;
for both Python2 and Python3, namely &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;get&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;items&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iteritems&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;itervalues&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iterkeys&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;viewvalues&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;viewkeys&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pop&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setdefault&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;has_key&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clear&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;copy&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;update&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The new operation nodes also add compile time optimization for being
used on constant values where possible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also added dedicated attribute nodes for string operations. For
operations, currently only part of the methods are done. These are
currently only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;join&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;strip&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lstrip&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rstrip&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;partition&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rpartition&lt;/span&gt;&lt;/code&gt;. Besides performance, this subset was
enough to cover compile time evaluation of module name computation
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.import_module&lt;/span&gt;&lt;/code&gt; as done by SWIG bindings, allowing
these implicit dependencies to be discovered at compile time without
any help, marking a significant improvement for standalone usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Annotate type shape for dictionary &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; nodes, this was
missing unlike in the generic &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster processing of “expression only” statement nodes. These are
nodes, where a value is computed, but then not used, it still needs
to be accounted for though, representing the value release.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# ignores return value, means statement only node&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Enabled LTO by default with MinGW64, which makes it produce
much faster results. It now yield faster binaries than MSVC 2019 with
pystone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for C level PGO (Profile Guided Optimization)
with MSVC and MinGW64, allowing extra speed boosts from the C
compilation on Windows as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Better handling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requests.packages&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;six.moves&lt;/span&gt;&lt;/code&gt;. The old handling could duplicate their code. Now uses
a new mechanism to resolve metapath based importer effects at compile
time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid useless exception checks in our dictionary helpers, as these
could only occur when working with dictionary overloads, which we
know to not be the case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For nodes, have dedicated child mixin classes for nodes with a single
child value and for nodes with a tuple of children, so that these
common kind of nodes operate faster and don’t have to check at run
time what type they are during access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Actually make use of the egg cache. Nuitka was unpacking eggs in
every compilation, but in wheel installs, these can be quite common
and should be faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Star arguments annotated their type shape, but the methods to check
for dictionary exactly were not affected by this preventing
optimization in some cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; configuration for main programs present in the
modules of the standard library, these can be removed from the
compilation and should lower dependencies detected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using static libpython with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyenv&lt;/span&gt;&lt;/code&gt; automatically. This should give
both smaller (standalone mode) and faster results as is the case when
using this feature..&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added improvements to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; plugin for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gevent&lt;/span&gt;&lt;/code&gt; to avoid including its testing framework.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9+: Faster calls into uncompiled functions from compiled code
using newly introduced API of that version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Statically optimize &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.import_module&lt;/span&gt;&lt;/code&gt; calls with constant
args into fixed name imports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.version_info&lt;/span&gt;&lt;/code&gt; to be used as a compile time
constant. This should enable many checks to be done at compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added hard import and static optimization for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;typing.TYPE_CHECKING&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also compute named import lookup through variables, expanding their
use to more cases, e.g. like this:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version_info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;major&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also optimize compile time comparisons through variable names if
possible, i.e. the value cannot have changed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster calls of uncompiled code with Python3.9 or higher avoiding DLL
call overhead.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Commercial: There are &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Buy&lt;/span&gt; &lt;span class="pre"&gt;Now&lt;/span&gt;&lt;/code&gt; buttons available now for the
direct purchase of the &lt;a class="reference external" href="/pages/commercial.html"&gt;Nuitka Commercial&lt;/a&gt;
offering. Finally Credit Card, Google Pay, and Apple Pay are all
possible. This is using Stripe. Get in touch with me if you want to
use bank transfer, which is of course still best for me.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The main script runners for Python2 have been renamed to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka2&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka2-run&lt;/span&gt;&lt;/code&gt;, which is consistent with what we do for Python3,
and avoids issues where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bin&lt;/span&gt;&lt;/code&gt; folder ends up in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; and
prevents the loading of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for Visual Studio 2022 by updating the inline
copy of Scons used for Windows to version 4.3.0, on non Windows, the
other ones will keep being used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Requiring latest MinGW64 with version 11.2 as released by
WinLibs, because this is known to allow LTO, where previous releases
were missing needed binaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reject standalone mode usage with Apple Python, as it works only with
the other supported Pythons, avoiding pitfalls in attempting to
distribute it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move hosting of documentation to Sphinx, added Changelog and some
early parts of API documentation there too. This gives much more
readable results than what we have done so far with Nikola. More
things will move there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Add description how to access code attributes in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-project&lt;/span&gt;&lt;/code&gt; style options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Added commands used to generate performance numbers for
Python.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: List other Python’s for which static linking is supposed
to work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved help for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; with a hint how to exclude
some of the subpackages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Started using Jinja2 in code templates with a few types, adding basic
infrastructure to do that. This will be expanded in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated plugin documentation with more recent information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Python flavor as detected to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output for
improved bug reports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Added distribution name to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output for improved
bug reports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Always enable the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gevent&lt;/span&gt;&lt;/code&gt; plugin, we want to achieve this for all
plugins, and this is only a step in that direction.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added project URLs for PyPI, so people looking at it from there have
some immediate places to checkout.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Use common code for included PDF files, which have page
styles and automatic corrections for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rst2pdf&lt;/span&gt;&lt;/code&gt; applied.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated to latest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pylint&lt;/span&gt;&lt;/code&gt; versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The binary names for Python2 changed from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-run&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka2&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka2-run&lt;/span&gt;&lt;/code&gt;. This harmonizes it
with Python2 and avoids issues, where the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bin&lt;/span&gt;&lt;/code&gt; folder in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; can cause issues with re-execution of Nuitka finding
those to import.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;You ought to be using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; style of calling Nuitka
anyway, as it gives you best control over what Python is used to
run Nuitka, you can pick &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python2&lt;/span&gt;&lt;/code&gt; there if you want it to run
with that, even with full path. Check the relevant section in the
User Manual too.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Fedora 34 and Fedora 35.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;In a change of mind &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--enable-plugin&lt;/span&gt;&lt;/code&gt; has become the only form to
enable a plugin used in documentation and tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Massive cleanup of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; and Qt binding plugins, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyside2&lt;/span&gt;&lt;/code&gt;. Data files and DLLs are now provided through proper
declarative objects rather than copied manually. The handling of
PyQt5 from the plugin should have improved as a side effect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Massive cleanups of all documentation in ReST format. Plenty of
formatting errors were resolved. Many typos were identified and
globally fixed. Spellings e.g. of “Developer Manual” are now enforced
with automatic replacements. Also missing or wrong quotes were turned
to proper methods. Also enforce code language for shell scripts to be
the same everywhere.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed last usages of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getPythonFlags()&lt;/span&gt;&lt;/code&gt; and made the function
private, replacing their use with dedicated function to check for
individual flags.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid string comparison with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.utils.getOS()&lt;/span&gt;&lt;/code&gt; and instead add
accessors that are more readable, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.utils.isMacOS()&lt;/span&gt;&lt;/code&gt; and
put them to use where it makes sense.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Replaced usages of string tests in list of python flags specified,
with functions that check for a specific name with a speaking
function name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added mixin for expressions that have no side effect outside of their
value, providing common method implementation more consistently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove code geared to using old PyLint and on Python2, we no longer
use that. Also removed annotations only used for overriding Python2
builtins from Nuitka code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The PDF specific annotations were moved into being applied only in
the PDF building step, avoiding errors for raw PDF directives.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply Visual Code auto-format to our Yaml files. This is
unfortunately not and automatic formatting yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Introduce dedicated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.utils.Json&lt;/span&gt;&lt;/code&gt; module, as we intend to
expand its usage, e.g. for caching.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Replacing remaining usages of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt; functions with uses of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.Tracing&lt;/span&gt;&lt;/code&gt; instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Massive cleanup of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gevent&lt;/span&gt;&lt;/code&gt; plugin, user proper method to
execute code after module load, rather than source patching without
need. The plugin no longer messes with inclusions that other code
already provides for standalone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using own helper to update &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys&lt;/span&gt;&lt;/code&gt; module attributes, to avoid errors
from old C compilers, and also cleaning up using code to not have to
cast on string constants.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More consistent naming of plugin classes, and enforce a relationship
of detector class names to the names of detected plugins. The new
naming consistency is now enforced.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added CPython 3.10 test suite, it needs more work though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added generated test that exercises dictionary methods in multiple
variations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test suite names were specified wrongly in a few of them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is again a huge step forward. It refines on PGO and LTO for
C level to work with all relevant compilers. Internally Python level PGO
is prepared, but only a future release will feature it. With that,
scalability improvements as well as even more performance improvements
will be unlocked.&lt;/p&gt;
&lt;p&gt;The amount of optimization added this time is even bigger, some of which
unlocks static optimization of module imports, that previously would
have to be considered implicit. This work will need one extra step,
namely to also trace hard imports on the function level, then this will
be an extremely powerful tool to solve these kinds of issues in the
future. The next release will have this and go even further in this
area.&lt;/p&gt;
&lt;p&gt;With the dictionary methods, and some string methods, also a whole new
kind of optimization has been started. These will make working with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; containers faster, but obviously a lot of ground is to cover
there still, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; values are a natural target not yet started.
Future releases will progress here.&lt;/p&gt;
&lt;p&gt;Type specialization for Python3 has not progressed though, and will have
to be featured in a future releases though.&lt;/p&gt;
&lt;p&gt;For scalability, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; work has continued, and this should
be the last release, where this is not on by default. Compiling without
it is something that is immediately noticeable in exploding module
amounts. It is very urgently recommended to enable it for your
compilations.&lt;/p&gt;
&lt;p&gt;The support for macOS has been refined, with version information being
possible to add, and adding information to the binary about which OSes
are supported, as well as rejecting Apple Python, which is only a trap
if you want to deploy to other OS versions. More work will be needed to
support &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyenv&lt;/span&gt;&lt;/code&gt; or even Homebrew there too, for now CPython is still
the recommended platform to use.&lt;/p&gt;
&lt;p&gt;This release achieves major compatibility improvements. And of course,
the experimental support for 3.10 is not the least. The next release
will strive to complete the support for it fully, but this should be
usable at least, for now please stay on 3.9 if you can.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0618.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2021-12-11T17:21:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0617.html</id>
    <title>Nuitka Release 0.6.17</title>
    <updated>2021-11-11T13:40:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-17"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has a focus on performance improvements, while also
polishing plugins and adding many new features.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, plugins were not catching being used on packages not installed.
Fixed in 0.6.16.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fix weaknesses in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;otool&lt;/span&gt;&lt;/code&gt; parsing to determine DLL
dependency parsing. Fixed in 0.6.16.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Allow onefile program args with spaces contained to be
properly passed. Fixed in 0.6.16.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid using less portable C function for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PID%&lt;/span&gt;&lt;/code&gt;
formatting, which restores compilation on Windows 7 with old
toolchains. Fixed in 0.6.16.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;fstrings&lt;/span&gt;&lt;/code&gt; package. Fixed in 0.6.16.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, need to import &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pth&lt;/span&gt;&lt;/code&gt; files after &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt;
module, not before. This was causing crashes on CentOS7 with Python2.
Fixed in 0.6.16.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, when extension modules failed to load, in some
cases the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ImportError&lt;/span&gt;&lt;/code&gt; was lost to a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;KeyError&lt;/span&gt;&lt;/code&gt;. Fixed in
0.6.16.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, linker resource modes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;code&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;linker&lt;/span&gt;&lt;/code&gt; were not working
anymore, but are needed with LTO mode at least. Fixed in 0.6.16.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Bytecode modules with null bytes in standard library,
typically from disk corruption, were not handled properly. Fixed in
0.6.16.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, failed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.throw()&lt;/span&gt;&lt;/code&gt; into generators could cause corruption.
Fixed in 0.6.16.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, the bytecode compilation didn’t respect the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=no_asserts&lt;/span&gt;&lt;/code&gt; mode. Fixed in 0.6.16.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, calls were not annotating their arguments as escaped, causing
corruption of mutable in static optimization. Fixed in 0.6.16.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, some sequence objects, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.array&lt;/span&gt;&lt;/code&gt; actually implement
in-place add operations that need to be called. Fixed in 0.6.16.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, onefile binaries were not working after being signed.
This now works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Modules giving &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; from source were not
properly handled, giving run time &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ImportError&lt;/span&gt;&lt;/code&gt;. Now they are
giving &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the LTO mode has issues with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;incbin&lt;/span&gt;&lt;/code&gt; usage on older gcc, so
use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;linker&lt;/span&gt;&lt;/code&gt; mode when it is enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, locals dict codes were not properly checking errors
that the mapping might raise when setting values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, modules named &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;entry&lt;/span&gt;&lt;/code&gt; were causing compile time errors in the
C stage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Never include files from OS private frameworks in standalone
mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the python flag &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=no_warning&lt;/span&gt;&lt;/code&gt; wasn’t working on
all platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, the main code of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module wasn’t
executing, so that its added builtins were not there. Of course, you
ought to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=no_site&lt;/span&gt;&lt;/code&gt; to not have it in the normal
case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Added code path to handle edited standard library source
code which then has no valid bytecode file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: In module mode, the CondaCC wasn’t recognized as form of
gcc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, bytecode modules could shadow compiled modules of the same name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Fix, expansion of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PID%&lt;/span&gt;&lt;/code&gt; wasn’t working properly on
non-Windows, making temp paths less unique. The time stamp is not
necessarily enough.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; error exits from slave processes were not
reporting tracebacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xcbglintegrations&lt;/span&gt;&lt;/code&gt; to the list of sensible Qt
plugins to include by default, otherwise rendering will be inferior.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;platformthemes&lt;/span&gt;&lt;/code&gt; to the list of sensible Qt
plugins to include by default, otherwise file dialogs on non-Windows
would be inferior.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, created &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files were not ordered deterministically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32file&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, namespace packages were not using run time values for their
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt; value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7+: Fix, was leaking &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AttributeError&lt;/span&gt;&lt;/code&gt; exceptions during
name imports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, standard library detection could fail for relative paths.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for C level PGO (Profile Guided
Optimization), which runs your program and then uses feedback from
the execution. At this time only gcc is supported, and only C
compiler is collecting feedback. Check the User Manual for a table
with current results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added experimental support for creating application bundles.
For these, icons can be specified and console can be disabled. But at
this time, onefile and accelerated mode are not yet usable with it,
only standalone mode works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Add support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources.require&lt;/span&gt;&lt;/code&gt; calls to be
resolved at compile time. These are not working at run time, but this
avoids the issue very nicely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Massive improvements to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; plugin, it can
now make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scipy&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywt&lt;/span&gt;&lt;/code&gt;, and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; use much less packages and has better error handling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; ability ability to append code to a
module, which might get used in the future by other plugins that need
some sort of post load changes to be applied.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added ability to replace code of functions at parse time,
and use this in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; plugin to replace functions that do
unnecessary stuff with variants that often just do nothing. This is
illustrated here.&lt;/p&gt;
&lt;div class="highlight-yaml notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;gevent._util&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;remove&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;gevent&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;release&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;framework&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;change_function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;prereleaser_middle&amp;quot;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;#39;(lambda&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;data:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;None)&amp;#39;&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;postreleaser_before&amp;quot;&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;#39;(lambda&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;data:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;None)&amp;#39;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This example is removing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gevent&lt;/span&gt;&lt;/code&gt; code that loads dependencies used
for their CI release process, that need not be part of normal
programs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added ability to persist source code changes done by plugins in the
Python installation. This is considered experimental and needs write
access to the Python installation, so this is best done in a
Virtualenv and it may confuse plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing.tracker&lt;/span&gt;&lt;/code&gt; and spawn mode for all
platforms. For non-default modes outside of Windows, you need to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--enable-plugin=multiprocessing&lt;/span&gt;&lt;/code&gt; to use these.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Allow multiple entry points to be provided by one or several
plugins for the same modules. These are now merged into one
automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix for numpy not working when compiling with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=no_docstrings&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, method calls were not respecting descriptors provided by types
with non-generic attribute lookups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Add support for using self-compiled Python3 from the build
folder too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Nuitka-Python 2.7, which will be our faster Python
fork.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Colorized output for error outputs encountered in Scons, these are
now yellow for better recognition.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Faster threading code was used for Python3.8 or higher, and this has
been extended to 3.7 on Windows, but we won’t be able to have it
other platforms and not on earlier Python3 versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster calls esp. with keyword arguments. Call with keywords no
longer create dictionaries if the call target supports that, and with
3.8 or higher, non-compiled code that allows vectorcall is taken
advantage of.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster class creation that avoids creation of argument tuples and
dictionaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster attribute check code in case of non-present attributes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster unbound method calls, unlike bound methods calls these were
not optimized as well yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type shapes for star arguments are now known and used in
optimization.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
   &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Statically known to be tuple&lt;/span&gt;
   &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Statically known to be dict&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Faster old-style class creation. These are classes that do
not explicitly inherit from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;object&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Faster string comparisons for Python by specializing for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; type as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Added specialization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; comparisons too. These
are naturally very much the same as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; comparisons in Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added specialization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; comparisons too. We had them for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuples&lt;/span&gt;&lt;/code&gt; only so far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster method calls when called from Python core, our &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tp_call&lt;/span&gt;&lt;/code&gt;
slot wasn’t as good as it can be.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Faster deep copies of constants. This can speed up
constant calls with mutable types. Before it was checking the type
too often to be fast.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow using static linking with Debian Python giving much better
performance with the system Python. This is actually a huge
improvement as it makes things much faster. So far it’s only
automatically enabled for Python2, but it seems to work for Python3
on Debian too. Needs more tweaking in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;functools&lt;/span&gt;&lt;/code&gt; module to the list of hard imports
in preparation of optimizing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;functools.partial&lt;/span&gt;&lt;/code&gt; to work better
with compiled functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Demote to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; when iterating over &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt; calls,
even for small ranges, they are always faster. Previously this was
only done for values with at least 256 values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable LTO automatically for Debian Python, this also allows more
optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable LTO automatically for Anaconda with CondaCC on non-Windows,
also allowing more optimization.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added section in the User Manual on how to deal with memory issues
and C compiler bugs. This is a frequent topic and should serve as a
pointer for this kind of issue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto&lt;/span&gt;&lt;/code&gt; option was changed to require an argument, so that it
can also be disabled. The default is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;auto&lt;/span&gt;&lt;/code&gt; which is the old
behavior where it’s enabled if possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-progress&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-progressbar&lt;/span&gt;&lt;/code&gt; in order to make it
more clear what it’s about. Previously it was possible to relate it
to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-progress&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No longer require specific versions of dependencies in our
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requirements.txt&lt;/span&gt;&lt;/code&gt; and relegate those to only being in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requirements-devel.txt&lt;/span&gt;&lt;/code&gt; such that by default Nuitka doesn’t
collide with user requirements on those same packages which
absolutely all the time don’t really make a difference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added ability to check all unpushed changes with pylint with a new
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;./bin/check-nuitka-with-pylint&lt;/span&gt; &lt;span class="pre"&gt;--unpushed&lt;/span&gt;&lt;/code&gt; option. Before it was
only possible to make the check (quickly) with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--diff&lt;/span&gt;&lt;/code&gt;, but that
stopped working after commits are made.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Revived support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vmprof&lt;/span&gt;&lt;/code&gt; based analysis of compiled programs,
but it requires a fork of it now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make Windows specific compiler options visible on all platforms.
There is no point in them being errors, instead warnings are given
when they are specified on non-Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added project variable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Commercial&lt;/span&gt;&lt;/code&gt; for use in Nuitka project
syntax.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consistent use of metavars for nicer help output should make it more
readable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ast&lt;/span&gt;&lt;/code&gt; tree dumps in case of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;KeyboardInterrupt&lt;/span&gt;&lt;/code&gt; exceptions,
they are just very noisy. Also not annotate where Nuitka was in
optimization when a plugin is asking to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sysexit&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Encoding names for UTF-8 in calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.encode()&lt;/span&gt;&lt;/code&gt; were used
inconsistent with and without dashes in the source code, added
cleanup to auto-format that picks the one blessed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanup taking of run time traces of DLLs used in preparation for
using it in main code eventually, moving it to a dedicated module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid special names for Nuitka options in test runner, this only adds
a level of confusion. Needs more work in future release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unify implementation to create modules into single function. We had 3
forms, one in recursion, one for main module, and one for plugin
generated code. This makes it much easier to understand and use in
plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Further reduced code duplication between the two Scons files, but
more work will be needed there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escaped variables are still known to be assigned/unassigned rather
than unknown, allowing for many optimizations to still work on them.,
esp. for immutable value&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced auto-format for rest documents, bullet list spacing is now
consistent and spelling of organizational is unified automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved icon conversion functionality to separate module, so it can be
reused for other platforms more easily.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;reflected&lt;/span&gt;&lt;/code&gt; test, because of Nuitka special needs to
restart with variable Python flags. This could be reverted though,
since Nuitka no longer needs anything outside inline copies, and
therefore no longer loads from site packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; plugin in standalone tests of Numpy, Pandas and
tests to reduce their compile times, these have become much more
manageable now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced checks for used files to use proper below path checks for
their ignoring.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove reflected test, compiling Nuitka with Nuitka has gotten too
difficult.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify constants integrity at program end in debug mode again, so we
catch corruption of them in tests.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is one of the most important ones in a long time. The PGO
and LTO, and static libpython work make a big different for performance
of created binaries.&lt;/p&gt;
&lt;p&gt;The amount of optimization added is also huge, calls are much faster
now, and object creations too. These avoiding to go through actual
dictionaries and tuples in most cases when compiled code interacts gives
very significant gains. This can be seen in the increase of pystone
performance.&lt;/p&gt;
&lt;p&gt;The new type specializations allow many operations to be much faster.
More work will follow in this area and important types, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; do not have specialized comparisons for Python3, holding it back
somewhat to where our Python2 performance is for these things.&lt;/p&gt;
&lt;p&gt;For scalability, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; work is extremely valuable, and this
plugin should become active by default in the future, for now it must be
strongly recommended. It needs more control over what parts you want to
deactivate from it, in case of it causing problems, then we can and
should do it.&lt;/p&gt;
&lt;p&gt;The support for macOS has been enhanced a lot, and will become perfect
in the next release (currently develop). The bundle mode is needed for
all kinds of GUI programs to not need a console. This platform is
becoming as well supported as the others now.&lt;/p&gt;
&lt;p&gt;Generally this release marks a huge step forward. We hope to add Python
level PGO in the coming releases, for type knowledge retrofitted without
any annotations used. Benchmarks will become more fun clearly.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0617.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2021-11-11T13:40:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0616.html</id>
    <title>Nuitka Release 0.6.16</title>
    <updated>2021-09-09T11:01:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-16"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is mostly polishing and new features. Optimization looked
only at threading performance, and LTO improvements on Windows.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg-resources&lt;/span&gt;&lt;/code&gt; failed to resolve versions for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib.metadata&lt;/span&gt;&lt;/code&gt; from its standard library at compile time.
Fixed in 0.6.15.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; was not including the module if
it was an extension modules, but only for Python modules. Fixed in
0.6.15.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi.overrides&lt;/span&gt;&lt;/code&gt;.
Fixed in 0.6.15.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9: Fix, could crash when using generic aliases in certain
configurations. Fixed in 0.6.15.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the tensorflow plugin needed an update due to changed API. Fixed
in 0.6.15.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When error exiting Nuitka, it now closes any open progress bar for
cleaner display.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; plugin now automatically includes Qt
backend if any of the Qt binding plugins is active.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.5+: Added support for onefile compression. This is using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zstd&lt;/span&gt;&lt;/code&gt; which is known to give very good compression with very high
decompression, much better than e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zlib&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added onefile support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FreeBSD: Added onefile support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Added method to use tempdir onefile support as used on other
platforms as an alternative to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AppImage&lt;/span&gt;&lt;/code&gt; based.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for recursive addition of files from directories with
patterns.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attaching the payload to onefile now has a progress bar too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Prelimary support for the yet unfinished Nuitka-Python that
allows static linking and higher performance on Windows, esp. with
Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: In acceleration mode, for uninstalled Python, now a CMD file
is created rather than copying the DLL to the binary directory. That
avoids conflicts with architectures and of course useless file
copies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New abilities for plugin &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; allow to make it an error
when certain modules are imported. Added more specific options for
usual trouble makes, esp. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; are causing an
explosion for some programs, while being unused code. This makes it
now easier to oversee this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s now possible to override &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;appdirs&lt;/span&gt;&lt;/code&gt; decision for where cache
files live with an environment variable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NUITKA_CACHE_DIR&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-o&lt;/span&gt;&lt;/code&gt; option now also works with onefile mode, it previously
rejected anything but acceleration mode. Fixed in 0.6.15.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: It’s now possible for multiple plugins to provide pre or
post load code for the same module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added indications for compilation modes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;standalone&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;onefile&lt;/span&gt;&lt;/code&gt; to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; attribute.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Give nicer error message in case of colliding command line
options.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Faster threading code is now using for Python3.8 or higher and not
only 3.9, giving a performance boost, esp. on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto&lt;/span&gt;&lt;/code&gt; is now the default with MSVC 2019 or higher. This
will given smaller and faster binaries. It has been available for
some time, but not been the default yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Using different progress bar titles for C compilation of Python code
and C compilation of onefile bootstrap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved platform specific detections, for FreeBSD/OpenBSD/macOS out of
the Scons file and to common Nuitka code, sometimes eliminating
duplications with one version being more correct than the other.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Massive cleanup of datafile plugin, using pattern descriptions, so
more code duplication can be removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More cleanup of the scons files, sharing more common code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Under the name Nuitka-Python we are now also developing a fork of
CPython with enhancements, you can follow and joint it at
&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka-Python"&gt;https://github.com/Nuitka/Nuitka-Python&lt;/a&gt; but at this time it is not
yet ready for prime time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile under Windows now only is temporary file mode. Until we
figure out how to solve the problems with locking and caching, the
mode where it installs to the AppData of the user is no longer
available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renamed the plugin responsible for PyQt5 support to match the names
of others. Note however, that at this time, PySide2 or PySide6 are to
be recommended.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make it clear that PySide 6.1.2 is actually going to be the supported
version of PySide6.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use MSVC in GitHub actions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release had a massive focus on expanding existing features, esp.
for onefile, and plugins API, such that we can now configure
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; with yaml, have really nice datafile handling options,
and have onefile on all OSes practically.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0616.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2021-09-09T11:01:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0615.html</id>
    <title>Nuitka Release 0.6.15</title>
    <updated>2021-06-05T17:18:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-15"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release polished previous work with bug fixes, but there are also
important new things that help make Nuitka more usable, with one
important performance improvement.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, hard imports were not automatically used in code generation
leading to errors when used. Fixed in 0.6.14.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; was disabled by mistake. Fixed in 0.6.14.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added data files for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jsonschema&lt;/span&gt;&lt;/code&gt; to be copied
automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pendulum&lt;/span&gt;&lt;/code&gt; wasn’t working anymore with the
last release due to plugin interface issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Retry downloads without SSL if that fails, as some Python do not have
working SSL. Fixed in 0.6.14.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; path wasn’t working if it contained spaces. Fixed
in 0.6.14.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: For Linux and ARM using proper download off appimage. Fixed
in 0.6.14.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyreadstat&lt;/span&gt;&lt;/code&gt;. Fixed in 0.6.14.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt;. Fixed in
0.6.14.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Some preloaded packages from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pth&lt;/span&gt;&lt;/code&gt; do not have a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt;, these can and must be ignored.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: On Linux, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.argv[0]&lt;/span&gt;&lt;/code&gt; was not the original file as
advertised.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not consider &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.mesh&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.frag&lt;/span&gt;&lt;/code&gt; files as DLls in
the Qt bindings when including the qml support. This was causing
errors on Linux, but was generally wasteful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, project options could be injected twice, which could lead to
errors with options that were only allowed once, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--linux-onefile-icon&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: When updating the resources in created binaries, treat all
kinds of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OSError&lt;/span&gt;&lt;/code&gt; with information output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Remove onefile target binary path at startup as well, so it
cannot cause confusion after error exit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: In case of error exit from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AppImage&lt;/span&gt;&lt;/code&gt;, preserve its
outputs and attempt to detect if there was a locking issue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Scan package folders on Linux for DLLs too. This is
necessary to properly handle &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5&lt;/span&gt;&lt;/code&gt; in case of Qt installed in the
system as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: On Linux, standard QML files were not found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Enforce C locale when detecting DLLs on Linux, otherwise
whitelisting messages didn’t work properly on newer Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tzdata&lt;/span&gt;&lt;/code&gt; package data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exchangelib&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9: Fix, type subscripts could cause optimization errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Project options didn’t properly handle quoting of arguments,
these are normally removed by the shell.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: The default icon for Python in the system is now found with
more version specific names and should work on more systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libstdc++&lt;/span&gt;&lt;/code&gt; as it should come from the
system rather.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added plugin &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;anti-bloat&lt;/span&gt;&lt;/code&gt; plugin, intended to fight bloat. For now
it can make including certain modules an error, a warning, or force
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ImportError&lt;/span&gt;&lt;/code&gt;, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--noinclude-setuptools-mode=nofollow&lt;/span&gt;&lt;/code&gt; is
very much recommended to limit compilation size.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg-resources&lt;/span&gt;&lt;/code&gt; builtin now covers &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metadata&lt;/span&gt;&lt;/code&gt; and
importlib_metadata packages for compile time version resolution as
well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; on Python version before 3.6, because
the patched code needs no workarounds. Fixed in 0.6.14.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Convert images to icon files on the fly. So now you can
specify multiple PNG files, and Nuitka will create an icon out of
that automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Automatically download &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; binary if not present.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: New interface to query the main script path. This allows
plugins to look at its directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Output the versions of Nuitka and Python during compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added option to control static linking. So far this had been
enabled only automatically for cases where we are certain, but this
allows to force enable or disable it. Now an info is given, if Nuitka
thinks it might be possible to enable it, but doesn’t do it
automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-onefile&lt;/span&gt;&lt;/code&gt; to disable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile&lt;/span&gt;&lt;/code&gt; from project
options.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Much enhanced GIL interaction with Python3.9 giving a big speed boost
and better threading behaviour.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster conversion of iterables to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, if size can be know,
allocation ahead saves a lot of effort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;GenericAlias&lt;/span&gt;&lt;/code&gt; objects as compile time constants.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Enhanced GitHub issue raising instructions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rstfmt&lt;/span&gt;&lt;/code&gt; to all documentation and make it part of the commit
hook.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to check Scons files as well. This would have caught the
code used to disable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; temporarily.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not mention Travis in PR template anymore, we have stopped using
it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated requirements to latest versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bump requirements for development to 3.7 at least, toosl like black
do not work with 3.6 anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Started work on Nuitka Python, a CPython fork intended for enhanced
performance and standalone support with Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Determine system prefix without virtualenv outside of Scons, such
that plugins can share the code. There was duplication with the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; plugin, and this will only be more complete using all
approaches. This also removes a lot of noise from the scons file
moving it to shared code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Qt plugins now collect QML files with cleaner code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nicer error message if a wrong search mode is given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added timeout for determining run time traces with
dependency walker, sometimes this hangs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover the zip importer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Making use of project options in onefile tests, making it easier to
execute them manually.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;For Windows, it’s now easier than ever to create an icon for your
deployment, because you can use PNG files, and need not produce ICO
files anymore, with Nuitka doing that for you.&lt;/p&gt;
&lt;p&gt;The onefile for Linux had some more or less severe problems that got
addressed, esp. also when it came to QML applications with PySide.&lt;/p&gt;
&lt;p&gt;On the side, we are preparing to greatly improve the caching of Nuitka,
starting with retaining modules that were demoted to bytecode. There are
changes in this release, to support that, but it’s not yet complete. We
expect that scalability will then be possible to improve even further.&lt;/p&gt;
&lt;p&gt;Generally this is mostly a maintenance release, which outside of the
threading performance improvement has very little to offer for faster
execution, but that actually does a lot. Unfortunately right now it’s
limited to 3.9, but some of the newer Python’s will also be supported in
later releases.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0615.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2021-06-05T17:18:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0614.html</id>
    <title>Nuitka Release 0.6.14</title>
    <updated>2021-05-01T09:19:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-14"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has few, but important bug fixes. The main focus was on
expanding standalone support, esp. for PySide2, but also and in general
with plugins added that workaround &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; usage for version
information.&lt;/p&gt;
&lt;p&gt;Also an important new features was added, e.g. the project configuration
in the main file should prove to be very useful.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, modules that failed to import, should be retried
on next import.&lt;/p&gt;
&lt;p&gt;So far we only ever executed the module body once, but that is not
how it’s supposed to be. Instead, only if it’s in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.modules&lt;/span&gt;&lt;/code&gt;
that should happen, which is the case after successful import.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, constant &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt; values in right hand side of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; conditions were generating wrong code if the left side
was of known &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; shape too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, add &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;styles&lt;/span&gt;&lt;/code&gt; Qt plugins to list of sensible
plugins.&lt;/p&gt;
&lt;p&gt;Otherwise no mouse hover events are generated on some platforms.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, relative &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; imports beyond level 1 were not
loadingg modules from packages if necessary. Fixed in 0.6.13.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;crypto&lt;/span&gt;&lt;/code&gt; DLL check for Qt bindings was wrong. Fixed
in 0.6.13.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added experimental support for PySide6, but for good
results, 6.1 will be needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer matplotlib. Fixed in 0.6.12.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Reverted changes related to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources&lt;/span&gt;&lt;/code&gt; that were
causing regressions. Fixed in 0.6.13.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Adding missing implicit dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cytoolz&lt;/span&gt;&lt;/code&gt;
package. Fixed in 0.6.13.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Matching for package names to not suggest recompile for
was broken and didn’t match. Fixed in 0.6.13.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added support for project options.&lt;/p&gt;
&lt;p&gt;When found in the filename provided, Nuitka will inject options to
the commandline, such that it becomes possible to do a complex
project with only using&lt;/p&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;nuitka&lt;span class="w"&gt; &lt;/span&gt;filename.py
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Compilation mode, support OS specific.&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project-if: {OS} in (&amp;quot;Windows&amp;quot;, &amp;quot;Linux&amp;quot;):&lt;/span&gt;
&lt;span class="c1"&gt;#    nuitka-project: --onefile&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project-if: {OS} not in (&amp;quot;Windows&amp;quot;, &amp;quot;Linux&amp;quot;):&lt;/span&gt;
&lt;span class="c1"&gt;#    nuitka-project: --standalone&lt;/span&gt;

&lt;span class="c1"&gt;# The PySide2 plugin covers qt-plugins&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --enable-plugin=pyside2&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --include-qt-plugins=sensible,qml&lt;/span&gt;

&lt;span class="c1"&gt;# The pkg-resources plugin is not yet automatic&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --enable-plugin=pkg-resources&lt;/span&gt;

&lt;span class="c1"&gt;# Nuitka Commercial only features follow:&lt;/span&gt;

&lt;span class="c1"&gt;# Protect the constants from being readable.&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --enable-plugin=data-hiding&lt;/span&gt;

&lt;span class="c1"&gt;# Include datafiles for Qt into the binary directory.&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --enable-plugin=datafile-inclusion&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --qt-datadir={MAIN_DIRECTORY}&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --qt-datafile-pattern=*.js&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --qt-datafile-pattern=*.qml&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --qt-datafile-pattern=*.svg&lt;/span&gt;
&lt;span class="c1"&gt;# nuitka-project: --qt-datafile-pattern=*.png&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Refer to the User Manual for a table of directives and the variables
allowed to be used.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option to include whole data directory structures in
standalone.&lt;/p&gt;
&lt;p&gt;The new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-data-dir&lt;/span&gt;&lt;/code&gt; was added and is mostly
required for onefile mode, but recommended for standalone too.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg-resources&lt;/span&gt;&lt;/code&gt; plugin.&lt;/p&gt;
&lt;p&gt;This one can resolve code like this at compile time without any need
for pip metadata to be present or used.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;pkg_resources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_distribution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;module_name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;
&lt;span class="n"&gt;pkg_resources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_distribution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;module_name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parsed_version&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Also process early imports in optimization.&lt;/p&gt;
&lt;p&gt;Otherwise plugins cannot work on standard library modules. This makes
it possible to handle them as well.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Faster binary operations.&lt;/p&gt;
&lt;p&gt;Applying lessons learnt during the enhancements for in-place
operations that initially gave worse results than some manual code,
we apply the same tricks for all binary operations, which speeds them
up by significant margins, e.g. 30% for float addition, 25% for
Python int addition, and still 6% for Python int addition.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More direct optimization of unary operations on constant value.&lt;/p&gt;
&lt;p&gt;Without this, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-1&lt;/span&gt;&lt;/code&gt; was not directly a constant value, but had to go
through the unary &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-&lt;/span&gt;&lt;/code&gt; operation, which it still does, but now it’s
done at tree building time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More direct optimization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt; in branches.&lt;/p&gt;
&lt;p&gt;Invertible comparisons, i.e. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt;
do not have do be done during optimization. This mainly avoids noise
during optimization from such unimportant steps.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More direct optimization for constant slices.&lt;/p&gt;
&lt;p&gt;These are used in Python3 for all subscripts, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a[1:2]&lt;/span&gt;&lt;/code&gt; will
use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;slice(1,2)&lt;/span&gt;&lt;/code&gt; effectively. For Python2 they are used less often,
but still. This also avoids a lot of noise during optimization,
mostly on Python3&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Avoid writing database to disk entirely.&lt;/p&gt;
&lt;p&gt;This saves a bit of disk churn and makes it unnecessary to specify
the location such that it doesn’t collide between Python versions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For optimization passes, use previous max total as minimum for next
pass. That will usually be a more accurate result, rather than
starting from 1 again. Part of 0.6.13.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhancements to the branch merging improve the scalability of Nuitka
somewhat, although the merging itself is still not very scalable,
there are some modules that are very slow to optimize still.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;orderset&lt;/span&gt;&lt;/code&gt; if available over the inline copy for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OrderedSet&lt;/span&gt;&lt;/code&gt;
which is much faster and improves Nuitka compile times.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil&lt;/span&gt;&lt;/code&gt; a hard import too, this is in preparation of more
optimization for its functions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Upstream patches for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide6&lt;/span&gt;&lt;/code&gt; have been contributed and merged
into the development branch &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dev&lt;/span&gt;&lt;/code&gt;. Full support should be available
once this is released as part of 6.1 which is waiting for Qt 6.1
naturally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Patches for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; are available to commercial customers, see
&lt;a class="reference external" href="https://nuitka.net/pages/pyside2.html"&gt;PySide2 support&lt;/a&gt; page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Formatted all documents with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rstfmt&lt;/span&gt;&lt;/code&gt; and made that part of the
commit hook for Nuitka. It now works for all documents we have.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated inline copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; to 4.59.0 which ought to address
spurious errors given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Remove &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-progress&lt;/span&gt;&lt;/code&gt; from the tutoral. The default
progress bar is then disabled, and is actually much nicer to use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Developer Manual: Added description of how context managers should be
named.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanup language for some warnings and outputs.&lt;/p&gt;
&lt;p&gt;It was still using obsolete “recursion” language rather than talking
about “following imports”, which is the new one.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Remove dead code related to constants marshal, the data composer has
replaced this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid internal API usage for loading extension modules on Linux,
there is a function in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys&lt;/span&gt;&lt;/code&gt; module to get the ld flags.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;only&lt;/span&gt;&lt;/code&gt; mode wasn’t working properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use new project options feature for specific options in basic tests
allowing to remove them from the test runner.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;For PySide2 things became more perfect, but it takes upstream patches
unfortunately such that only PySide6.1 will be working out of the box
outside of the commercial offering. We will also attempt to provide
workarounds, but there are some things that cannot be done that way.&lt;/p&gt;
&lt;p&gt;This release added some more scalability to the optimization process,
however there will be more work needed to make efficient branch merges.&lt;/p&gt;
&lt;p&gt;For onefile, a feature to include whole directories had been missing,
and could not easily be achieved with the existing options. This further
rounds this up, now what’s considered missing is compression and macOS
support, both of which should be coming in a future release.&lt;/p&gt;
&lt;p&gt;For the performance side of things, the binary operator work can
actually yield pretty good gains, with double digit improvements, but
this covers only so much. Much more C types and better type tracing
would be needed, but there was no progress on this front. Future
releases will have to revisit the type tracing to make sure, we know
more about loop variables, etc. so we can achieve the near C speed we
are looking for, at least in the field of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; performance.&lt;/p&gt;
&lt;p&gt;This release has largely been driven by the &lt;a class="reference external" href="/doc/commercial.html"&gt;Nuitka Commercial&lt;/a&gt; offering and needs for compatibility with more
code, which is of course always a good thing.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0614.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2021-05-01T09:19:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0613.html</id>
    <title>Nuitka Release 0.6.13</title>
    <updated>2021-04-03T10:05:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-13"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release follows up with yet again massive improvement in many ways
with lots of bug fixes and new features.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Icon group entries were not still not working properly in
some cases, leading to no icon or too small icons being displayed.
Fixed in 0.6.12.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Icons and version information were copied from the
standalone executable to the onefile executable, but that failed due
to race situations, sometimes reproducible. Instead we now apply
things to both independently. Fixed in 0.6.12.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fixup scanning for DLLs with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ldconfig&lt;/span&gt;&lt;/code&gt; on Linux and
newer versions making unexpected outputs. Fixed in 0.6.12.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: When there is no standard input provided, prompts were crashing
with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;EOFError&lt;/span&gt;&lt;/code&gt; when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--assume-yes-for-downloads&lt;/span&gt;&lt;/code&gt; is not given,
change that to defaulting to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;quot;no&amp;quot;&lt;/span&gt;&lt;/code&gt; instead. Fixed in 0.6.12.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Detect empty strings for company name, product name, product
and file versions rather than crashing on them later. Them being
empty rather than not there can cause a lot of issues in other
places. Fixed in 0.6.12.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Pass on exceptions during execution in worker threads and
abort compilation immediately. Fixed in 0.6.12.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9: Still not fully compatible with typing subclasses, the
enhanced check is now closely matching the CPython code. Fixed in
0.6.12.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Nicer error message for missing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libfuse&lt;/span&gt;&lt;/code&gt; requirement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Lookups on dictionaries with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; value giving a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;KeyError&lt;/span&gt;&lt;/code&gt; exception, but with no value, which is not what CPython
does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9: Fix, future annotations were crashing in debug mode. Fixed
in 0.6.12.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Corrections to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;glfw&lt;/span&gt;&lt;/code&gt; were made. Fixed in 0.6.12.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing ìmplicit dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;py.test&lt;/span&gt;&lt;/code&gt;. Fixed
in 0.6.12.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Adding missing implicit dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyreadstat&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added workaround for common clcache locking problems. Since
we use it only inside a single Scons process, we can avoiding using
Windows mutexes, and use a process level lock instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix plugin for support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eventlet&lt;/span&gt;&lt;/code&gt;. Fixed in 0.6.12.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for latest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zmq&lt;/span&gt;&lt;/code&gt; on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--quiet&lt;/span&gt;&lt;/code&gt; flag was not fully honored yet, with Scons
still making a few outputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for alternative DLL name for newer
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyGTK3&lt;/span&gt;&lt;/code&gt; on Windows. Fixed in 0.6.12.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix plugin for support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gevent&lt;/span&gt;&lt;/code&gt;. Fixed in 0.6.12.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added yet another missing implicit dependency for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pandas&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;qt-plugins&lt;/span&gt;&lt;/code&gt; plugin could stumble over &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.mesh&lt;/span&gt;&lt;/code&gt;
files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, dependency walker wasn’t properly working with unicode
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%PATH%&lt;/span&gt;&lt;/code&gt; which could e.g. happen with a virtualenv in a home
directory that requires them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fixed a few Python debug mode warnings about unclosed files
that have sneaked into the codebase.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added new options &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-force-stdout-spec&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-force-stderr-spec&lt;/span&gt;&lt;/code&gt; to force output to files. The paths
provided at compile time can resolve symbolic paths, and are intended
to e.g. place these files near the executable. Check the User Manual
for a table of the currently supported values. At this time, the
feature is limited to Windows, where the need arose first, but it
will be ported to other supported OSes eventually. These are most
useful for programs run as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-disable-console&lt;/span&gt;&lt;/code&gt; or with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--enable-plugin=windows-service&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;These options have since been renamed to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--force-stdout&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--force-stderr&lt;/span&gt;&lt;/code&gt; and have been made to work on all OSes.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-onefile-tempdir-spec&lt;/span&gt;&lt;/code&gt; (since
renamed to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile-tempdir-spec&lt;/span&gt;&lt;/code&gt;) to provide the temporary
directory used with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-onefile-tempdir&lt;/span&gt;&lt;/code&gt; in onefile mode,
you can now select your own pattern, and e.g. hardcode a base
directory of your choice rather than &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%TEMP&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; with workarounds for
compiled methods not being accepted by its core. There are known
issues with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; still, but it’s working fine for some people
now. Upstream patches will have to be created to remove the need for
workarounds and full support.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Use binary operation code for their in-place variants too, giving
substantial performance improvements in all cases that were not dealt
with manually already, but were covered in standard binary
operations. Until now only some string, some float operations were
caught sped up, most often due to findings of Nuitka being terribly
slower, e.g. not reusing string memory for inplace concatenation, but
now all operations have code that avoids a generic code path, that is
also very slow on Windows due calling to using the embedded Python
via API being slow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For mixed type operations, there was only one direction provided,
which caused fallbacks to slower forms, e.g. with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; values leading to inconsistent results, such that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;-&lt;/span&gt; &lt;span class="pre"&gt;1&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1&lt;/span&gt; &lt;span class="pre"&gt;-&lt;/span&gt; &lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt; being accelerated or not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added C boolean optimization for a few operations that didn’t have
it, as these allow to avoid doing full computation of what the object
result would have to do. This is not exhausted fully yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Faster &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+=&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-=&lt;/span&gt;&lt;/code&gt; binary and in-place
operations with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; values providing specialized code helpers
that are much faster, esp. in cases where no new storage is allocated
for in-place results and where not a lot of digits are involved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: The Python3 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; code is the Python2 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; type and
benefits from the optimization of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+=&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-=&lt;/span&gt;&lt;/code&gt; code as
well, but of course its use is relatively rare.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__future__&lt;/span&gt;&lt;/code&gt; imports to become hard imports, so more
efficient code is generated for them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Counting of instances had a run time impact by providing a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__del__&lt;/span&gt;&lt;/code&gt; that was still needed to be executed and limits garbage
collection on types with older Python versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Avoid loading &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; module before it’s actually used if at all
(it may get disabled by the user), speeding up the start of Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to optimize internal helpers only once and immediately,
avoiding extra global passes that were slowing down Python level
compilation by of large programs by a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to recognize the case where a module optimization can
provide no immediate change, but only after a next run, avoiding
extra global passes originating from these, that were slowing down
compilation of large programs by a lot. Together with the other
change, this can improve scalability by a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Remove implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources.extern&lt;/span&gt;&lt;/code&gt;
and use aliases instead. Using one of the packages, was causing all
that might be used, to be considered as used, with some being
relatively large. This was kind of a mistake in how we supported this
so far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Revamped the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eventlet&lt;/span&gt;&lt;/code&gt; plugin, include needed DNS modules
as bytecode rather than as source code, scanning them with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil&lt;/span&gt;&lt;/code&gt; rather than filesystem, with much cleaner code in the
plugin. The plugin is also now enabled by default.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Removed support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pefile&lt;/span&gt;&lt;/code&gt; dependency walker choice and inline
copy of the code. It was never as good giving incomplete results, and
after later improvements, slower, and therefore has lost the original
benefit over using Dependency Walker that is faster and more correct.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added example for onefile on Windows with the version information and
with the temporary directory mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Describe difference in file access with onefile on Windows, where
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.argv[0]&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.dirname(__file__)&lt;/span&gt;&lt;/code&gt; will be different
things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added inline copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; to make sure it’s available for
progress bar output for 2.7 or higher. Recommend having it in the
Debian package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added inline copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;colorama&lt;/span&gt;&lt;/code&gt; for use on Windows, where on some
terminals it will give better results with the progress bar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stop using old PyLint for Python2, while it would be nice to catch
errors, the burden of false alarms seems to high now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added even more checks on options that make no sense, made sure
to do this only after a possible restart in proper environment, so
warnings are not duplicated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Linux onefile, keep appimage outputs in case of an error, that
should help debugging it in case of issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Added traces for plugin provided implicit dependencies leading to
inclusions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added inline copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zstd&lt;/span&gt;&lt;/code&gt; C code for use in decompression for the
Windows onefile bootstrap, not yet used though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added checks to options that accept package names for obvious
mistakes, such that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data&lt;/span&gt; &lt;span class="pre"&gt;--mingw64&lt;/span&gt;&lt;/code&gt; will not
swallow an option, as that is clearly not a package name, that would
hide that option, while also not having any intended effect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added ignore list for decision to recompile extension modules with
available source too. For now, Nuitka will not propose to recompile
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Cython&lt;/span&gt;&lt;/code&gt; modules that are very likely not used by the program
anyway, and also not for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lxml&lt;/span&gt;&lt;/code&gt; until it’s clear if there’s any
benefit in that. More will be added in the future, this is mostly for
cases, where Cython causes incompatibilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for using abstract base classes in plugins. These are
not considered for loading, and allow nicer implementation of shared
code, e.g. between &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PySide2&lt;/span&gt;&lt;/code&gt; plugins, but allow e.g.
to enforce the provision of certain overloads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Manual: Remove the instruction to install &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt;, since
it’s an inline copy, this makes no sense anymore and that was
obsolete.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated PyLint to latest versions, and our requirements in general.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Started removal of PyLint annotations used for old Python2 only. This
will be a continuous action to remove these.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jinja2 based static code generation for operations was cleaned up, to
avoid code for static mismatches in the result C, avoiding language
constructs like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;if&lt;/span&gt; &lt;span class="pre"&gt;(1&lt;/span&gt; &lt;span class="pre"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="pre"&gt;0)&lt;/span&gt;&lt;/code&gt; with sometimes larger branches,
replacing it with Jinja2 branches of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{%&lt;/span&gt; &lt;span class="pre"&gt;if&lt;/span&gt; &lt;span class="pre"&gt;...&lt;/span&gt; &lt;span class="pre"&gt;%}&lt;/span&gt;&lt;/code&gt; form.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jinja2 based Python2 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; code was pioniering the use of macros,
but this was expanded to allow kinds of types for binary operations,
allow their reuse for in-place operation, with these macros making
returns via goto exits rather than return statements in a function.
Landing pads for these exits can then assign target values for
in-place different from what those for binary operation result return
do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed the interfacing of plugins with DLL dependency detection,
cleaning up the interactions considerably with more unified code, and
faster executing due to cached plugin decisions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrate manually provided slot function for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;
into the standard static code generation. Previously parts were
generated and parts could be generated, but also provided with manual
code. The later is now all gone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use a less verbose progress bar format with less useless infos,
making it less likely to overflow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanup how payload data is accessed in Windows onefile bootstrap,
preparing the addition of decompression, doing the reading from the
file in only one dedicated function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When Jinja2 generated exceptions in the static code, it is now done
via proper Jinja2 macros rather than Python code, and these now avoid
useless Python version branches where possible, e.g. because a type
like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; is already Python version specific, with the goal to
get rid of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyErr_Format&lt;/span&gt;&lt;/code&gt; usage in our generated static code. That
goal is future work though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move safe strings helpers (cannot overflow) to a dedicated file, and
remove the partial duplication on the Windows onefile bootstrap code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Jinja2 static code generation was enhanced to track the usage of
labels used as goto targets, so that error exits, and value typed
exits from operations code no longer emitted when not used, and
therefore labels that are not used are not present.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For implicit dependencies, the parsing of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; file of a
module no longer emits a dependency on the module itself. Also from
plugins, these are now filtered away.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Detect if onefile mode has required downloads and if there is user
consent, otherwise skip onefile tests in the test runner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Need to also allow accesses to files via short paths on Windows if
these are allowed long paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The standalone tests on Windows didn’t actually take run time traces
and therefore were ineffective.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added standalone test for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;glfw&lt;/span&gt;&lt;/code&gt; coverage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;construct-based tests for in-place operations are now using a value
for the first time, and then a couple more times, allowing for real
in-place usage, so we are sure we measure correctly if that’s
happening.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Where the big change of the last release were optimization changes to
reduce the global passes, this release addresses remaining causes for
extra passes, that could cause these to still happen. That makes sure,
Nuitka scalability is very much enhanced in this field again.&lt;/p&gt;
&lt;p&gt;The new features for forced outputs are at this time Windows only and
make a huge difference when it comes to providing a way to debug Windows
Services or programs in general without a console, i.e. a GUI program.
These will need even more specifiers, e.g. to cover program directory,
rather than exe filename only, but it’s a very good start.&lt;/p&gt;
&lt;p&gt;On the tooling side, not a lot has happened, with the clcache fix, it
seems that locking issues on Windows are gone.&lt;/p&gt;
&lt;p&gt;The plugin changes from previous releases had left a few of them in a
state where they were not working, but this should be restored.
Interaction with the plugins is being refined constantly, and this
releases improved again on their interfaces. It will be a while until
this becomes stable.&lt;/p&gt;
&lt;p&gt;Adding support for PySide2 is a headline feature actually, but not as
perfect as we are used to in other fields. More work will be needed,
also in part with upstream changes, to get this to be fully supported.&lt;/p&gt;
&lt;p&gt;For the performance side of things, the in-place work and the binary
operations work has taken proof of concept stuff done for Python2 and
applied it more universally to Python3. Until we cover all long
operations, esp. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; seems extremely important and is lacking, this
cannot be considered complete, but it gives amazing speedups in some
cases now.&lt;/p&gt;
&lt;p&gt;Future releases will revisit the type tracing to make sure, we know more
about loop variables, to apply specific code helpers more often, so we
can achieve the near C speed we are looking for in the field of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;
performance.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0613.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2021-04-03T10:05:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0612.html</id>
    <title>Nuitka Release 0.6.12</title>
    <updated>2021-02-16T09:24:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-12"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is yet again a massive improvement in many ways with lots
of bug fixes and new features.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Windows: Icon group entries were not working properly in some cases,
leading to no icon or too small icons being displayed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The PyQt implicit dependencies were broken. Fixed in
0.6.11.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The datafile collector plugin was broken. Fixed in
0.6.11.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for newer forms of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; which
need a different file layout and config file format. Fixed in
0.6.11.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable notes given by gcc, these were treated as errors. Fixed in
0.6.11.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, spaces in gcc installation paths were not working.
Partially fixed in 0.6.11.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Fix, missing onefile icon error message was not complete.
Fixed in 0.6.11.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Workaround &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zmq&lt;/span&gt;&lt;/code&gt; problem on Windows by duplicating a
DLL in both expected places. Fixed in 0.6.11.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill-compat&lt;/span&gt;&lt;/code&gt; plugin wasn’t working anymore. Fixed
in 0.6.11.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix mistaken usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sizeof&lt;/span&gt;&lt;/code&gt; for wide character buffers.
This caused Windows onefile mode in temporary directory. Fixed in
0.6.11.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, checking subfolder natured crashed with different
drives on Windows. Fixed in 0.6.11.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, usage from MSVC prompt was no longer working, detect
used SDK properly. Fixed in 0.6.11.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, old clcache installation uses pth files that prevented
our inline copy from working, workaround was added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Also specify stack size to be used when compiling with gcc
or clang.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, claim of Python 3.9 support also in PyPI metadata was missing.
Fixed in 0.6.11.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9: Subscripting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; for annotations wasn’t yet
implemented.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.9: Better matching of types for metaclass selection, generic
aliases were not yet working, breaking some forms of type annotations
in base classes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Allow selecting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--msvc-version&lt;/span&gt;&lt;/code&gt; when a MSVC prompt is
currently activated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Do not fallback to using gcc when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--msvc-version&lt;/span&gt;&lt;/code&gt; has
been specified. Instead it’s an error if that fails to work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt; &lt;span class="pre"&gt;()&lt;/span&gt;&lt;/code&gt; statements, these have no
effect, but were crashing Nuitka.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;  &lt;span class="c1"&gt;# standard form&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;  &lt;span class="c1"&gt;# same as del a; del b&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# braces are allowed&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# allowed for consistency, but wasn&amp;#39;t working.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;glfw&lt;/span&gt;&lt;/code&gt; through a dedicated plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added support for Python3 from system and CPython official
download for latest OS version.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;UI: With &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tqdm&lt;/span&gt;&lt;/code&gt; installed alongside Nuitka, experimental progress
bars are enabled. Do not use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-progress&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--verbose&lt;/span&gt;&lt;/code&gt; as
these might have to disable it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added APIs for final processing of the result and onefile
post-processing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: On Windows, the Python process terminates with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;KeyboardInterrupt&lt;/span&gt;&lt;/code&gt; when the user sends CTRL-break, CTRL-C,
shutdown or logoff signals.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: On Windows, in case of the launching process terminating
unexpectedly, e.g. due to Taskmanager killing it, or a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.sigkill&lt;/span&gt;&lt;/code&gt;
resulting in that, the Python process still terminates with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;KeyboardInterrupt&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Now can select icons by index from files with multiple
icons.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better unary node handling. Dedicated nodes per operation allow for
more compact memory usage and faster optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect flow control and value escape for the repr of node based on
type shape.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced optimization of caught exception references, these never
raise or have escapes of control flow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception matching operations are more accurately annotated, and may
be recognized to not raise in more cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;issubclass&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed scons caching as used on Windows entirely. We should either
be using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; automatically now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__slots__&lt;/span&gt;&lt;/code&gt; 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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Enhanced gcc version detection with improved caching behavior,
this avoids querying the same gcc binary twice.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid terms &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;blacklist&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;whilelist&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;slave&lt;/span&gt;&lt;/code&gt; in the Nuitka
code preferring &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;blocklist&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ignorelist&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;child&lt;/span&gt;&lt;/code&gt; instead,
which are actually more clear anyway. We follow a general trend to do
this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configured the inline copy of Scons so pylance has an easier time to
find it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The git commit hook had stopped applying diffs with newest git,
improved that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated description for adding new CPython test suite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using https URLs for downloading dependency walker, for it to be more
secure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The commit hook can now be disabled, it’s in the Developer Manual how
to do it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved unary operations to their own module, the operators module was
getting too crowded.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The scons files for Python C backend and Windows onefile got cleaned
up some more and moved more common code to shared modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When calling external tools, make sure to provide null input where
possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified calling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;install_name_tool&lt;/span&gt;&lt;/code&gt; into a single method for adding
rpath and name changes both at the same time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified how tools like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;readelf&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ldconfig&lt;/span&gt;&lt;/code&gt; etc. are called and
error exits and outputs checked to make sure we don’t miss anything
as easily.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Adapted for some openSUSE specific path usages in standalone tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basic tests for onefile operation and with termination signal sent
were added.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0612.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2021-02-16T09:24:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0611.html</id>
    <title>Nuitka Release 0.6.11</title>
    <updated>2021-01-25T10:17:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-11"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is a massive improvement in many ways with lots of bug
fixes and new features.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; file parser didn’t handle relative imports. Fixed
in 0.6.10.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, multiprocessing plugin was not working reliable
following of imports from the additional entry point. Fixed in
0.6.10.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pipenv: Workaround parsing issue with our &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setup.py&lt;/span&gt;&lt;/code&gt; to allow
installation from GitHub. Fixed in 0.6.10.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Merging of branches in optimization could give nondeterministic
results leading to more iterations than necessary. Fixed in 0.6.10.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid profile powershell when attempting to resolve
symlinks. Fixed in 0.6.10.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, always check for stdin, stdout, and stderr presence.
This was so far restricted to gui mode applications, but it seems to
be necessary in other situations too. Fixed in 0.6.10.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--trace-execution&lt;/span&gt;&lt;/code&gt; was not working for standalone
mode but can be useful for debugging. Fixed in 0.6.10.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Onefile could run into path length limits. Fixed in 0.6.10.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The winlib gcc download link became broken and was updated.
Fixed in 0.6.10.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The “__main__” module was not triggering all plugin hooks,
but it needs to for completeness.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, symlinked Python installations on Windows were not
working, with dependency walker being unable to look into these.
Fixed in 0.6.10.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix support for numpy on Windows and macOS, the plugin
failed to copy important DLLs. Fixed in 0.6.10.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: For versions before 3.7, the symlink resolution also needs
to be done, but wasn’t handling the bytes output yet. Fixed in
0.6.10.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, folder based inclusion would both pick up namespace folders and
modules of the same name, crashing the compilation due to conflicts.
Fixed in 0.6.10.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto&lt;/span&gt;&lt;/code&gt; wasn’t used for clang on non-Windows yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the order of locals dict releases wasn’t enforced, which could
lead to differences that break caching of C files potentially. Fixed
in 0.6.10.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hash&lt;/span&gt;&lt;/code&gt; nodes didn’t consider if their argument was raising,
even if the type of the argument was &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; and therefore the
operation should not. Fixed in 0.6.10.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need to copy type shape and escape description for the
replacement inverted comparisons when used with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt;, otherwise
the compilation can crash as these are expected to be present at all
times. Fixed in 0.6.10.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, some complex constant values could be confused, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-0j&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;0j&lt;/span&gt;&lt;/code&gt;. These corner cases were not properly considered in the
constant loading code, only for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; so far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, bytecode only standard library modules were not
working. This is at least used with Fedora 33.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Fix, extension modules compiled with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto&lt;/span&gt;&lt;/code&gt; were not
working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Retry if updating resources fails due to Virus checkers
keeping files locked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Pre- and postload code of modules should not be allowed to
cause &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ImportError&lt;/span&gt;&lt;/code&gt;, as these will be invisible to the other parts
of optimization, instead make them unraisable error traces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Adding missing import for SciPy 1.6 support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, only export required symbols when using MinGW64 in
module mode.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.9: Added official support for this version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Added command line options to include data files. These are
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package-data&lt;/span&gt;&lt;/code&gt; which will copy all non-DLLs and
non-Python files of package names matching the pattern given. And
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-data-file&lt;/span&gt;&lt;/code&gt; takes source and relative target file paths
and copies them. For onefile this is the only way to include files,
for standalone mode they are mostly a convenience function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Added mode where the file is unpacked to a temporary folder
before running instead of doing it to appdata.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onefile: Added linux specific options &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--linux-onefile-icon&lt;/span&gt;&lt;/code&gt; to
allow provision of an icon to use in onefile mode on Linux, so far
this was only available as the hard coded path to a Python icon,
which also didn’t exist on all platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Major logging cleanup. Everything is now using our tracing
classes and even error exits go through there and are therefore
colored if possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Make it easier to integrate commercial plugins, now only an
environment variable needs to point to them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: Enhanced option parsing gives notes. This complains about options
that conflict or that are implied in others. Trying to catch more
usage errors sooner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Ignore exceptions in buggy plugin code, only warn about them
unless in debug mode, where they still crash Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: More complete scons report files, includes list values as well
and more modes used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; is now included and no longer used from the
system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Output for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; results got improved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang&lt;/span&gt;&lt;/code&gt;, on Windows if present near a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc.exe&lt;/span&gt;&lt;/code&gt; like it is the case for some WinLibs downloads, it will
be used. To use it provide &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mingw64&lt;/span&gt; &lt;span class="pre"&gt;--clang&lt;/span&gt;&lt;/code&gt; both. Without the
first one, it will mean &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clangcl.exe&lt;/span&gt;&lt;/code&gt; which uses the MSVC compiler
as a host.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Some modules had very slow load times, e.g. if they used many list
objects due to linear searches for memory deduplication of objects.
We now have dictionaries of practically all constant objects loaded,
making these more instant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use less memory at compile time due using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__slots__&lt;/span&gt;&lt;/code&gt; for all node
types, finally figured out, how to achieve this with multiple
inheritance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use hedley for compiler macros like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unlikely&lt;/span&gt;&lt;/code&gt; as they know best
how to do these.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Special case the merging of 2 branches avoiding generic code and
being much faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hard imports have better code generated, and are being optimized into
for the few standard library modules and builtin modules we handle,
they also now annotate the type shape to be module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No longer annotate hard module import attribute lookups as control
flow escapes. Not present attributes are changed into static raises.
Trust for values is configured for a few values, and experimental.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid preloaded packages for modules that have no side effects and
are in the standard library, typically &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pth&lt;/span&gt;&lt;/code&gt; files will use e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os&lt;/span&gt;&lt;/code&gt; but that’s not needed to be preserved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;incbin&lt;/span&gt;&lt;/code&gt; for including binary data through inline assembly of
the C compiler. This covers many more platforms than our previous
linker option hacks, and the fallback to generated C code. In fact
everything but Windows uses this now.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: For Scons we now require a Python 3.5 or higher to be
installed to use it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Removed support for gcc older than version 8. This
specifically affects CondaCC and older MinGW64 installations. Since
Nuitka can now download the MinGW64 10, there is no point in having
these and they cause issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We took over the maintenance of clcache as Nuitka/clcache which is
not yet ready for public consumption, but should become the new
source of clache in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include an inline copy of clcache in Nuitka and use it on Windows for
MSVC and ClangCL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed compatibility older aliases of follow option, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-*&lt;/span&gt;&lt;/code&gt;
and require &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--follow-*&lt;/span&gt;&lt;/code&gt; options to be used instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For pylint checking, the tool now supports a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--diff&lt;/span&gt;&lt;/code&gt; mode where
only the changed files get checked. This is much faster and allows to
do it more often before commit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the versions of isort and black when doing the auto-format to
avoid using outdated versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handling missing pylint more gracefully when checking source code
quality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to use the codespell tool with Python3 and make sure to
error exit when spelling problems were found, so we can use this in
GitHub actions too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed Travis config, we now only use GitHub actions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed landscape config, it doesn’t really exist anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bumped all PyPI dependnecies to their latest versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recommend ccache on Debian, as we now consider the absence of ccache
something to warn about.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The DLLs asked for by plugins that are not found are no
longer warned about.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow our checker and format tools to run on outside of tree code. We
are using that for Nuitka/clcache.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Fedora 33 and openSUSE 15.3, as well as Ubuntu
Groovy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Check if Windows SDK is installed for MSVC and ClangCL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Enhanced wording in case no compiler was found. No longer
tell people how to manually install MinGW64, that is no longer
necessary and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pywin32&lt;/span&gt;&lt;/code&gt; is not needed to detect MSVC, so it’s not
installed if not found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect “embeddable Python” by missing include files, and reject it
with proper error message.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added onefile and standalone as a use case to the manual and put also
the DLL and data files problems as typically issues.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Avoid decimal and string comparisons for Python versions checks,
these were lazy and are going to break once 3.10 surfaces. In testing
we now use tuples, in Nuitka core hexacimal values much like CPython
itself does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stop using subnode child getters and setters, and instead only use
subnode attributes. This was gradually changed so far, but in this
release all remaining uses have migrated. This should also make the
optimization stage go faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change node constructors to not use a decorator to resolve conflicts
with builtin names, rather handle these with manual call changes, the
decorator only made it difficult to read and less performant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move safe string helpers to their own dedicated helper file, allowing
for reuse in plugin code that doesn’t want to use all of Nuitka C
helpers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added utils code for inline copy imports, as we use that for quite a
few things now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Further restructured the Scons files to use more common code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The module name objects now reject many &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; specific
APIs that ought to not be used, and the code got changed to use these
instead, leading to cleaner and more correct usages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using named tuples to specify included data files and entry points.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil&lt;/span&gt;&lt;/code&gt; in plugins to scan for modules rather than listing
directories.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;New option to display executed commands during comparisons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test suite for onefile testing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release has seen Python3.9 and Onefile both being completed. The
later needs compression added on Windows, but that can be added in a
coming release, for now it’s fully functional.&lt;/p&gt;
&lt;p&gt;The focus clearly has been on massive cleanups, some of which will
affect compile time performance. There is relatively little new
optimization otherwise.&lt;/p&gt;
&lt;p&gt;The adoption of clcache enables a very fast caching, as it’s now loaded
directly into the Scons process, avoiding a separate process fork.&lt;/p&gt;
&lt;p&gt;Generally a lot of polishing has been applied with many cleanups
lowering the technical debt. It will be interesting to see where the
hard module imports can lead us in terms of more optimization. Static
optimization of the Python version comparisons and checks is needed to
lower the amount of imports to be processed.&lt;/p&gt;
&lt;p&gt;Important fixes are also included, e.g. the constants loading
performance was too slow in some cases. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; on
Windows and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; plugins were regressed and finally everything
ought to be back to working fine.&lt;/p&gt;
&lt;p&gt;Future work will have to aim at enhanced scalability. In some cases,
Nuitka still takes too much time to compile if projects like Pandas
include virtually everything installed as an option for it to use.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0611.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2021-01-25T10:17:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0610.html</id>
    <title>Nuitka Release 0.6.10</title>
    <updated>2020-12-22T15:38:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-10"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release comes with many new features, e.g. onefile support, as well
as many new optimization and bug fixes.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, was memory leaking arguments of all complex call helper
functions. Fixed in 0.6.9.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Fix, the dill-compat code needs to follow API change. Fixed
in 0.6.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fixup for multiprocessing module and complex call helpers
that could crash the program. Fixed in 0.6.9.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the frame caching could leak memory when using caching for
functions and generators used in multiple threads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, importing an extension module below a compiled module
was not possible in accelerated mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, keyword arguments for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;open&lt;/span&gt;&lt;/code&gt; built-in were not fully
compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the scons python check should also not accept directories,
otherwise strange misleading error will occur later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: When Python is installed through a symbolic link, MinGW64
and Scons were having issues, added a workaround to resolve it even
on Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;co_freevars&lt;/span&gt;&lt;/code&gt; in code objects,
e.g. newer matplotlib needs this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add needed data files for gooey. Fixed in 0.6.9.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, was not respecting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--quiet&lt;/span&gt;&lt;/code&gt; option when running Scons.
Fixed in 0.6.9.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, wasn’t automatically detecting Scons from promised paths.
Fixed in 0.6.9.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, the clcache output parsing wasn’t robust enough. Fixed in
0.6.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8: Ignore all non-strings provided in doc-string fashion,
they are not to be considered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getattr&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setattr&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hasattr&lt;/span&gt;&lt;/code&gt; could not be used in
finally clauses anymore. Fixed in 0.6.9.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: For Python3 enhanced compatibility for Windows no console
mode, they need a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.stdin&lt;/span&gt;&lt;/code&gt; or else e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;input&lt;/span&gt;&lt;/code&gt; will not be
compatible and raise &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RuntimeError&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Python 3.9, in such a way that the
CPython3.8 test suite passes now, the 3.9 suite needs investigation
still, so we might be missing new features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Onefile mode with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--onefile&lt;/span&gt;&lt;/code&gt; that
uses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AppImage&lt;/span&gt;&lt;/code&gt; on Linux and our own bootstrap binary on Windows.
Other platforms are not supported at this time. With this, the
standalone folder is packed into a single binary. The Windows variant
currently doesn’t yet do any compression yet, but the Linux one does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added downloading of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache.exe&lt;/span&gt;&lt;/code&gt;, esp. as the other
sources so far recommended were not working properly after updates.
This is taken from the official project and should be good.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added downloading of matching MinGW64 C compiler, if no
other was found, or that was has the wrong architecture, e.g. 32 bits
where we need 64 bits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added ability to copy icon resources from an existing binary
with new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-icon-from-exe&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added ability to provide multiple icon files for use with
different desktop resolutions with new option
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-icon-from-ico&lt;/span&gt;&lt;/code&gt; that got renamed to disambiguate from
other icon options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for requesting UAC admin right with new option
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-uac-admin&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for requesting “uiaccess” rights with yet
another new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-uac-uiaccess&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added ability to specify version info to the binary. New
options &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-company-name&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-product-name&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-file-version&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-product-version&lt;/span&gt;&lt;/code&gt;, and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-file-description&lt;/span&gt;&lt;/code&gt; have been added. Some of these have
defaults.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced support for using the Win32 compiler of MinGW64, but it’s
not perfect yet and not recommended.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for LTO mode for MSVC as well, this seems to
allow more optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The numpy plugin now handles matplotlib3 config files
correctly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Use less C variables in dictionary created, not one per key/value
pair. This improved scalability of C compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use common code for module variable access, leading to more compact
code and enhanced scalability of C compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use error exit during dictionary creation to release the dictionary,
list, tuple, and set in case of an error occurring while they are
still under construction. That avoids releases of it in error exists,
reducing the generated code size by a lot. This improves scalability
of C compilation for generating these.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Annotate no exception raise for local variables of classes with know
dict shape, to avoid useless error exits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Annotate no exception exit for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;classmethod&lt;/span&gt;&lt;/code&gt;
as they do not check their arguments at all. This makes code
generated for classes with these methods much more compact, mainly
improving their scalability in C compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In code generation, prefer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; over &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka_bool&lt;/span&gt;&lt;/code&gt; which allows
to annotate exception result, leading to more compact code. Also
cleanup so that code generation always go through the C type objects,
rather than doing cases locally, adding a C type for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use common code for C code handling const &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; return only, to
cases where there is any immutable constant value returned, avoid
code generation for this common case. Currently mutable constants are
not handled, this may be added in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Annotate no exception for exception type checks in handlers for
Python2 and no exception if the value has exception type shape for
Python3. The exception type shape was newly added. This avoids
useless exception handlers in most cases, where the provided
exception is just a built-in exception name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improve speed of often used compile time methods on nodes
representing constant values, by making their implementation type
specific to improve frontend compile time speed, we check e.g.
mutable and hashable a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide truth value for variable references, enhancing loop
optimization and merge value tracing, to also decide this correctly
for values only read, and then changed through attribute, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;append&lt;/span&gt;&lt;/code&gt; on lists. This allows many more static optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; for methods in Nuitka nodes to achieve faster
frontend compile times where possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use dedicated helper code for calls with single argument, avoiding
the need have a call site local C array of size one, just to pass a
pointer to it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added handling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hash&lt;/span&gt;&lt;/code&gt; slot, to predict hashable keys for
dictionary and sets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Share more slot provision for built-in type shapes from mixin
classes, to get them more universally provided, even for special
types, where their consideration is unusual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trace “user provided” flag only for constants where it really
matters, i.e. for containers and generally potentially large values,
but not for every number or boolean value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added lowering of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytearray&lt;/span&gt;&lt;/code&gt; constant values to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; value
iteration, while handling constant values for this optimization with
dedicated code for improved frontend compilation speed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The dict built-in now annotates the dictionary type shape of its
result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The wrapping side-effects node now passes on the type shape of the
wrapped value, allowing for optimization of these too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;slice&lt;/span&gt;&lt;/code&gt; nodes into variants with 1, 2 or 3 arguments, to
avoid the overhead of determining which case we have, as well as to
save a bit of memory, since these are more frequently used on Python3
for subscript operations. Also annotate their type shape, allowing
more optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster dictionary lookups, esp. in cases where errors occur, because
we were manually recreating a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;KeyError&lt;/span&gt;&lt;/code&gt; that is already provided
by the dict implementation. This should also be faster, as it avoids
a CPython API call overhead on the DLL and they can provide a
reference or not for the returned value, simplifying using code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster dictionary containment checks, with our own dedicated helper,
we can use code that won’t create an exception when an item is not
present at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster hash lookups with our own helper, separating cases where we
want an exception for non-hashable values or not. These should also
be faster to call.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid acquiring thread state in exception handling that checks if a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; occurred, to improved speed on Python3, where is
involves locking, but this needs to be applied way more often.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure checks to debug mode and full compatibility mode are done
with the variables introduced, to avoid losing performance due to
calls for Nuitka compile time enhancements. This was so far only done
partially.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split constant references into two base classes, only one of them
tracking if the value was provided by the user. This saves compile
time memory and avoids the overhead to check if sizes are exceeded in
cases they cannot possibly be so.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The truth value of container creations is now statically known,
because the empty container creation is no longer a possibility for
these nodes, allowing more optimization for them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize the bool built-in with no arguments directory, allow to
simplify the node for single argument form to avoid checks if an
argument was given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added iteration handles for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; values, and make them faster
to create by being tied to the node type, avoiding shared types,
instead using the mixin approach. This is in preparation to using
them for standard iterator tracing as well. So far they are only used
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;any&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;all&lt;/span&gt;&lt;/code&gt; decision.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added detection if a iterator next can raise, using existing iterator
checking which allows to remove needless checks and exception traces.
Adding a code variant for calls to next that cannot fail, while
tuning the code used for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;next&lt;/span&gt;&lt;/code&gt; and unpacking next, to use faster
exception checking in the C code. This will speed up unpacking
performance for some forms of unpacking from known sizes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to use the fastest tuple API possible in all of Nuitka,
many place e.g. used &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyTuple_Size&lt;/span&gt;&lt;/code&gt;, and one was in a performance
critical part, e.g. in code that used when compiled functions as
called as a method.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimized variant for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_PyList_Extend&lt;/span&gt;&lt;/code&gt; for slightly faster
unpacking code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimized variant for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyList_Append&lt;/span&gt;&lt;/code&gt; for faster list
contractions code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RemoveFileSpec&lt;/span&gt;&lt;/code&gt; and instead provide our own code for
that task, slightly reducing file size and avoiding to use the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Shlapi&lt;/span&gt;&lt;/code&gt; link library.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Made reflected test use common cleanup of test folder, which is more
robust against Windows locking issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only output changed CPython output after the forced update of cached
value was done, avoiding duplicate or outdated outputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid complaining about exceptions for in-place operations in case
they are lowered to non-inplace operations and then raise
unsupported, not worth the effort to retain original operator.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added generated test for subscript operations, also expanding
coverage in generated tests by making sure, conditional paths are
both taken by varying the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cond&lt;/span&gt;&lt;/code&gt; value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use our own code helper to check if an object has an attribute, which
is faster, because it avoids creating exceptions in the first place,
instead of removing them afterwards.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Make sure that code generation always go through the C type objects
rather than local &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;elif&lt;/span&gt;&lt;/code&gt; casing of the type. This required cleaning
up many of the methods and making code more abstract.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added base class for C types without reference counting, so they can
share the code that ignores their handling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getConstant&lt;/span&gt;&lt;/code&gt; for constant value nodes, use the more general
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getCompileTimeConstant&lt;/span&gt;&lt;/code&gt; instead, and provide quick methods that
test for empty tuple or dict, to use for checking concrete values,
e.g. with call operations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified container creation into always using a factory function, to
be sure that existing container creations are not empty.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stop using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;calledWithBuiltinArgumentNamesDecorator&lt;/span&gt;&lt;/code&gt; where
possible, and instead make explicit wrapping or use correct names.
This was used to allow e.g. an argument named &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; to be passed
from built-in optimization, but that can be done in a cleaner
fashion. Also aligned no attributes and the argument names, there was
inconsistency there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name mangling was done differently for attribute names and normal
names and with non-shared code, and later than necessary, removing
this as a step from variable closure taking after initial tree build.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As part of the icon changes, now handled in Python code, we stop
using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rc&lt;/span&gt;&lt;/code&gt; binary and handle all resources ourselves, allowing
to remove that code from the Scons side of things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved file comparison code of standalone mode into file utils
function for use in plugins as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified how path concatenation is done in Nuitka helper code, there
were more or less complete variants, this is making sure, the most
capable form is used in all cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Massive cleanup to our scons file, by moving out util code that only
scons uses, hacks we apply to speed up scons, and more to separate
modules with dedicated interfaces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;enumerate&lt;/span&gt;&lt;/code&gt; we now provide start value of 1 where it is
appropriate, e.g. when counting source code lines, rather than adding
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;count+1&lt;/span&gt;&lt;/code&gt; on every usage, making code more readable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Do not recommend Anaconda on Windows anymore, it seems barely
possible to get anything installed on it with a fresh download, due
to the resolver literally working for days without finishing, and
then reporting conflicts, it would only we usable when starting with
Miniconda, but that seems less interesting to users, also gcc 5.2 is
way too old these days.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The commit hook should be reinstalled, since it got improved and
adapted for newer git versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added link to donations to funding document, following a GitHub
standard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bumped requirements for development to the latest versions, esp.
newer isort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a rough description of tests to do to add a new CPython test
suite, to allow others to take this task in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated the git hook so that Windows and newest git works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make it more clear in the documentation that Microsoft Appstore
Python is not supported.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This is the big release in terms of scalability. The optimization in
this release mostly focused on getting things that cause increased
compile times sorted out. A very important fix avoids loop optimization
to leak into global passes of all modules unnecessarily, but just as
important, generated code now is much better for the C compiler to
consume in observed problematic cases.&lt;/p&gt;
&lt;p&gt;More optimization changes are geared towards reducing Nuitka frontend
compile time, which could also be a lot in some cases, ending up
specializing more constant nodes and how they expose themselves to
optimization.&lt;/p&gt;
&lt;p&gt;Other optimization came from supporting Python 3.9 and things come
across during the implementation of that feature, e.g. to be able to
make differences with unpacking error messages, we provide more code to
handle it ourselves, and to manually optimize how to interact with e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; objects.&lt;/p&gt;
&lt;p&gt;For Windows, the automatic download of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; and a matching MinGW64
if none was found, is a new step, that should lower the barrier of entry
for people who have no clue what a C compiler is. More changes are bound
to come in this field with future releases, e.g. making a minimum
version requirement for gcc on Windows that excludes unfit C compilers.&lt;/p&gt;
&lt;p&gt;All in all, this release should be taken as a major cleanup, resolving
many technical debts of Nuitka and preparing more optimization to come.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0610.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2020-12-22T15:38:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-069.html</id>
    <title>Nuitka Release 0.6.9</title>
    <updated>2020-10-15T10:34:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-9"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This releases contains important bug fixes for regressions of the 0.6.8
series which had relatively many problems. Not all of these could be
addressed as hotfixes, and other issues were even very involved, causing
many changes to be necessary.&lt;/p&gt;
&lt;p&gt;There are also many general improvements and performance work for
tracing and loops, but the full potential of this will not be unlocked
with this release yet.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, loop optimization sometimes didn’t determinate, effectively
making Nuitka run forever, with no indication why. This has been
fixed and a mechanism to give up after too many attempts has been
added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, closure taking object allowed a brief period where the garbage
collector was exposed to uninitialized objects. Fixed in 0.6.8.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Fix corruption for exceptions thrown into asyncgen. Fixed
in 0.6.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, deleting variables detected as C type bool could raise an
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UnboundLocalError&lt;/span&gt;&lt;/code&gt; that was wrong. Fixed in 0.6.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8.3+: Fix, future annotations parsing was using hard coded
values that were changed in CPython, leading to errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid encoding issues for Python3 on more systems, by going
from wide characters to unicode strings more directly, avoiding an
encoding as UTF-8 in the middle. Fixed in 0.6.8.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Do not crash when warning about uninstalled MSVC using
Python3. This is a Scons bug that we fixed. Fixed in 0.6.8.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The output of dependency walker should be considered as
“latin1” rather than UTF-8. Fixed in 0.6.8.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing hidden dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;flask&lt;/span&gt;&lt;/code&gt;. Fixed in
0.6.8.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fixed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com.client&lt;/span&gt;&lt;/code&gt; on Windows. Fixed in 0.6.8.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil&lt;/span&gt;&lt;/code&gt; to scan encoding modules, properly
ignoring the same files as Python does in case of garbage files being
there. Fixed in 0.6.8.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Enabling a plugin after the filename to compile was given,
didn’t allow for arguments to the passed, causing problems. Fixed in
0.6.8.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;certifi&lt;/span&gt;&lt;/code&gt; data file is now supported for all
modules using it and not only some.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The bytecode for the standard library had filenames
pointing to the original installation attached. While these were not
used, but replaced at run time, they increased the size of the
binary, and leaked information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The path of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.executable&lt;/span&gt;&lt;/code&gt; was not None, but pointing
to the original executable, which could also point to some temporary
virtualenv directory and therefore not exist, also it was leaking
information about the original install.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: With the MSVC compiler, elimination of duplicate strings was
not active, causing even unused strings to be present in the binary,
some of which contained file paths of the Nuitka installation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for pyglet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The command line handling for Pmw plugin was using wrong
defaults, making it include more code than necessary, and to crash if
it was not there.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for using Python 2.7 through a symlink too.
This was already working for Python3, but a scons problem prevented
this from working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Caching of compiled C files is now checked with ccache and clcache,
and added automatically where possible, plus a report of the success
is made. This can accelerate the re-compile very much, even if you
have to go through Nuitka compilation itself, which is not (yet)
cached.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--quiet&lt;/span&gt;&lt;/code&gt; option that will disable informational traces
that are going to become more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Clang from MSVC installation is now picked up for both 32 and 64
bits and follows the new location in latest Visual Studio 2019.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; from Anaconda is now supported as well as the
one from msys64.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The value tracing has become more correct with loops and in general
less often inhibits optimization. Escaping of value traces is now a
separate trace state allowing for more appropriate handling of actual
unknowns.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory used for value tracing has been lowered by removing
unnecessary states for traces, that we don’t use anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Prevent scons from scanning for MSVC when asked to use
MinGW64. This avoids a performance loss doing something that will
then end up being unused.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Use function level linking with MSVC, this will allow for
smaller binaries to be created, that don’t have to include unused
helper functions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The scons file now uses Nuitka utils functions and is itself split up
into several modules for enhanced readability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugin interfaces for providing extra entry points have been cleaned
up and now named tuples are used. Backward compatibility is
maintained though.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The use of the logging module was replaced with more of our custom
tracing and we now have the ability to write the optimization log to
a separate file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Old style plugin options are now detected and reported as a usage
error rather than unknown plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed submodules to use git over https, so as to not require ssh
which requires a key registered and causes problems with firewalls
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More correct Debian copyright file, made formatting of emails in
source code consistent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Ubuntu focal.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The main focus of this release has been bug fixes with only a little
performance work due to the large amount of regressions and other
findings from the last release.&lt;/p&gt;
&lt;p&gt;The new constants loading for removes a major scalability problem. The
checked and now consistently possible use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt;
allows for much quicker recompilation. Nuitka itself can still be slow
in some cases, but should have seen some improvements too. Scalability
will have to remain a focus for the next releases too.&lt;/p&gt;
&lt;p&gt;The other focus, was to make the binaries contain no original path
location, which is interesting for standalone mode. Nuitka should be
very good in this area now.&lt;/p&gt;
&lt;p&gt;For optimization, the new loop code is again better. But it was also
very time consuming, to redo it, yet again. This has prevented other
optimization to be added.&lt;/p&gt;
&lt;p&gt;And then for correctness, the locals scope work, while very invasive,
was necessary, to handle the usage of locals inside of contractions, but
also will be instrumental for function inlining to become generally
available.&lt;/p&gt;
&lt;p&gt;So, ultimately, this release is a necessary intermediate step. Upcoming
releases will be able to focus more clearly on run time performance
again as well as on scalability for generated C code.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-069.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2020-10-15T10:34:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-068.html</id>
    <title>Nuitka Release 0.6.8</title>
    <updated>2020-05-18T09:11:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-8"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This releases contains important general improvements and performance
improvements and enhanced optimization as well as many bug fixes that
enhance the Python 3.8 compatibility.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.5+: Fix, coroutines and asyncgen could continue iteration of
awaited functions, even after their return, leading to wrong
behaviour.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5+: Fix, absolute imports of names might also refer to
modules and need to be handled for module loading as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;fromlist&lt;/span&gt;&lt;/code&gt; of imports could loose references, potentially
leading to corruption of contained strings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8: Fix, positional only arguments were not enforced to
actually be that way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8: Fix, complex calls with star arguments that yielded the
same value twice, were not yet caught.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8: Fix, evaluation order for nested dictionary contractions
was not followed yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Use short paths, these work much better to load extension
modules and TCL parts of TkInter cannot handle Unicode paths at all.
This makes Nuitka work in locations, where normal Python cannot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fixup dependency walker in unicode input directories.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Use frozen module loader only at &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt;
initialisation and switch to built-in bytecode loader that is more
compatible afterwards, increasing compatibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pydantic&lt;/span&gt;&lt;/code&gt; support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing hidden dependency of uvicorn.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the parser for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; files couldn’t handle multiline imports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Derive linker arch of Python from running binary, since it
can happen that the Python binary is actually a script.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixup static linking with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython.a&lt;/span&gt;&lt;/code&gt; that contains &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;main.o&lt;/span&gt;&lt;/code&gt; by
making our colliding symbols for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_GetArgcArgv&lt;/span&gt;&lt;/code&gt; weak.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7: Fix misdetection as asyncgen for a normal generator, if
the iterated value is async.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Fix &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;build_nuitka&lt;/span&gt;&lt;/code&gt; for modules under nested namespaces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OpenBSD: Follow usage of clang and other corrections to make
accelerated mode work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Fixup for standalone mode library scan.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the logging of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-modules&lt;/span&gt;&lt;/code&gt; was broken.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Enable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;/bigobj&lt;/span&gt;&lt;/code&gt; mode for MSVC for large compilations to
work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fixup crash in warning with pefile dependency manager.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fixup &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com&lt;/span&gt;&lt;/code&gt; standalone detection of other Python
version &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com&lt;/span&gt;&lt;/code&gt; is in system &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the python flag for static hashes didn’t have the intended
effect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, generators may be resurrected in the cause of their destruction,
and then must not be released.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, method objects didn’t implement the methods &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__reduce__&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__reduce_ex__&lt;/span&gt;&lt;/code&gt; necessary for pickling them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, using a Python installation through a symlink was not
working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, icon paths that were relative were not working anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8: Detect duplicate keywords yielded from star arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, methods could not be pickled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, generators, coroutines and asyncgen might be resurrected during
their release, allow for that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, frames need to traverse their attached locals to be released in
some cases.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Plugin command line handling now allows for proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;optparse&lt;/span&gt;&lt;/code&gt;
options to be used, doing away with special parameter code for
plugins. The arguments now also become automatically passed to the
instantiations of plugins.&lt;/p&gt;
&lt;p&gt;Loading and creation of plugins are now two separate phases. They are
loaded when they appear on the command line and can add options in
their own group, even required ones, but also with default values.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Started using logging with name-spaces. Applying logging per plugin
to make it easier to recognize which plugin said what. Warnings are
now colored in red.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5+: Added support for two step module loading, making Nuitka
loading even more compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced import tracing to work on standalone binaries in a useful
manner, allow to compare with normal binaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setattr&lt;/span&gt;&lt;/code&gt; built-in was leaking a reference to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;
value.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Proper loop SSA capable of detecting shapes with an incremental
initial phase and a final result of alternatives for variables
written in the loop. This detects shapes of manual integer
incrementing loops correctly now, it doesn’t see through iterators
yet, but this will come too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added type shapes for all operations and all important built-in types
to allow more compile time optimization and better target type
selection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Target type code generation was expanded from manual usage with
conditions to all operations allowing to get at bool target values
more directly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For in-place operations, there is the infrastructure to generate them
for improved performance, but so far it’s only used for Python2 int,
and not for the many types normal operations are supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Force usage of C boolean type for all indicator variables from the
re-formulation. In some cases, we are not yet there with detections,
and this gives instant benefit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complex constants didn’t annotate their type shape, preventing
compile time optimization for them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8: Also support vectorcall for compiled method objects. These
are rarely used in new Python, but can make a difference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove loops that have only a final break. This happens in static
optimization in some cases, and allows more optimization to be done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using a preparing a constant tuple value for calls with only
constant arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyErr_Format&lt;/span&gt;&lt;/code&gt; where it’s not necessary by adding
specialized helpers for common cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; statements that will raise an exception and replace
with that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception matching is boolean shape, allowing for faster code
generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable recursion checks outside of full compat mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid large blocks for conditional statements that only need to
enclose the condition evaluation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added shortcuts for interactions between compiled generator variants,
to avoid calls to their C methods with argument passing, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Updated Developer Manual with changes that happened, removing the
obsolete language choice section.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added 3.8 support mentions in even more places.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The mailing list has been deleted. We now prefer Gitter chat and
GitHub issues for discussions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code recommended extensions are now defined as such in the
project configuration and you will be prompted to install them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Code environments for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py38&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py27&lt;/span&gt;&lt;/code&gt; were added for
easier switch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Catch usage of Python from the Microsoft App Store, it is not
supported and seems to limit access to the Python installation for
security reasons that make support impossible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make it clear that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--full-compat&lt;/span&gt;&lt;/code&gt; should not be used in help
output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added instructions for MSVC runtimes and standalone compilation to
support Windows 7.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More complete listing of copyright holders for Debian.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated to newer black and PyLint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced gcc version check, properly works with gcc 10 and higher.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Pylint cleanups for some of the tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test for loading of user plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed useless outputs for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;search&lt;/span&gt;&lt;/code&gt; mode skipping non-matches.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Limit command line handling for multiprocessing module to when the
plugin is actually used, avoiding useless code of Windows binaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pylint cleanup also foreign code like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;oset&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;odict&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In preparation of deprecating the alternative, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--enable-plugin&lt;/span&gt;&lt;/code&gt;
has become the only form used in documentation and tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid numeric pylint symbols more often.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Cleanup module name for distutils commands, these are not
actually enforced by distutils, but very ugly in our coding
conventions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “cannot get here” code to mark unreachable code has been improved
and no longer needs an identifier passed, but uses the standard C
mechanism for that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed accessors for lookup sources from nodes, allowing for faster
usage and making sure, lookups are only done where needed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is huge in terms of bugs fixed, but also extremely
important, because the new loop SSA and type tracing, allows for many
more specialized code usages. We now can trace the type for some loops
to be specifically an integer or long value only, and will become able
to generate code that avoids using Python objects, in these cases.&lt;/p&gt;
&lt;p&gt;Once that happens, the performance will make a big jump. Future releases
will have to consolidate the current state, but it is expected that at
least an experimental addition of C type &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;C&lt;/span&gt; &lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; can be
added, add to that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iterator&lt;/span&gt;&lt;/code&gt; type shape and value analsis, and an
actual jump in performance can be expected.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-068.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2020-05-18T09:11:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-067.html</id>
    <title>Nuitka Release 0.6.7</title>
    <updated>2020-01-25T08:42:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-7"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains bug fixes and improvements to the packaging, for
the RPM side as well as for Debian, to cover Python3 only systems as
they are now becoming more common.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The value of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__module__&lt;/span&gt;&lt;/code&gt; for extension modules was
not dependent into which package the module was loaded, it now is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anaconda: Enhanced detection of Anaconda for Python 3.6 and higher.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CentOS6: Detect gcc version to allow saving on macro memory usage,
very old gcc didn’t have that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include Python3 for all Fedora versions where it works as well as for
openSUSE versions 15 and higher.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Using short path names to interact with Scons avoids
problems with Unicode paths in all cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: The usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;install_name_tool&lt;/span&gt;&lt;/code&gt; could sometimes fail due to
length limits, we now increase it at link time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Do not link against &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; for module mode. This
prevented extension modules from actually being usable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Follow coroutine fixes in our asyncgen implementation as
well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, our version number handling could overflow with minor versions
past 10, so we limited it for now.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for Python 3.8, the experimental was already there and
pretty good, but now added the last obscure features too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins can now provide C code to be included in the compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Added targets &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;build_nuitka&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;install_nuitka&lt;/span&gt;&lt;/code&gt; to
complement &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt;, so we support software other than
wheels, e.g. RPM packaging that compiles with Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lldb&lt;/span&gt;&lt;/code&gt; the Clang debugger with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debugger&lt;/span&gt;&lt;/code&gt;
mode.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Make the file prefix map actually work for gcc and clang, and compile
files inside the build folder, unless we are running in debugger
mode, so we use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; caching across different compilations for
at least the static parts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid compilation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__frozen.c&lt;/span&gt;&lt;/code&gt; in accelerated mode, it’s not
used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prefer using the inline copy of scons over systems scons. The later
will only be slower. Use the fallback to external scons only from the
Debian packages, since there we consider it forbidden to include
software as a duplicate.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added recommended plugins for Visual Code, replacing the list in the
Developer Manual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Fedora 30 for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for CentOS 8 for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated inline copy of Scons used for Python3 to 3.1.2, which is said
to be faster for large compilations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed Eclipse setup from the manual, it’s only infererior at this
point and we do not use it ourselves.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Stop recommending PyQt5 in the package, we no longer use it
for built-in GUI that was removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Bumped the standards version and modernized the packaging,
solving a few warnings during the build.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Scons: Avoid to add Unix only include paths on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Have the static source code in a dedicated folder for clarity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added tests to GitHub Actions, for the supported Python versions for
all of Linux, macOS and Windows, covering the later publicly for the
first time. We use Anaconda on macOS for the tests now, rather than
Homebrew.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable IO encoding to make sure we use UTF-8 for more test suites
that actually need it in case of problems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comparing module outputs now handles segfaults by running in the
debugger too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release adds full support for Python 3.8 finally, which took us a
while, and it cleans up a lot on the packaging side. There aren’t that
many important bug fixes, but it’s still nice to this cleaned up.&lt;/p&gt;
&lt;p&gt;We have important actual optimization in the pipeline that will apply
specialization to target types and for comparison operations. We expect
to see actual performance improvements in the next release again.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-067.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2020-01-25T08:42:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-066.html</id>
    <title>Nuitka Release 0.6.6</title>
    <updated>2020-01-06T08:34:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-6"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains huge amounts of crucial bug fixes all across the
board. There is also new optimization and many organizational
improvements.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, the top level module must not be bytecode. Otherwise we end up
violating the requirement for an entry point on the C level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, avoid optimizing calls with default values used. This is not yet
working and needed to be disabled for now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, missing keyword only arguments were not enforced to be
provided keyword only, and were not giving the compatible error
message when missing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Find &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com&lt;/span&gt;&lt;/code&gt; DLLs too, even if they live in subfolders
of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site-packages&lt;/span&gt;&lt;/code&gt;, and otherwise not found. They are used by other
DLLs that are found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fixup for problem with standard library module in most
recent Anaconda versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Fix, was using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CXXFLAGS&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CPPFLAGS&lt;/span&gt;&lt;/code&gt; even for the C
compiler, which is wrong, and could lead to compilation errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--clang&lt;/span&gt;&lt;/code&gt; limited to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-cl.exe&lt;/span&gt;&lt;/code&gt; as using it
inside a MinGW64 is not currently supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib2to2.pgen&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added paths used by openSUSE to the Tcl/Tk plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt; package was &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;, but should be
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/code&gt; which allows relative imports from itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, compile time optimization of floor division was using
normal division.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, some run time operations with known type shapes, were
falsely reporting error message with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt;, which
is of course not compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, was caching parent package, but these could be replaced e.g. due
to bytecode demotion later, causing crashes during their
optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the value of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; could be corrupted when being
deleted, which some modules wrappers do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the value of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__package__&lt;/span&gt;&lt;/code&gt; could be corrupted when being
deleted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Make sure we can always output the compiler output, even if it
has a broken encoding. This should resolve MSVC issues on non-English
systems, e.g. German or Chinese.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Support for newest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sklearn&lt;/span&gt;&lt;/code&gt; was added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Added resolver for run time variables in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;otool&lt;/span&gt;&lt;/code&gt; output,
that gets PyQt5 to work on it again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, floor division of run time calculations with float values should
not result in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, but &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; values instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Enhanced support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;boto3&lt;/span&gt;&lt;/code&gt; data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;osgeo&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gdal&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, there were issues with spurious errors attaching the
constants blob to the binary due to incorrect C types provided.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Fix, need to allow &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;/&lt;/span&gt;&lt;/code&gt; as separator for package names
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Fix reference losses in asyncgen when throwing exceptions
into them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dill&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;scikit-image&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;skimage&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;weasyprint&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pendulum&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytz&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytzdata&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flags=no_docstrings&lt;/span&gt;&lt;/code&gt; no longer implies disabling the
assertions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Python 3.8, there is only very few
things missing for full support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Added support for packages that are in a namespace and not
just top level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Added support for single modules, not only packages, by
supporting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;py_modules&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Added support for distinct namespaces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Compare Python and C compiler architecture for MSVC too, and
catch the most common user error of mixing 32 and 64 bits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Output variables used from the outside, so the debugging is
easier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Detect if clang installed inside MSVC automatically and use
it if requested via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--clang&lt;/span&gt;&lt;/code&gt; option. This is only the 32 bits
variant, but currently the easy way to use it on Windows with Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Loop variables were analysed, but results were only available on the
inside of the loop, preventing many optimization in these cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;abs&lt;/span&gt;&lt;/code&gt; built-in, which is also a
numerical operator.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;all&lt;/span&gt;&lt;/code&gt; built-in, adding a new concept of
iteration handle, for efficient checking that avoids looking at very
large sequences, of which properties can still be known.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# no need to look at all of them&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for optimizing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ImportError&lt;/span&gt;&lt;/code&gt; construction with
keyword-only arguments. Previously only used without these were
optimized.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ImportError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;lala&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;lele&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# now optimized&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added manual specialization for single argument calls, solving a
TODO, as these will be very frequent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory: Use single child form of node class where possible, the
general class now raises an error if used with used with only one
child name, this will use less memory at compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory: Avoid list for non-local declarations in every function,
these are very rare, only have it if absolutely necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate more compact code for potential &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NameError&lt;/span&gt;&lt;/code&gt; exceptions
being raised. These are very frequent, so this improves scalability
with large files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Annotate comparison of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;
types as not raising an exception.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shared empty body functions and generators.&lt;/p&gt;
&lt;p&gt;One shared implementation for all empty functions removes that burden
from the C compiler, and from the CPU instruction cache. All the
shared C code does is to release its arguments, or to return an empty
generator function in case of generator.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory: Added support for automatic releases of parameter variables
from the node tree. These are normally released in a try finally
block, however, this is now handled during code generation for much
more compact C code generated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added specialization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; operations &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;|&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;amp;&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;^&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added dedicated nodes for representing and optimizing based on shapes
for all binary operations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable gcc macro tracing unless in debug mode, to save memory during
the C compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restored Python2 fast path for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; with unknown object types,
restoring performance for these.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Use dedicated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ModuleName&lt;/span&gt;&lt;/code&gt; type that makes the tests that check if
a given module name is inside a namespace as methods. This was hard
to get right and as a result, adopting this fixed a few bugs and or
inconsistent results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expand the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.PostProcessing&lt;/span&gt;&lt;/code&gt; to cover all actions
needed to get a runnable binary. This includes using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;install_name_tool&lt;/span&gt;&lt;/code&gt; on macOS standalone, as well copying the Python
DLL for acceleration mode, cleaning the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x&lt;/span&gt;&lt;/code&gt; bit for module mode.
Previously only a part of these lived there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid including the definitions of dynamically created helper
functions in the C code, instead just statically declare the ones
expected to be there. This resolves Visual Code complaining about it,
and should make life also easier for the compiler and caches like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create more helper code in closer form to what &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format&lt;/span&gt;&lt;/code&gt; does,
so they are easier to compare to the static forms. We often create
hard coded variants for few arguments of call functions, and generate
them for many argument variations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved setter/getter methods for Nuitka nodes consistently to the
start of the node class definitions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate C code much closer to what &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format&lt;/span&gt;&lt;/code&gt; would change it
to be.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified calling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;install_name_tool&lt;/span&gt;&lt;/code&gt; on macOS into one function that
takes care of all the things, including e.g. making the file
writable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debug output from scons should be more consistent and complete now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sort files for compilation in scons for better reproducible results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create code objects version independent, avoiding python version
checks by pre-processor, hiding new stuff behind macros, that ignore
things on older Python versions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added many more built-in tests for increased coverage of the newly
covered ones, some of them being generic tests that allow to test all
built-ins with typical uses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many tests have become more PyLint clean as a result of work with
Visual Code and it complaining about them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to check PyPI health of top 50 packages. This is a major
GSoC 2019 result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Output the standalone directory contents for Windows too in case of a
failure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added generated tests to fully cover operations on different type
shapes and their errors as well as results for typical values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for testing against installed version of Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanup up tests, merging those for only Python 3.2 with 3.3 as we no
longer support that version anyway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute the Python3 tests for macOS on Travis too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The donation sponsored machine called &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;donatix&lt;/span&gt;&lt;/code&gt; had to be replaced
due to hardware breakage. It was replaced with a Raspberry-Pi 4.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced plugin documentation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added description of the git workflow to the Developer Manual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added checker script &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;check-nuitka-with-codespell&lt;/span&gt;&lt;/code&gt; that reports
typos in the source code for easier use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;codespell&lt;/span&gt;&lt;/code&gt; with Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use newest PyLint and clang-format.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also check plugin documentation files for ReST errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Much enhanced support for Visual Code configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trigger module code is now written into the build directory in debug
mode, to aid debugging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added deep check function that descends into tuples to check their
elements too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release comes after a long time of 4 months without a release, and
has accumulated massive amounts of changes. The work on CPython 3.8 is
not yet complete, and the performance work has yet to show actual fruit,
but has also progressed on all fronts. Connecting the dots and pieces
seems not far away.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-066.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2020-01-06T08:34:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-065.html</id>
    <title>Nuitka Release 0.6.5</title>
    <updated>2019-07-30T21:52:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-5"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains many bug fixes all across the board. There is also
new optimization and many organizational improvements.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3.4+: Fixed issues with modules that exited with an exception,
that could lead to a crash, dealing with their &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4+: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__loader__&lt;/span&gt;&lt;/code&gt; method &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is_package&lt;/span&gt;&lt;/code&gt; had the wrong
signature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6+: Fix for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt; &lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; being broken with uncompiled
generators.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5+: Fix for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;coroutines&lt;/span&gt;&lt;/code&gt; that got their awaited object
closed behind their back, they were complaining with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RuntimeError&lt;/span&gt;&lt;/code&gt;
should they be closed themselves.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, constant values &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; in a bool target that could not be
optimized away, lead to failure during code generation.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for sha224, sha384, sha512 in crypto
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The icon wasn’t properly attached with MinGW64 anymore, this
was a regression.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: For compiler outputs, also attempt preferred locale to
interpret outputs, so we have a better chance to not crash over MSVC
error messages that are not UTF-8 compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Handle filename collisions for generated code too, Nuitka now
treats all filesystems for all OS as case insensitive for this
purpose.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for tolerant &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; in class exception
handlers.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="o"&gt;...&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;

        &lt;span class="c1"&gt;# At exception handler exit, &amp;quot;e&amp;quot; is deleted if still assigned&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We already were compatible for functions and modules here, but due to
the special nature of class variables really living in dictionaries,
this was delayed. But after some other changes, it was now possible
to solve this TODO.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for Python3 variant of Pmw.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the NumPy plugin now handles more installation types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the qt plugin now handles multiple library paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, need &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libm&lt;/span&gt;&lt;/code&gt; for some Anaconda variants too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, left over bytecode from plugins could crash the plugin loader.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil.iter_packages&lt;/span&gt;&lt;/code&gt; is now working for loaded packages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.8: Followed some of the changes and works with beta2 as a
Python 3.7, but none of the new features are implemented yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Torch, Tensorflow, Gevent, Sklearn, with a new
Nuitka plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for “hinted” compilation, where the used modules are
determined through a test run.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for including TCL on Linux too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;any&lt;/span&gt;&lt;/code&gt; built-in. This handles a wide range of
type shapes and constant values at compile time, while also having
optimized C code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate code for some &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CLONG&lt;/span&gt;&lt;/code&gt; operations in preparation of
eventual per expression C type selection, it then will allow to avoid
objects in many instances.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid creating link libraries for MinGW64 as these have
become unnecessary is the mean time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Packages: Do not export entry points for all included packages, only
for the main package name it is importable as.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for Visual Studio 2019 as a C compiler backend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved plugin documentation describing how to create plugins for
Nuitka even better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The is now a mode for running the tests called &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;all&lt;/span&gt;&lt;/code&gt; which will
execute all the tests and report their errors, and only fail at the
very end. This doesn’t avoid wasting CPU cycles to report that e.g.
all tests are broken, but it allows to know all errors before fixing
some.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Fedora 30 for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for openSUSE 15.1 for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ask people to compile hello world program in the GitHub issue
template, because many times, they have setup problems only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Studio Code is now the recommended IDE and has integrated
configuration to make it immediately useful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated internal copy of Scons to 3.1.0 as it incorporates many of
our patches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed wordings for optimization to use “lowering” as the only term
to describe an optimization that simplifies.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Plugins: Major refactoring of Nuitka plugin API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: To locate module kind, use core Nuitka code that handles
more cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The test suite runners are also now auto-formatted and checked with
PyLint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Scons file is now PyLint clean too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;build_definitions.h&lt;/span&gt;&lt;/code&gt; to be included everywhere, in that it’s
only used in the main program part. This makes C linter hate us much
less for using a non-existent file.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Run the tests using Travis on macOS for Python2 too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More standalone tests have been properly whitelisting to cover
openSSL usage from local system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disabled PySide2 test, it’s not useful to fail and ignore it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: Fixups for coverage testing mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: Temporarily disable some checks for constants code in
reflected tests as it only exposes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;marshal&lt;/span&gt;&lt;/code&gt; not being
deterministic.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is huge again. Main points are compatibility fixes, esp. on
the coroutine side. These have become apparently very compatible now and
we might eventually focus on making them better.&lt;/p&gt;
&lt;p&gt;Again, GSoC 2019 is also showing effects, and will definitely continue
to do soin the next release.&lt;/p&gt;
&lt;p&gt;Many use cases have been improved, and on an organizational level, the
adoption of Visual Studio Code seems an huge improvement to have a well
configured IDE out of the box too.&lt;/p&gt;
&lt;p&gt;In upcoming releases, more built-ins will be optimized, and hopefully
the specialization of operations will hit more and more code with more
of the infrastructure getting there.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-065.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2019-07-30T21:52:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/dateutil-wheel-with-nuitka.html</id>
    <title>Intro</title>
    <updated>2019-07-12T18:00:00+01:00</updated>
    <author>
      <name>Taofeng(Tommy) Li</name>
    </author>
    <content type="html">&lt;section id="intro"&gt;

&lt;p&gt;This post compares the pytest results of dateutil to its nuitka-built
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.whl&lt;/span&gt;&lt;/code&gt; counterpart.&lt;/p&gt;
&lt;p&gt;Dateutil standalone test have already been covered. Manual testing is
now done to compare the pytest results of a nuitka wheel built using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt; to the regular pytest of the dateutil
package. Testing is done to ensure that nuitka is building the wheel
correctly. If the pytests pass/fail in the same way, that means Nuitka
built the wheel properly. Else if the tests differ, then something is
wrong. Virtualenv is used to create a clean environment with no outside
pollution.&lt;/p&gt;
&lt;p&gt;The pytest results were very similar:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Regular&lt;/span&gt; &lt;span class="n"&gt;pytests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt; &lt;span class="mi"&gt;1977&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="n"&gt;xfailed&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;7.99&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt; &lt;span class="n"&gt;wheel&lt;/span&gt; &lt;span class="n"&gt;pytests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt; &lt;span class="mi"&gt;1976&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="n"&gt;xfailed&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;7.89&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="steps-to-reproduce"&gt;
&lt;h1&gt;Steps to Reproduce&lt;/h1&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Clone dateutil and nuitka into a new folder&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inside the dateutil folder, issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt; &lt;span class="pre"&gt;-r&lt;/span&gt;
&lt;span class="pre"&gt;requirements-dev.txt&lt;/span&gt;&lt;/code&gt; to install its requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt;, this runs the regular
pytest for dateutil.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change into the nuitka folder and issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change back into dateutil and issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt;
to build the dateutil wheel using nuitka. The newly built wheel
should be found in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dist&lt;/span&gt;&lt;/code&gt; folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use pip to uninstall the existing dateutil, then issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt;
&lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; followed by the newly built &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.whl&lt;/span&gt;&lt;/code&gt; filename.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt;, this runs the
nuitka-built wheel pytest for dateutil.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
&lt;section id="uncompile-python"&gt;
&lt;h1&gt;Uncompile Python&lt;/h1&gt;
&lt;p&gt;dateutil regular pytest:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;=============================&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="n"&gt;starts&lt;/span&gt; &lt;span class="o"&gt;=============================&lt;/span&gt;
&lt;span class="n"&gt;platform&lt;/span&gt; &lt;span class="n"&gt;win32&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="n"&gt;Python&lt;/span&gt; &lt;span class="mf"&gt;3.7.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pytest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.6.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.8.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pluggy&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.12.0&lt;/span&gt;
&lt;span class="n"&gt;rootdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Users&lt;/span&gt;\&lt;span class="n"&gt;Tommy&lt;/span&gt;\&lt;span class="n"&gt;pipenv&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;\&lt;span class="n"&gt;dateutil&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;\&lt;span class="n"&gt;dateutil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;inifile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;
&lt;span class="n"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hypothesis&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.24.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cov&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.7.1&lt;/span&gt;
&lt;span class="n"&gt;collected&lt;/span&gt; &lt;span class="mi"&gt;2074&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;

&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_easter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;...........................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;................................................&lt;/span&gt;                         &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_import_star&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                                      &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_imports&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.......................&lt;/span&gt;                    &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_internals&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....&lt;/span&gt;                                     &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_isoparser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;........................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.......&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;............................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.....................&lt;/span&gt;&lt;span class="n"&gt;xx&lt;/span&gt;                                                  &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;...........................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.................................&lt;/span&gt;&lt;span class="n"&gt;xxxxxxxxxxxxxsss&lt;/span&gt;&lt;span class="o"&gt;......&lt;/span&gt;                  &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_relativedelta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;49&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.............................................&lt;/span&gt;                            &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_rrule&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;............................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;61&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;71&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;................................................................&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.......&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;78&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;..............&lt;/span&gt;                                                           &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_tz&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;............................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........&lt;/span&gt;&lt;span class="n"&gt;sssssss&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;81&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;sssssssssssssssssssssssssssssssssssssssss&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;............................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;84&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;xxx&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;......................................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.......................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;..........&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................&lt;/span&gt;&lt;span class="n"&gt;ss&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;sssssssssssss&lt;/span&gt;&lt;span class="o"&gt;....&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;..........&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;98&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.............&lt;/span&gt;                                                            &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_utils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.......&lt;/span&gt;                                      &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="nb"&gt;property&lt;/span&gt;\&lt;span class="n"&gt;test_isoparse_prop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                           &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="nb"&gt;property&lt;/span&gt;\&lt;span class="n"&gt;test_parser_prop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt;                            &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;docs&lt;/span&gt;\&lt;span class="n"&gt;exercises&lt;/span&gt;\&lt;span class="n"&gt;solutions&lt;/span&gt;\&lt;span class="n"&gt;mlk_day_rrule_solution&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                     &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;=============&lt;/span&gt; &lt;span class="mi"&gt;1977&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="n"&gt;xfailed&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;7.99&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="compiled-with-nuitka"&gt;
&lt;h1&gt;Compiled with Nuitka&lt;/h1&gt;
&lt;p&gt;nuitka wheel pytest:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;=============================&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="n"&gt;starts&lt;/span&gt; &lt;span class="o"&gt;=============================&lt;/span&gt;
&lt;span class="n"&gt;platform&lt;/span&gt; &lt;span class="n"&gt;win32&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="n"&gt;Python&lt;/span&gt; &lt;span class="mf"&gt;3.7.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pytest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.6.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.8.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pluggy&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.12.0&lt;/span&gt;
&lt;span class="n"&gt;rootdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Users&lt;/span&gt;\&lt;span class="n"&gt;Tommy&lt;/span&gt;\&lt;span class="n"&gt;pipenv&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;\&lt;span class="n"&gt;dateutil&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;\&lt;span class="n"&gt;dateutil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;inifile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;
&lt;span class="n"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hypothesis&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.24.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cov&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.7.1&lt;/span&gt;
&lt;span class="n"&gt;collected&lt;/span&gt; &lt;span class="mi"&gt;2073&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;

&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_easter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.......................................&lt;/span&gt;                                  &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_import_star&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                                               &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_imports&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.......................&lt;/span&gt;                             &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_internals&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....&lt;/span&gt;                                              &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_isoparser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;......................................................................&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.....................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;............&lt;/span&gt;&lt;span class="n"&gt;xx&lt;/span&gt;                                                           &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;39&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;46&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................&lt;/span&gt;&lt;span class="n"&gt;xxxxxxxxxxxxxsss&lt;/span&gt;&lt;span class="o"&gt;......&lt;/span&gt;                           &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_relativedelta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.............................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;....................................&lt;/span&gt;                                     &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_rrule&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.....................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;61&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.......................................................&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.....&lt;/span&gt;                                                                    &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_tz&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;............................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........&lt;/span&gt;&lt;span class="n"&gt;ssssssssssssssss&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;81&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;ssssssssssssssssssssssssssssssss&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;............................&lt;/span&gt;&lt;span class="n"&gt;xxx&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;...................................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;........&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;92&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................&lt;/span&gt;&lt;span class="n"&gt;sssssssssss&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;ssss&lt;/span&gt;&lt;span class="o"&gt;....&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;..........&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;....&lt;/span&gt;                                                                     &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_utils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.......&lt;/span&gt;                                               &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="nb"&gt;property&lt;/span&gt;\&lt;span class="n"&gt;test_isoparse_prop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                                    &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="nb"&gt;property&lt;/span&gt;\&lt;span class="n"&gt;test_parser_prop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt;                                     &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;=============&lt;/span&gt; &lt;span class="mi"&gt;1976&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="n"&gt;xfailed&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;7.89&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/dateutil-wheel-with-nuitka.html"/>
    <summary>This post compares the pytest results of dateutil to its nuitka-built
.whl counterpart.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="gsoc2019" label="gsoc2019"/>
    <published>2019-07-12T18:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/urllib3-wheel-with-nuitka.html</id>
    <title>Intro</title>
    <updated>2019-06-19T16:00:00+01:00</updated>
    <author>
      <name>Taofeng(Tommy) Li</name>
    </author>
    <content type="html">&lt;section id="intro"&gt;

&lt;p&gt;This post compares the pytest results of urllib3 to its nuitka-built
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.whl&lt;/span&gt;&lt;/code&gt; counterpart.&lt;/p&gt;
&lt;p&gt;Urllib3 standalone test have already been covered. Manual testing is now
done to compare the pytest results of a nuitka wheel built using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt; to the regular pytest of the urllib3
package. Testing is done to ensure that nuitka is building the wheel
correctly. If the pytests pass/fail in the same way, that means Nuitka
built the wheel properly. Else if the tests differ, then something is
wrong. Virtualenv is used to create a clean environment with no outside
pollution.&lt;/p&gt;
&lt;p&gt;At first, the urllib3 nuitka-wheel pytest was crashing because of the
unsafe assumption that imports will always exist (which is not the case
if exceptions are thrown). &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/issues/413"&gt;Issue 413&lt;/a&gt; was filed to record and
fix this bug.&lt;/p&gt;
&lt;p&gt;After the fixes, the pytests were ran again and the results were very
similar:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Regular&lt;/span&gt; &lt;span class="n"&gt;pytests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;======&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;836&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;456&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;113&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;47.54&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=======&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt; &lt;span class="n"&gt;wheel&lt;/span&gt; &lt;span class="n"&gt;pytests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;======&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;838&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;456&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;113&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;47.59&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=======&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The extra passes are suspicious and require more investigation into why
they happen. To make that easy, we are going to fully automate the
process and compare outputs with verbose pytest modes.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="steps-to-reproduce"&gt;
&lt;h1&gt;Steps to Reproduce&lt;/h1&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Clone urllib3 and nuitka into a new folder&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inside the urllib3 folder, issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt; &lt;span class="pre"&gt;-r&lt;/span&gt;
&lt;span class="pre"&gt;dev-requirements.txt&lt;/span&gt;&lt;/code&gt; to install its requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt;, this runs the regular
pytest for urllib3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change into the nuitka folder and issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change back into urllib3 and issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt;
to build the urllib3 wheel using nuitka. The newly built wheel should
be found in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dist&lt;/span&gt;&lt;/code&gt; folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use pip to uninstall the existing urllib3, then issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pip&lt;/span&gt;
&lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; followed by the newly built &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.whl&lt;/span&gt;&lt;/code&gt; filename.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt;, this runs the
nuitka-built wheel pytest for urllib3.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
&lt;section id="uncompile-python"&gt;
&lt;h1&gt;Uncompile Python&lt;/h1&gt;
&lt;p&gt;urllib3 regular pytest:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ python -m pytest --disable-warnings
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-4.0.0, py-1.8.0, pluggy-0.11.0
rootdir: C:\Users\Tommy\pipenv-testing\urllib3-testing\urllib3, inifile: setup.cfg
plugins: timeout-1.3.1
collected 1295 items

test\test_collections.py ....................................s           [  2%]
test\test_compatibility.py ...                                           [  3%]
test\test_connection.py .....                                            [  3%]
test\test_connectionpool.py ............................................ [  6%]
...........................                                              [  8%]
test\test_exceptions.py .............                                    [  9%]
test\test_fields.py ...............                                      [ 11%]
test\test_filepost.py ...........                                        [ 11%]
test\test_no_ssl.py ..                                                   [ 12%]
test\test_poolmanager.py .........................                       [ 14%]
test\test_proxymanager.py ...                                            [ 14%]
test\test_queue_monkeypatch.py .                                         [ 14%]
test\test_response.py ..................sss............................. [ 18%]
...........                                                              [ 19%]
test\test_retry.py ..............................F.F.F..                 [ 21%]
test\test_ssl.py ...............................                         [ 24%]
test\test_util.py ...................................................... [ 28%]
........................................................................ [ 34%]
....................ss.s...s............................................ [ 39%]
............                                                             [ 40%]
test\test_wait.py ...ssssss                                              [ 41%]
test\contrib\test_pyopenssl.py sssssssssssssssssssssssssssssssssssssssss [ 44%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 49%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 55%]
ssssssssssssssssssss                                                     [ 57%]
test\contrib\test_pyopenssl_dependencies.py ss                           [ 57%]
test\contrib\test_securetransport.py sssssssssssssssssssssssssssssssssss [ 59%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 65%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 71%]
sssssssssssssssssss                                                      [ 72%]
test\contrib\test_socks.py ..................                            [ 73%]
test\with_dummyserver\test_chunked_transfer.py ........                  [ 74%]
test\with_dummyserver\test_connectionpool.py ........................... [ 76%]
.......................................                                  [ 79%]
test\with_dummyserver\test_https.py .....................s....s......... [ 82%]
.................................................Uncaught exception, closing connection.
........................................................................ [ 87%]
................................sssssssssssssssssssssssssssssssssss....  [ 93%]
test\with_dummyserver\test_no_ssl.py ..                                  [ 93%]
test\with_dummyserver\test_poolmanager.py ...............                [ 94%]
test\with_dummyserver\test_proxy_poolmanager.py ................         [ 95%]
test\with_dummyserver\test_socketlevel.py .............................. [ 98%]
......................                                                   [100%]
====== 3 failed, 836 passed, 456 skipped, 113 warnings in 47.54 seconds =======
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="compiled-with-nuitka"&gt;
&lt;h1&gt;Compiled with Nuitka&lt;/h1&gt;
&lt;p&gt;nuitka wheel pytest:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ python -m pytest --disable-warnings
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-4.0.0, py-1.8.0, pluggy-0.11.0
rootdir: C:\Users\Tommy\pipenv-testing\urllib3-testing\urllib3, inifile: setup.cfg
plugins: timeout-1.3.1
collected 1295 items

test\test_collections.py ....................................s           [  2%]
test\test_compatibility.py ...                                           [  3%]
test\test_connection.py .....                                            [  3%]
test\test_connectionpool.py ............................................ [  6%]
...........................                                              [  8%]
test\test_exceptions.py .............                                    [  9%]
test\test_fields.py ...............                                      [ 11%]
test\test_filepost.py ...........                                        [ 11%]
test\test_no_ssl.py .F                                                   [ 12%]
test\test_poolmanager.py .........................                       [ 14%]
test\test_proxymanager.py ...                                            [ 14%]
test\test_queue_monkeypatch.py .                                         [ 14%]
test\test_response.py ..................sss............................. [ 18%]
...........                                                              [ 19%]
test\test_retry.py .....................................                 [ 21%]
test\test_ssl.py ...............................                         [ 24%]
test\test_util.py ...................................................... [ 28%]
........................................................................ [ 34%]
....................ss.s...s............................................ [ 39%]
............                                                             [ 40%]
test\test_wait.py ...ssssss                                              [ 41%]
test\contrib\test_pyopenssl.py sssssssssssssssssssssssssssssssssssssssss [ 44%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 49%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 55%]
ssssssssssssssssssss                                                     [ 57%]
test\contrib\test_pyopenssl_dependencies.py ss                           [ 57%]
test\contrib\test_securetransport.py sssssssssssssssssssssssssssssssssss [ 59%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 65%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 71%]
sssssssssssssssssss                                                      [ 72%]
test\contrib\test_socks.py ..................                            [ 73%]
test\with_dummyserver\test_chunked_transfer.py ........                  [ 74%]
test\with_dummyserver\test_connectionpool.py ........................... [ 76%]
.......................................                                  [ 79%]
test\with_dummyserver\test_https.py .....................s....s......... [ 82%]
........................................................................ [ 87%]
................................sssssssssssssssssssssssssssssssssss....  [ 93%]
test\with_dummyserver\test_no_ssl.py ..                                  [ 93%]
test\with_dummyserver\test_poolmanager.py ...............                [ 94%]
test\with_dummyserver\test_proxy_poolmanager.py ................         [ 95%]
test\with_dummyserver\test_socketlevel.py .............................. [ 98%]
......................                                                   [100%]
====== 1 failed, 838 passed, 456 skipped, 113 warnings in 47.59 seconds =======
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/urllib3-wheel-with-nuitka.html"/>
    <summary>This post compares the pytest results of urllib3 to its nuitka-built
.whl counterpart.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="gsoc2019" label="gsoc2019"/>
    <published>2019-06-19T16:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-064.html</id>
    <title>Nuitka Release 0.6.4</title>
    <updated>2019-06-10T19:28:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-4"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains many bug fixes all across the board. There is also
new optimization and many organizational improvements.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;When linking very large programs or packages, with gcc compiler,
Scons can produce commands that are too large for the OS. This
happens sooner on the Windows OS, but also on Linux. We now have a
workaround that avoids long command lines by using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;sources.tmp&lt;/span&gt;&lt;/code&gt;
syntax.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Remove temporary module after its use, instead of keeping
it in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.modules&lt;/span&gt;&lt;/code&gt; where e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Quart&lt;/span&gt;&lt;/code&gt; code tripped over its
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; value that is illegal on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed non-usage of our enhanced detection of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt;&lt;/code&gt; version for
compilers if given as a full path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed non-detection of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gnu-cc&lt;/span&gt;&lt;/code&gt; as a form of gcc compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; value corrections for compiled modules
was not taking into account that there was a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; value,
which can happen if something is wrapping imported modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;passlib&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added workaround for OS command line length limit in
compilation with MinGW64.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Revive the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;enum&lt;/span&gt;&lt;/code&gt; plugin, there are backports of the buggy
code it tries to patch up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fixup handling of SxS with non zero language id, these occur
e.g. in Anaconda.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Handle multiple PyQt plugin paths, e.g. on openSUSE this is
done, also enhanced finding that path with Anaconda on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; on Windows, allow the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.exe&lt;/span&gt;&lt;/code&gt;
suffix to not be present, which can happen when ran from command
line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Better version checks for DLLs on Python3, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt;
helper code needs more definitions to work properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for both &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pycryptodome&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pycryptodomex&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;chr&lt;/span&gt;&lt;/code&gt; built-in was not giving fully compatible error on
non number input.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;id&lt;/span&gt;&lt;/code&gt; built-in doesn’t raise an exception, but said
otherwise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Proper C identifiers for names that fit into &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;latin-1&lt;/span&gt;&lt;/code&gt;,
but are not &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ascii&lt;/span&gt;&lt;/code&gt; encodings.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Catch most common user error of using compiler from one
architecture against Python from another. We now check those and
compare it, and if they do not match, inform the user directly.
Previously the compilation could fail, or the linking, with cryptic
errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Using setuptools and its runners works now too, not merely
only pure distutils.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distutils: Added more ways to pass Nuitka specific options via
distutils.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.8: Initial compatibility changes to get basic tests to work.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nuitka is participating in the GSoC 2019 with 2 students, Batakrishna
and Tommy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Point people creating PRs to using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pre-commit&lt;/span&gt;&lt;/code&gt; hook in the
template. Due to making the style issues automatic, we can hope to
encounter less noise and resulting merge problems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many improvements to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pre-commit&lt;/span&gt;&lt;/code&gt; hook were done, hopefully
completing its development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated to latest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pylint&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt; versions, also
added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;codespell&lt;/span&gt;&lt;/code&gt; to check for typos in the source code, but that
is not automated yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added description of how to use experimental flags for your PRs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed mirroring from Bitbucket and Gitlab, as we increasingly use
the GitHub organisation features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Ubuntu Disco, removed support for Ubuntu Artful
packages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Attach data blobs as Windows resource files directly for
programs and avoid using C data files for modules or MinGW64, which
can be slow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specialization of helper codes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; is being done for more types
and more thoroughly and fully automatic with Jinja2 templating code.
This does replace previously manual code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added specialization of helper codes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; operation which is
entirely new.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added specialization of helper codes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-&lt;/span&gt;&lt;/code&gt; operation which is
entirely new.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dedicated nodes for specialized operations now allow to save memory
and all use type shape based analysis to predict result types and
exception control flow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better code generation for boolean type values, removing error checks
when possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better static analysis for even more type operations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fixed many kinds of typos in the code base with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;codespell&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply automatic formatting to more test runner code, these were
previously not done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;shutil.copytree&lt;/span&gt;&lt;/code&gt; which fails to work when directory
already exists, instead provide
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.util.FileOperations.copyTree&lt;/span&gt;&lt;/code&gt; and use that exclusively.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added new mode of operation to test runners, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;only&lt;/span&gt;&lt;/code&gt; that executes
just one test and stops, useful during development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new mechanism for standalone tests to expression modules that
need to be importable, or else to skip the test by a special comment
in the file, instead of by coded checks in the test runner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added also for more complex cases, another form of special comment,
that can be any expression, that decides if the test makes sense.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover also setuptools in our distutils tests and made the execution
more robust against variable behavior of distutils and setuptools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added standalone test for Urllib3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added standalone test for rsa.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added standalone test for Pmw.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added standalone test for passlib.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Again this release is a sign of increasing adoption of Nuitka. The GSoC
2019 is also showing effects, definitely will in the next release.&lt;/p&gt;
&lt;p&gt;This release has a lot of new optimization, called specialization, but
for it to really used, in many instances, we need to get away from
working on C types for variables only, and get to them beig used for
expressions more often. Otherwise much of the new special code is not
used for most code.&lt;/p&gt;
&lt;p&gt;The focus of this release has been again to open up development further
and to incorporate findings from users. The number of fixes or new use
cases working is astounding.&lt;/p&gt;
&lt;p&gt;In upcoming releases, new built-ins will be optimized, and
specialization of operations will hit more and more code now that the
infrastructure for it is in place.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-064.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2019-06-10T19:28:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-13.html</id>
    <title>Nuitka this week #13</title>
    <updated>2019-05-12T11:07:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-13"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-13" id="id2"&gt;Nuitka this week #13&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#communication-vs-coding" id="id3"&gt;Communication vs. Coding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#google-summer-of-code-2019" id="id4"&gt;Google Summer of Code 2019&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#my-experience" id="id5"&gt;My Experience&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#accepted-students" id="id6"&gt;Accepted Students&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#optimization-work" id="id7"&gt;Optimization Work&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#core-stuff" id="id8"&gt;Core Stuff&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#faster-windows-dependencies" id="id9"&gt;Faster Windows Dependencies&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-organisation" id="id10"&gt;Nuitka Organisation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#plugin-work" id="id11"&gt;Plugin Work&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#opening-up" id="id12"&gt;Opening Up&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id13"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id14"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#donations" id="id15"&gt;Donations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="communication-vs-coding"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Communication vs. Coding&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Communication was a lot more, just not these postings. Nuitka has
ventured into important realms.&lt;/p&gt;
&lt;p&gt;First, active developers have joined Nuitka. Second, as a consequence of
the later, Nuitka indeed was able to participate with a insanely
powerful offering of 4 mentors.&lt;/p&gt;
&lt;p&gt;This meant, that a lot of technical or project management debt hat to be
dealt with, and there was no time to make this kind of posting. This is
probably good news on all fronts, except that I feel they are missing,
and am glad to be able to resume them.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="google-summer-of-code-2019"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Google Summer of Code 2019&lt;/a&gt;&lt;/h2&gt;
&lt;section id="my-experience"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;My Experience&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This was the most crazy ride and fun. Became the admin of an active
sub-organisation under the PSF umbrella for GSoC 2019. So shortly after
the announcement of the project lists, students flooded in, and starting
working on things right away as early as February.&lt;/p&gt;
&lt;p&gt;They were working hard to prove themselves and get to know Nuitka,
asking many questions, with us having lots of email interviews, and even
a lot of video calls, where I personally talked to people about ideas.&lt;/p&gt;
&lt;p&gt;This happened simultaneously to more experienced developers joining the
project as well, making very important contributions.&lt;/p&gt;
&lt;p&gt;This basically meant, that many days 90%-100% of my Nuitka time was for
communication or working off technical debts I knew there were, or for
preparing things, I want to have with multiple people working on the
code base. This will be detailed in other sections.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="accepted-students"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Accepted Students&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;All of this has paid of in that we now have 2 really good students to
work on 2 Nuitka projects over the summer. Let’s welcome Batakrishna and
Tommy in separate posts. They will introduce themselves and what they
are going to do shortly, in separate posts.&lt;/p&gt;
&lt;p&gt;Lets just say, this is fantastic news. We had so many good applications
and its a shame, but we knew right away, not everybody who deserved it
could be picked. But this is going to be a good chance for us to get to
be open and welcoming to new people.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="optimization-work"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Optimization Work&lt;/a&gt;&lt;/h2&gt;
&lt;section id="core-stuff"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Core Stuff&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;So, the 0.6.3 release (btw. on Windows, be sure to use the 0.6.3.1
hotfix), which was made as a consolidation effort to get the good work
of mostly other people out, didn’t contain much optimization work for
the core, as that is still my thing.&lt;/p&gt;
&lt;p&gt;However, this changed a lot. An idea that came to my mind for how to do
the massive amounts of specialized helpers needed beyond &lt;cite&gt;+&lt;/cite&gt; and &lt;cite&gt;+=&lt;/cite&gt;,
with which I had started for prior releases. And that is to use Jinja2
based templates for C, to generate the code.&lt;/p&gt;
&lt;p&gt;This was an important idea. Took a while, but soon the manual code for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; was already replaced with generated code, fixing a few bugs by the
way, and from there, the generation was expanded to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;
&lt;p&gt;Currently, support for the 3 (!) different kinds of additions
(&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TrueDiv&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;FloorDir&lt;/span&gt;&lt;/code&gt; as well as Python2 default division,
dubbed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OldDiv&lt;/span&gt;&lt;/code&gt; in Nuitka was added along with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-&lt;/span&gt;&lt;/code&gt; .&lt;/p&gt;
&lt;p&gt;The reason, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; were done first, is that they have special
treatment for sequences, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sq_concat&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sq_repeat&lt;/span&gt;&lt;/code&gt;, where
the other operations will be more straightforward, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nb_subtract&lt;/span&gt;&lt;/code&gt;
(&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-&lt;/span&gt;&lt;/code&gt;) has a lot types supporting it and that makes those the easy
cases.&lt;/p&gt;
&lt;p&gt;I am saving a deeper explanation of 3 things we will need for the next
time. Basically we need optimization of these things at compile time,
and that is getting there, and code to use in the backend, and that is
getting there, and a third thing, that is to use optimization knowledge
to apply the special code as much as possible, and that is not yet fully
there.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="faster-windows-dependencies"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Faster Windows Dependencies&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This is going to excite Windows users. After Orsiris de Jong had done a
replacement for dependency walker that is faster, this had remained in
an experimental status, just due to lack of time.&lt;/p&gt;
&lt;p&gt;Recently however, I felt there is more time, after GSoC student
selection has happened, and that I could finally work a bit on open
issues like this. And when I wrote a dedicated tool, to analyse
dependences with either technology to compare the results, I found that
dendency walker founds a lot more things.&lt;/p&gt;
&lt;p&gt;That was a turn down, but turns out, nothing it finds is stuff that
should not be on the white list. In fact, it’s all core Windows things,
and from the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;System32&lt;/span&gt;&lt;/code&gt; folder. That made me question, why we take
anything from there (except maybe &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PythonXY.dll&lt;/span&gt;&lt;/code&gt;) at all, and after
that change the performance changed dramatically.&lt;/p&gt;
&lt;p&gt;The dependency walker now finishes a file in milliseconds. Actually the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pefile&lt;/span&gt;&lt;/code&gt; is now slow (surely it ought to be compiled), and takes some
seconds, for a file. That is amazing, and has lead to me to remove the
parallel usage, and since &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pefile&lt;/span&gt;&lt;/code&gt; allows for perfect caching, and is
Free Software, we will probably keep it.&lt;/p&gt;
&lt;p&gt;This will address a widespread complaint of many Windows users of the
standalone mode. This is now a relatively unnoticable part of the
overall experience.&lt;/p&gt;
&lt;p&gt;Currently I need to finish off some remaining problems with it, before
putting it out in the wild. Getting this into a release will solve many
newcomer issues.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="nuitka-organisation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Nuitka Organisation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Esp. for Google Summer of Code, Nuitka has sought and found mentors,
some of which are highly experienced for the task. I will let them
decide and write their own introduction, but I feel really blessed by
them helping me out in my desperate calls for help. Without them,
neither could Nuitka participate, nor could it even overachieve as much
as it does.&lt;/p&gt;
&lt;p&gt;Therefore I welcomed Kamran and Vaibhav into the organisation and they
are excited to work the the 2 accepted students, that are also added.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="plugin-work"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Plugin Work&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;jorj&lt;/span&gt;&lt;/code&gt; branch there is a lot of work from Jorj that aims at
adding support for more of the beasty stuff with hidden dependency and
plugin needs.&lt;/p&gt;
&lt;p&gt;He is also working at run time tracing of your program to be translated
to automatic imports of just that. I am going to highlight this later,
once I manage to cherry-pick the release ready parts from it for the
next release.&lt;/p&gt;
&lt;p&gt;But this definitely awesome stuff, and going to make Nuitka very easy to
use for some people, even with stranger software.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="opening-up"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Opening Up&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is also a teaser. But we did so much work for the 0.6.3 release to
make sure information is there, and things are accessible and changeable
by everyone, or even the pre-commit hook that I am very proud of.&lt;/p&gt;
&lt;p&gt;But I shall save this for next week, otherwise it will be too much new
information.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I continue to be active there, although often I fall prey to of not
wanting to talk about unfinished things. On Twitter of all things.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.&lt;/p&gt;
&lt;p&gt;Adding Twitter more prominently to the web site is something that is
also going to happen.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-13.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very likely at least one &lt;em&gt;you&lt;/em&gt; can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Donations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to help, but cannot spend the time, please consider to
donate to Nuitka, and go here:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="/pages/donations.html"&gt;Donate to Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-13.html"/>
    <summary>Nuitka this week #13</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2019-05-12T11:07:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-063.html</id>
    <title>Nuitka Release 0.6.3</title>
    <updated>2019-04-07T08:21:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-3"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This has a focus on organizational improvements. With more and more
people joining Nuitka, normal developers as well as many GSoC 2019
students, the main focus was to open up the development tools and
processes, and to improve documentation.&lt;/p&gt;
&lt;p&gt;That said, an impressive amount of bug fixes was contributed, but
optimization was on hold.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for running compiled binaries in Unicode path
names.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for crytodomex and pycparser packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for OpenSSL support in PyQt on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for OpenGL support with QML in PyQt on
Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for SciPy and extended the NumPy plugin to
also handle it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI: The option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--plugin-list&lt;/span&gt;&lt;/code&gt; still needed a positional argument
to work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.base_prefix&lt;/span&gt;&lt;/code&gt; is set correctly too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Also make sure &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exec_prefix&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.base_exec_prefix&lt;/span&gt;&lt;/code&gt; are set correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added platform plugins for PyQt to the default list of
sensible plugins to include.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix detection of standard library paths that include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;..&lt;/span&gt;&lt;/code&gt; path
elements.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Avoid using static C++ runtime library when using MinGW64.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Plugins: A plugin may now also generate data files on the fly for a
given module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for FreeBSD/PowerPC arch which still uses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt;&lt;/code&gt; and
not &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nuitka is participating in the GSoC 2019.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added documentation on how to create or use Nuitka plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added more API doc to functions that were missing them as part of the
ongoing effort to complete it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated to latest PyLint 2.3.1 for checking the code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: Using newer Scons inline copy with Python 2.7 as, the old one
remains only used with Python 2.6, making it easier to know the
relevant code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auto-format was very much enhanced and handles C and ReST files too
now. For Python code it does pylint comment formatting, import
statement sorting, and blackening.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added script &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;misc/install-git-hooks.py&lt;/span&gt;&lt;/code&gt; that adds a commit hook
that runs auto-format on commit. Currently it commits unstaged
content and therefore is not yet ready for prime time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved adapted CPython test suites to &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka-CPython-tests"&gt;GitHub repository under Nuitka
Organisation&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved Nuitka-website repository to &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka-website"&gt;GitHub repository under Nuitka
Organisation&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved Nuitka-speedcenter repository to &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka-speedcenter"&gt;GitHub repository under
Nuitka Organisation&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a &lt;a class="reference external" href="https://gitter.im/Nuitka-chat/community"&gt;Gitter chat for Nuitka community&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many typo and spelling corrections on all the documentation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added short installation guide for Nuitka on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved commandline parsing helper functions from common code helpers
to the main program where of course their only usage is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved post-processing of the created standalone binary from main
control to the freezer code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;chmod&lt;/span&gt;&lt;/code&gt; binary to remove executable bit from created
extension modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rt.exe&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mt.exe&lt;/span&gt;&lt;/code&gt; to deal with copying
the manifest from the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python.exe&lt;/span&gt;&lt;/code&gt; to created binaries. Instead use
new code that extracts and adds Windows resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed many &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ResourceWarnings&lt;/span&gt;&lt;/code&gt; on Python3 by improved ways of
handling files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed deprecation warnings related to not using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;collections.abc&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The runners in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bin&lt;/span&gt;&lt;/code&gt; directory are now formatted with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt;
too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Detect Windows permission errors for two step execution of Nuitka as
well, leading to retries should they occur.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The salt value for CPython cached results was improved to take more
things into account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: Added more trick assignments and generally added more tests
that were so far missing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;With the many organizational changes in place, my normal work is
expected to resume for after and yield quicker improvements now.&lt;/p&gt;
&lt;p&gt;It is also important that people are now enabled to contribute to the
Nuitka web site and the Nuitka speedcenter. Hope is to see more
improvements on this otherwise neglected areas.&lt;/p&gt;
&lt;p&gt;And generally, it’s great to see that a community of people is now
looking at this release in excitement and pride. Thanks to everybody who
contributed!&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-063.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2019-04-07T08:21:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-062.html</id>
    <title>Nuitka Release 0.6.2</title>
    <updated>2019-02-20T11:03:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-2"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has a huge focus on organizational things. Nuitka is
growing in terms of contributors and supported platforms.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, the Python flag &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-O&lt;/span&gt;&lt;/code&gt; was removing doc strings,
but that should only be done with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-OO&lt;/span&gt;&lt;/code&gt; which was
added too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, accelerated binaries failed to load packages from the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;virtualenv&lt;/span&gt;&lt;/code&gt; (not &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;venv&lt;/span&gt;&lt;/code&gt;) that they were created and ran with,
due to not propagating &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.prefix&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plat-*&lt;/span&gt;&lt;/code&gt; directories as frozen code, and
also on some platforms they can also contain code that fails to
import without error.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency needed for newer NumPy
versions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added support for Alpine Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;strong&gt;MSYS2&lt;/strong&gt; based Python on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Python flag &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python&lt;/span&gt; &lt;span class="pre"&gt;flag=-OO&lt;/span&gt;&lt;/code&gt;, which allows to
remove doc strings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pefile&lt;/span&gt;&lt;/code&gt; based dependency scans on
Windows, thanks to Orsiris for this contribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added plugin for proper Tkinter standalone support on Windows, thanks
to Jorj for this contribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__compiled__&lt;/span&gt;&lt;/code&gt; attribute for each module that Nuitka
has compiled. Should be like this now, and contains Nuitka version
information for you to use, similar to what &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.version_info&lt;/span&gt;&lt;/code&gt;
gives as a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;namedtuple&lt;/span&gt;&lt;/code&gt; for your checks.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;__nuitka_version__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;major&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;minor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;micro&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;releaselevel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;release&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Experimental code for variant types for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; values,
that can be plain C value, as well as the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt;. This is not
yet completed though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minor refinements of specialized code variants reducing them more
often the actual needed code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The Nuitka GitHub Organisation that was created a while ago and owns
the Nuitka repo now, has gained members. Check out
&lt;a class="reference external" href="https://github.com/orgs/Nuitka/people"&gt;https://github.com/orgs/Nuitka/people&lt;/a&gt; for their list. This is an
exciting transformation for Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka is participating in the GSoC 2019 under the PSF umbrella. We
hope to grow even further. Thanks to the mentors who volunteered for
this important task. Check out the &lt;a class="reference external" href="https://nuitka.net/pages/gsoc2019.html#mentors"&gt;GSoC 2019 page&lt;/a&gt; and thanks to the
students that are already helping out.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Nuitka internal &lt;a class="reference external" href="https://nuitka.net/apidoc"&gt;API documentation&lt;/a&gt; that will receive more love in the
future. It got some for this release, but a lot is missing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Nuitka code has been &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;black&lt;/span&gt;&lt;/code&gt;-ened and is formatted with an
automatic tool now all the way, which makes contributors lives
easier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added documentation for questions received as part of the GSoC
applications and ideas work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some proof reading pull requests were merged for the documentation,
thanks to everybody who addresses these kinds of errors. Sometimes
typos, sometimes broken links, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated inline copy of Scons used for Python3 to 3.0.4, which
hopefully means more bugs are fixed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is a sign of increasing adoption of Nuitka. The GSoC 2019
is showing early effects, as is more developers joining the effort.
These are great times for Nuitka.&lt;/p&gt;
&lt;p&gt;This release has not much on the optimization side that is user visible,
but the work that has begun is capable of producing glorious benchmarks
once it will be finished.&lt;/p&gt;
&lt;p&gt;The focus on this and coming releases is definitely to open up the
Nuitka development now that people are coming in as permanent or
temporary contributors in (relatively) high numbers.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-062.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2019-02-20T11:03:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-12.html</id>
    <title>Nuitka this week #12</title>
    <updated>2019-02-08T14:09:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-12"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-12" id="id2"&gt;Nuitka this week #12&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#communication-vs-coding" id="id3"&gt;Communication vs. Coding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#optimization-work" id="id4"&gt;Optimization Work&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#week-of-bugfixing" id="id5"&gt;Week of Bugfixing&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python-flag-o-and-oo" id="id6"&gt;Python flag -O and -OO&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#virtualenv-vs-venv" id="id7"&gt;Virtualenv vs. venv&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#google-summer-of-code-for-nuitka" id="id8"&gt;Google Summer of Code for Nuitka&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-organisation" id="id9"&gt;Nuitka Organisation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#windows-dependencies-from-pefile" id="id10"&gt;Windows Dependencies from pefile&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#tkinter-plugin" id="id11"&gt;Tkinter Plugin&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#numpy-plugin" id="id12"&gt;Numpy Plugin&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id13"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id14"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#donations" id="id15"&gt;Donations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="communication-vs-coding"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Communication vs. Coding&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Over the holiday season I sort of neglected these postings, but there
are other fields, where I have put my focus, but I think these postings
are now going to resume.&lt;/p&gt;
&lt;p&gt;A quick update in a while in an eternally fluent situation, and not too
polished.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="optimization-work"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Optimization Work&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, the 0.6.2 optimization work has been not a lot yet. I started some
work on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; C type and it looked good.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="week-of-bugfixing"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Week of Bugfixing&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So I did this, and it turned out rather long. I continued fixing things
and finishing up open things to the point that it now is clean. I hate
to be falling behind. I am touching on a few more interesting topics.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python-flag-o-and-oo"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Python flag -O and -OO&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nuitka was supporting &lt;cite&gt;-O&lt;/cite&gt; but doing what should only the done for &lt;cite&gt;-OO&lt;/cite&gt;
which I only learned of now. So this is going to be supported both now.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="virtualenv-vs-venv"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Virtualenv vs. venv&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Accelerated binaries were not running with full &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; in the
virtualenv, because &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module uses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.prefix&lt;/span&gt;&lt;/code&gt; and that was not
propagated,but it now is.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="google-summer-of-code-for-nuitka"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Google Summer of Code for Nuitka&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So the GSoC 2019 page is shaping up, the pull request to list Nuitka on
the PSF project pages has been merged. More tweaking will be needed to
get into perfect shape, and that has been my main communication time
effort.&lt;/p&gt;
&lt;p&gt;Finally somebody had stepped up for mentor, which means a lot to me. Now
we need to see if students are willing to pick us.&lt;/p&gt;
&lt;p&gt;And because I publish this too late. Already a bunch of stundents are
showing interest and are hacking on Nuitka, which keeps me even more
busy, and makes me extremely happy.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="nuitka-organisation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Nuitka Organisation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Nuitka organisation on GitHub was introduced for my a while ago, and
I had transferred the ownership of the Nuitka repository to there.
Having moved the issue tracking to there, I was going more all in on it.&lt;/p&gt;
&lt;p&gt;Recently more people have submitted PRs and with incredible quality and
willingness to support it even after merge of their PR. No dry by
contribution, but people looking to actually improve Nuitka together
with me.&lt;/p&gt;
&lt;p&gt;Therefore I welcome Orsiris and Jorj on board and am really happy about
it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="windows-dependencies-from-pefile"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Windows Dependencies from pefile&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So Orsiris de Jong implemented a replacement for the dependency walker
based code to scan DLLs for Windows standalone using the &lt;cite&gt;pefile&lt;/cite&gt;
module, which is likely way better at this. For starters it’s
experimental in the next release, but I expect it to soon become the
default.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="tkinter-plugin"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Tkinter Plugin&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And Jorj X. McKie implemented a Windows Tkinter plug-in that deals with
copying of the TCL installation and integrating it with Nuitka
standalone for distribution.&lt;/p&gt;
&lt;p&gt;That is very nice and seems to affect a lot of people using that GUI
style it seems.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="numpy-plugin"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Numpy Plugin&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And Jorj X. McKie also implemented a NumPy plug-in that deals with the
various acceleration methods there are, e.g. MKL, Blas, I have no idea.
It copies the needed DLLs along and makes sure that &lt;cite&gt;numpy&lt;/cite&gt; stays fast
in standalone mode.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I continue to be very active there.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.&lt;/p&gt;
&lt;p&gt;Adding Twitter more prominently to the web site is something that is
also going to happen.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-12.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very likely at least one &lt;em&gt;you&lt;/em&gt; can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Donations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to help, but cannot spend the time, please consider to
donate to Nuitka, and go here:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="/pages/donations.html"&gt;Donate to Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-12.html"/>
    <summary>Nuitka this week #12</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2019-02-08T14:09:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-061.html</id>
    <title>Nuitka Release 0.6.1</title>
    <updated>2019-01-08T10:31:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-1"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release comes after a relatively long time, and contains important
new optimization work, and even more bug fixes.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, the options &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--[no]follow-import-to=package_name&lt;/span&gt;&lt;/code&gt; was supposed
to not follow into the given package, but the check was executed too
broadly, so that e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;package_name2&lt;/span&gt;&lt;/code&gt; was also affected. Fixed in
0.6.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, wasn’t detecting multiple recursions into the same package in
module mode, when attempting to compile a whole sub-package. Fixed in
0.6.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, constant values are used as C boolean values still for some of
the cases. Fixed in 0.6.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, referencing a function cannot raise an exception, but that was
not annotated. Fixed in 0.6.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Use standard include of C bool type instead of rolling our
own, which was not compatible with newest Clang. Fixed in 0.6.0.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; built-in type actually does have a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__float__&lt;/span&gt;&lt;/code&gt; slot. Fixed in 0.6.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7: Types that are also sequences still need to call the
method &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__class_getitem__&lt;/span&gt;&lt;/code&gt; for consideration. Fixed in 0.6.0.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7: Error exits from program exit could get lost on Windows
due to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; handling not preserving errors. Fixed in 0.6.0.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Negative exit codes from Nuitka, e.g. due to a triggered
assertion in debug mode were not working. Fixed in 0.6.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, conditional &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; expressions were mis-optimized when not used
to not execute the right hand side still. Fixed in 0.6.0.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Fix, generators, coroutines, and asyncgen were not
properly supporting annotations for local variables. Fixed in 0.6.0.5
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7: Fix, class declarations had memory leaks that were
untestable before 3.7.1 fixed reference count issues in CPython.
Fixed in 0.6.0.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7: Fix, asyncgen expressions can be created in normal
functions without an immediate awaiting of the iterator. This new
feature was not correctly supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, star imports on the module level should disable built-in name
optimization except for the most critical ones, otherwise e.g. names
like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;all&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pow&lt;/span&gt;&lt;/code&gt; can become wrong. Previous workarounds for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pow&lt;/span&gt;&lt;/code&gt; were not good enough.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the scons for Python3 failed to properly report build errors due
to a regression of the Scons version used for it. This would mask
build errors on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: Fix, packages didn’t indicate that they are packages in
their &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; value, causing issues with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_resources&lt;/span&gt;&lt;/code&gt;
module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; values of compiled modules didn’t have
compatible &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;origin&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;has_location&lt;/span&gt;&lt;/code&gt; values preventing
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib_resources&lt;/span&gt;&lt;/code&gt; module from working to load data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, packages created from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pth&lt;/span&gt;&lt;/code&gt; files were also considered when
checking for sub-packages of a module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Handle cases of conflicting DLLs better. On Windows pick
the newest file version if different, and otherwise just report and
pick randomly because we cannot really decide which ought to be
loaded.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Warn about collisions of DLLs on non-Windows only as this
can happen with wheels apparently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: For Windows Python extension modules &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyd&lt;/span&gt;&lt;/code&gt; files,
remove the SxS configuration for cases where it causes problems, not
needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statement on file handles was not using the proper
filename when compiling, therefore breaking e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect.getsource&lt;/span&gt;&lt;/code&gt; on functions defined there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for OpenGL platform plugins to be included
automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing implicit dependency for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zmq&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.7: Fix, using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-X&lt;/span&gt; &lt;span class="pre"&gt;utf8&lt;/span&gt;&lt;/code&gt; flag on the calling
interpreter, aka &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=utf8_mode&lt;/span&gt;&lt;/code&gt; was not preserved in the
compiled binary in all cases.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Enabled C target type &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;void&lt;/span&gt;&lt;/code&gt; which will catch creating unused stuff
more immediately and give better code for expression only statements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enabled in-place optimization for module variables, avoiding write
back to the module dict for unchanged values, accelerating these
operations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compile time memory savings for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt;&lt;/code&gt; node of Python2, no
need to track if it is in an exception handler, not relevant there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using the single child node for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt;&lt;/code&gt; nodes gives memory
savings at compile time for these, while also making them operate
faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More kinds of in-place operations are now optimized, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt; &lt;span class="pre"&gt;+=&lt;/span&gt;
&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; ones were specialized to perform real
in-place extension where possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Loop variables no longer loose type information, but instead collect
the set of possible type shapes allowing optimization for them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Corrected download link for Arch AUR link of develop package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Ubuntu Cosmic (18.10) for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Fedora 29 for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Describe the exact format used for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format&lt;/span&gt;&lt;/code&gt; in the Developer
Manual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added description how to use CondaCC on Windows to the User Manual.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The operations used for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt; &lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt; &lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;await&lt;/span&gt;&lt;/code&gt;
were all doing a look-up of an awaitable, and then executing the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; that awaitable as one thing. Now this is split into
two parts, with a new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ExpressionYieldFromAwaitable&lt;/span&gt;&lt;/code&gt; as a dedicated
node.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt;&lt;/code&gt; node types, now 3 share a base class and common
computation for now, enhancing the one for awaitiable, which was not
fully annotating everything that can happen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In code generation avoid statement blocks that are not needed,
because there are no local C variables declared, and properly indent
them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fixups for the manual Valgrind runner and the UI changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test runner detects lock issue of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; on Windows and
considers it a permission problem that causes a retry.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This addresses even more corner cases not working correctly, the out of
the box experience should be even better now.&lt;/p&gt;
&lt;p&gt;The push towards C level performance for integer operation was held up
by the realization that loop SSA was not yet there really, and that it
had to be implemented, which of course now makes a huge difference for
the cases where e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; are being used. There is no C type for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; used yet, which limits the impact of optimization to only taking
shortcuts for the supported types. These are useful and faster of
course, but only building blocks for what is to come.&lt;/p&gt;
&lt;p&gt;Most of the effort went into specialized helpers that e.g. add a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; and and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; value in a dedicated fashion, as well as
comparison operations, so we can fully operate some minimal examples
with specialized code. This is too limited still, and must be applied to
ever more operations.&lt;/p&gt;
&lt;p&gt;What’s more is that the benchmarking situation has not improved. Work
will be needed in this domain to make improvements more demonstrable. It
may well end up being the focus for the next release to improve Nuitka
speedcenter to give more fine grained insights across minor changes of
Nuitka and graphs with more history.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-061.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2019-01-08T10:31:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-11.html</id>
    <title>Nuitka this week #11</title>
    <updated>2018-12-10T07:09:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-11"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-11" id="id2"&gt;Nuitka this week #11&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#communication-vs-coding" id="id3"&gt;Communication vs. Coding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#optimization-work" id="id4"&gt;Optimization Work&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#levels-of-optimization" id="id5"&gt;Levels of Optimization&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#week-of-bugfixing" id="id6"&gt;Week of Bugfixing&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#exec-on-filehandles" id="id7"&gt;Exec on Filehandles&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#pkgutil-iter-modules" id="id8"&gt;pkgutil.iter_modules&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#when-to-release" id="id9"&gt;When to release&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#google-summer-of-code-for-nuitka" id="id10"&gt;Google Summer of Code for Nuitka&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id11"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id12"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#donations" id="id13"&gt;Donations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="communication-vs-coding"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Communication vs. Coding&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I continue to force myself to report more publicly, and it feels good.
This time things are in a stablizing period, and I feel I have a
consistent message.&lt;/p&gt;
&lt;p&gt;Bear in mind, that this is supposed to be a quick, not too polished, and
straight from top of my head, even if really a lot of content. But I
feel that esp. the optimization parts are worth reading.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="optimization-work"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Optimization Work&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, the 0.6.1 optimization work has been a lot. And it’s containing
improvements on every level. I think I will detail the levels in another
section.&lt;/p&gt;
&lt;section id="levels-of-optimization"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Levels of Optimization&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;First level is of course node level optimization. Here 0.6.1 adds many
things, from better handling of closure variables not all as unknown
every time control flow escapes, to some operations &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; and
comparisons on known built-in type shapes to now be able to statically
tell that they do not raise. The opposite (does definitely raise) is
prepared, but not yet used.&lt;/p&gt;
&lt;p&gt;This allows for type shapes to be longer known. Now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a+b+c&lt;/span&gt;&lt;/code&gt; can be
known, but previously only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a+b&lt;/span&gt;&lt;/code&gt; was sort of known, and little used
information.&lt;/p&gt;
&lt;p&gt;The next level is picking the C target type. Here seeing more operations
and understanding more variables allows to more often pick the &lt;cite&gt;C bool&lt;/cite&gt;
or &lt;cite&gt;C void&lt;/cite&gt; types over the &lt;cite&gt;PyObject *&lt;/cite&gt; C type. For 0.6.1 I have
observed that esp. more indicator variables make it to that stage,
generating way more efficient C code (for that indicator variable) for
those in many instances, esp. with loops, as these no longer loose type
shape information as badly as they did.&lt;/p&gt;
&lt;p&gt;The, another level is when it is treated as an object, but known to be
&lt;cite&gt;int&lt;/cite&gt;, there are way more helpers used for &lt;cite&gt;+&lt;/cite&gt;/&lt;cite&gt;+=&lt;/cite&gt; and a whole new set
of them for comparisons, that in these cases of full or partial type
knowledge operate faster.&lt;/p&gt;
&lt;p&gt;And even if e.g. only one type is known, this still allows to not make a
lot of tests about it, and to avoid attempted shortcuts that cannot
work. For 0.6.1 the &lt;cite&gt;+&lt;/cite&gt; and &lt;cite&gt;+=&lt;/cite&gt; are pretty well covered for these, but
some variants are not yet tuned to take all type knowledge advantage.&lt;/p&gt;
&lt;p&gt;These will be also the building block, once the C type layer picks types
like “C int or PyObject * known to be int” with indicator flags which
values are currently valid to use, then these specialized calls still
make sense.&lt;/p&gt;
&lt;p&gt;The most attrative level, “C int” has not been reached for 0.6.1 but for
my loop example and Python3, I can say that now would be a nice time to
start it, as type shape knowledge is all there. This was totally not the
case for 0.6.0, but it seems that this step will have to be postponed to
another release, maybe 0.6.2, maybe even later.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="week-of-bugfixing"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Week of Bugfixing&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;But something that bothers me is seeing the issue tracker pile up on
actionable items, where I just have not taken action. So as announced on
Twitter already, I am having and continue to have bug fixing time. I am
acting on issues that are relatively old and easy to act on, or where I
have no hope of this happening by anybody else anymore.&lt;/p&gt;
&lt;p&gt;I have listed some interesting examples below. But basically these are
small, relatively unimportant, yet somewhat import for some use cases
things.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="exec-on-filehandles"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Exec on Filehandles&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So when doing exec on a filehandle, Nuitka was at runtime reading the
source, then compiling it, but forgetting about the filename. This makes
things like &lt;cite&gt;inspect.getsource()&lt;/cite&gt; fail on functions from there, and ugly
tracebacks not pointing to the filename. This was one of the things
which I had understood, but not did the actual work yet.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="pkgutil-iter-modules"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;pkgutil.iter_modules&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And another one, which seemed just not done, but turned out to be rather
complex, this one needs to populate a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path_importer_cache&lt;/span&gt;&lt;/code&gt; for
imported modules, and then to report the child modules. There was no
object to carry that information, so now instances of the meta path
based importer are associated for every import.&lt;/p&gt;
&lt;p&gt;Turns out for Python3, my simplistic type building calling &lt;cite&gt;type&lt;/cite&gt;
manually here does not work, as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iter_modules&lt;/span&gt;&lt;/code&gt; do not
become anything but static methods ever. Needs a real type.&lt;/p&gt;
&lt;p&gt;Plus, I had to disable it for now, because mixed packages, like the one
we do with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; where only part is compiled (the one
required) and part is pure Python from disk still, stopped to work. The
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iter_modules&lt;/span&gt;&lt;/code&gt; it seems will have to cover that case too.&lt;/p&gt;
&lt;p&gt;So no luck, postponing this until next week of bug fixes. Frustrating a
bit, but such is life.&lt;/p&gt;
&lt;section id="when-to-release"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;When to release&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There are still some issues that I want to get to. Specifically the
OpenGL plugins which has been research ever since, and nobody stepped
up, but it’s rather trivial. And the Tcl/Tk for Windows. People have
provided sufficient instructions for a plugin that I am going to write
this week.&lt;/p&gt;
&lt;p&gt;Once I feel the issue tracker is clean, I will release. As a matter of
experience, it is then going to grow a lot again.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="google-summer-of-code-for-nuitka"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Google Summer of Code for Nuitka&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Finally somebody has stepped up, which means a lot to me. Now to the
actual work!&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I continue to be very active there.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.&lt;/p&gt;
&lt;p&gt;Adding Twitter more prominently to the web site is something that is
also going to happen.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-11.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very likely at least one &lt;em&gt;you&lt;/em&gt; can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Donations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to help, but cannot spend the time, please consider to
donate to Nuitka, and go here:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="/pages/donations.html"&gt;Donate to Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-11.html"/>
    <summary>Nuitka this week #11</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-12-10T07:09:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-10.html</id>
    <title>Nuitka this week #10</title>
    <updated>2018-11-21T06:06:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-10"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-10" id="id2"&gt;Nuitka this week #10&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#communication-vs-coding" id="id3"&gt;Communication vs. Coding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#hotfixes" id="id4"&gt;Hotfixes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#google-summer-of-code-for-nuitka" id="id5"&gt;Google Summer of Code for Nuitka&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#pythran-and-nuitka" id="id6"&gt;Pythran and Nuitka&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#performance-work" id="id7"&gt;Performance Work&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#adding-specialized-object-operations" id="id8"&gt;Adding specialized object operations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#controlflow-descriptions" id="id9"&gt;Controlflow Descriptions&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#preparations-for-comparison-operations" id="id10"&gt;Preparations for comparison operations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#comparison-conditions" id="id11"&gt;Comparison Conditions&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#local-variable-escaping" id="id12"&gt;Local variable escaping&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#benchmarks-missing" id="id13"&gt;Benchmarks Missing&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#static-linking" id="id14"&gt;Static Linking&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#conda-cc" id="id15"&gt;Conda CC&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#annotations-future-feature" id="id16"&gt;Annotations Future Feature&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#msi-files" id="id17"&gt;MSI files&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#overall" id="id18"&gt;Overall&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id19"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id20"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#donations" id="id21"&gt;Donations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="communication-vs-coding"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Communication vs. Coding&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Recently it was a bit more tough to make that decision. First, there was
much going privately, with me ill, then child ill, and ill again, and
myself, and that made me have a much harder time to communicate about
incomplete things.&lt;/p&gt;
&lt;p&gt;Even now, I am torn between fixing issues for 0.6.1 and doing this, but
I know that it will take at least one week, so I am missing the point,
if I wait for it more.&lt;/p&gt;
&lt;p&gt;Bear in mind, that this is supposed to be a quick, not too polished, and
straight from top of my head, even if really a lot of content. But I
feel that esp. the optimization parts are worth reading.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hotfixes"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Hotfixes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There has been another hotfix, 0.6.0.6 and there ought to be one
0.6.0.7, at least on factory there is a bunch of stuff for it, but I
didn’t actually do it yet. I was wandering between there will be a
release anyway, and the feeling that some of the material may cause
regressions, so I might skip on that really.&lt;/p&gt;
&lt;p&gt;So for the most fixes, I suspect, develop is going to be the way until
next week.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="google-summer-of-code-for-nuitka"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Google Summer of Code for Nuitka&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nobody has stepped up, which means it will not happen unfortunately.
This would be your last chance to step up. I know you will feel not
qualified. But I just need a backup that will help a student around
obstacles in case I go missing. Contact me and I will be very happy.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="pythran-and-nuitka"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Pythran and Nuitka&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As suggested by &amp;#64;wuoulf (Wolf Vollprecht) we had a meeting at the side
of the PyCon DE 2018 conference in Karlsruhe, abusing the C++ regular
table as a forum for that, which was a very nice experience.&lt;/p&gt;
&lt;p&gt;First of all, Wolf is so much more knowledgeable about AnaConda and
could point out to me, very important stuff, not the least, that
AnaConda contains its own compiler, which I have successfully used
since, to first add easier installation instructions for Windows, and
second, to successfully statically link with LTO on Linux amd64. Both of
which are important for me.&lt;/p&gt;
&lt;p&gt;But for Pythran which is limited Python, specialized to translate Numpy
API to C++, we showed each other, Nuitka and Pythran details, and
somehow in my mind a plan formed how Nuitka could use the Pythran tricks
long term, and mid term, how it could include a plugin that will allow
to integrate with Pythran compilation.&lt;/p&gt;
&lt;p&gt;This was a huge success.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="performance-work"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Performance Work&lt;/a&gt;&lt;/h2&gt;
&lt;section id="adding-specialized-object-operations"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Adding specialized object operations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;See last week, this has seen more completion. Both &lt;cite&gt;+&lt;/cite&gt; and &lt;cite&gt;+=&lt;/cite&gt; are more
or less covered for the selected subset. The CPython test suites were
initially not finding uses, but with more and more optimization phase
improvements, it challenges code generation with missing ones, and then
I added them more and more.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="controlflow-descriptions"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Controlflow Descriptions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Shapes were added for the &lt;cite&gt;+&lt;/cite&gt; and &lt;cite&gt;&amp;lt;&lt;/cite&gt; operation so far, but didn’t
influence anything else really but code generation, but of course they
should also impact optimization phase.&lt;/p&gt;
&lt;p&gt;So the query for type shape has been enhanced to return not only a type
shape saying that &lt;cite&gt;int+float -&amp;gt; float&lt;/cite&gt;, but also now an object that
describes impact on control flow of the program. This can then say e.g.
that this doesn’t execute arbitrary code, and that it does not modify
input values, things used in the code generation to avoid error checks,
and in the optimization to not have to mark things as unknown.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="preparations-for-comparison-operations"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Preparations for comparison operations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;So optimization now also has proper type shape functions for the &lt;cite&gt;&amp;lt;&lt;/cite&gt; and
the warnings when they fail to know what to do for concrete types. This
allows to actually remove checks, but so far this wasn’t exposed for
neither &lt;cite&gt;+&lt;/cite&gt; or for &lt;cite&gt;&amp;lt;&lt;/cite&gt;. Doing this eliminates the exception check for
the operation part, where previously it was done if anything in the
expression could raise.&lt;/p&gt;
&lt;p&gt;Specializing the rich comparisons helper codes is the next step, but so
far I didn’t quite get to it yet, but it has been started.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="comparison-conditions"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Comparison Conditions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Preparing &lt;cite&gt;&amp;lt;&lt;/cite&gt; optimization for the loop, I noticed that &lt;cite&gt;not&lt;/cite&gt; was
optimized for &lt;cite&gt;in&lt;/cite&gt; to become &lt;cite&gt;not in&lt;/cite&gt;, and also &lt;cite&gt;is&lt;/cite&gt; to become &lt;cite&gt;is not&lt;/cite&gt;,
etc. but for comparisons, where we can not the result is of bool shape,
we can now also switch &lt;cite&gt;not &amp;lt;&lt;/cite&gt; to &lt;cite&gt;&amp;gt;=&lt;/cite&gt; and &lt;cite&gt;not =&lt;/cite&gt; to &lt;cite&gt;!=&lt;/cite&gt; of course.&lt;/p&gt;
&lt;p&gt;And since our reformulation of &lt;cite&gt;while a &amp;lt; b&lt;/cite&gt; ends up having a statement
like &lt;cite&gt;if not a &amp;lt; b: break&lt;/cite&gt; as part of its re-formulation, that is again
one step closer to optimizing my example loop.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="local-variable-escaping"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Local variable escaping&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Much to my shock, I noticed that the code which is responsible to handle
escaping control flow (i.e. unknown code is executed), was not only
doing what it was supposed to do, i.e. mark closure variables as
unknown, but more or less did it for all local variables with Python3.&lt;/p&gt;
&lt;p&gt;Fixing that allows for a lot more optimization obviously, and makes my
test find missing ones, and even bugs in existing ones, that were
previously hidden. A good thing to notice this regression (was better
once), now that I am looking at concrete examples.&lt;/p&gt;
&lt;p&gt;One noticeable sign was that more of my tests failed with warnings about
missing code helpers. And another that in my while loop with &lt;cite&gt;int&lt;/cite&gt;
increase, it now seems as if Python3 is good. For Python2, the “int or
long” shape will need dedicated helpers. That is because &lt;cite&gt;ìnt + int&lt;/cite&gt;
becomes either &lt;cite&gt;int&lt;/cite&gt; or &lt;cite&gt;long&lt;/cite&gt; there, where Python3 only has &lt;cite&gt;long&lt;/cite&gt; but
renamed it &lt;cite&gt;int&lt;/cite&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benchmarks-missing"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Benchmarks Missing&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Speedcenter got repaired, but I need to add the loop examples I am using
as test cases before next release, so I can show what Nuitka 0.6.1 will
have achieved or at least have improved somewhat already.&lt;/p&gt;
&lt;p&gt;But currently these examples only serve as input for general
improvements that then take a lot of time, and don’t have immediate
impact on their own.&lt;/p&gt;
&lt;p&gt;Still would be good to see where Nuitka is standing after each one.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="static-linking"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Static Linking&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So static linking works now, provided it’s not a &lt;cite&gt;pyenv&lt;/cite&gt; crappy
&lt;cite&gt;libpython.a&lt;/cite&gt; but one that can actually work. I got this to work on
Linux and using the Conda CC, even LTO will work with it. Interestingly
then linking is noticely slow, and I bet &lt;cite&gt;ccache&lt;/cite&gt; and the likes won’t
help with that.&lt;/p&gt;
&lt;p&gt;I am interested to see what this means for performance impact. But it
will allow to address issues, where embedded CPython run time is plain
slower than the one that lives in the python binary. For acceleration
this is great news.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="conda-cc"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Conda CC&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Using Conda CC by default as a fallback in &lt;cite&gt;–mingw&lt;/cite&gt; mode on Windows is
something that was easy to add. So when no other &lt;cite&gt;gcc&lt;/cite&gt; is found, and
MSVC is not tried in this mode, and the right directory is added to
&lt;cite&gt;PATH&lt;/cite&gt; automatically, with Anaconda, things should now be smoother. It
has also its own &lt;cite&gt;libpython.a&lt;/cite&gt;, not sure yet if it’s a static link
library, that would be fantastic, but unlike standard MinGW64 we do not
have to roll our own at least.&lt;/p&gt;
&lt;p&gt;I will try with &lt;cite&gt;–lto&lt;/cite&gt; eventually though and see what it does. But I
think static linking on Windows is not supported by CPython, but I am
not entirely sure of that.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="annotations-future-feature"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id16" role="doc-backlink"&gt;Annotations Future Feature&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Found a 3.7 feature that is not covered by the test suite, the
&lt;cite&gt;__future__&lt;/cite&gt; flag &lt;cite&gt;annotations&lt;/cite&gt; wasn’t working as expected. In this,
strings are to be used for &lt;cite&gt;__annotations__&lt;/cite&gt; where they show up (many
are ignored simply) and that requires an &lt;cite&gt;unparse&lt;/cite&gt; function, going from
parsed ast (presumably it’s still syntax checked) back to the string,
but that was only very hard to get at, and with evil hackery.&lt;/p&gt;
&lt;p&gt;For 3.8 a bug fix is promised that will give us the string immediately,
but for now my hack must suffice.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="msi-files"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id17" role="doc-backlink"&gt;MSI files&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Following the 3.7.1 release, there are MSI files again, as the
regression of 3.7.0 to build them has been fixed in that release. The
MSI files will work with 3.7.0 also, just the building was broken.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="overall"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id18" role="doc-backlink"&gt;Overall&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So 0.6.1 is in still in full swing in terms of optimization. I think I
need to make a release soon, simply because there is too much
unreleased, but useful stuff already.&lt;/p&gt;
&lt;p&gt;I might have to postpone my goal of C int performance for one example
loop until next release. No harm in that. There already are plenty of
performance improvements across the board.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id19" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I continue to be very active there.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.&lt;/p&gt;
&lt;p&gt;Adding Twitter more prominently to the web site is something that is
also going to happen.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id20" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-10.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very likely at least one &lt;em&gt;you&lt;/em&gt; can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id21" role="doc-backlink"&gt;Donations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to help, but cannot spend the time, please consider to
donate to Nuitka, and go here:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="/pages/donations.html"&gt;Donate to Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-10.html"/>
    <summary>Nuitka this week #10</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-11-21T06:06:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-9.html</id>
    <title>Nuitka this week #9</title>
    <updated>2018-10-20T06:17:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-9"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-9" id="id2"&gt;Nuitka this week #9&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#communication-vs-coding" id="id3"&gt;Communication vs. Coding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#hotfixes" id="id4"&gt;Hotfixes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#google-summer-of-code-for-nuitka" id="id5"&gt;Google Summer of Code for Nuitka&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#website-overhaul" id="id6"&gt;Website Overhaul&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#performance-work" id="id7"&gt;Performance Work&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#adding-specialized-object-operations" id="id8"&gt;Adding specialized object operations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#finding-missing-specialized-object-code-generation" id="id9"&gt;Finding missing specialized object code generation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#optimizing-plain-object-operations-too" id="id10"&gt;Optimizing plain object operations too&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#lack-of-type-knowledge" id="id11"&gt;Lack of type knowledge&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#performance-regressions-vs-cpython" id="id12"&gt;Performance regressions vs. CPython&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#in-place-unicode-still-being-bad" id="id13"&gt;In-place unicode still being bad&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#benchmarks-missing" id="id14"&gt;Benchmarks Missing&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#type-shapes-in-optimization" id="id15"&gt;Type shapes in optimization&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#control-flow-escape" id="id16"&gt;Control flow escape&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#overall" id="id17"&gt;Overall&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#improved-annotations" id="id18"&gt;Improved Annotations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#release-or-not" id="id19"&gt;Release or not&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#standalone-improvements" id="id20"&gt;Standalone Improvements&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#caching-examined" id="id21"&gt;Caching Examined&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python3-deprecation-warnings" id="id22"&gt;Python3 deprecation warnings&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id23"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id24"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#donations" id="id25"&gt;Donations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="communication-vs-coding"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Communication vs. Coding&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My new communication strategy is a full success, engagement with Nuitka
is on an all time high.&lt;/p&gt;
&lt;p&gt;But the recent weeks more than ever highlighted why I have to force
myself to do it. I do not like to talk about unfinished stuff. And right
now, there is really a lot of it, almost only it. Also I was ill, and
otherwise busy, so this is now late by a week.&lt;/p&gt;
&lt;p&gt;But I am keeping it up, and will give an update, despite the feeling
that it would be better to just finish a few of those things and then
talk about it, but then it will take forever and leave you in the dark.
And that is not what is supposed to be.&lt;/p&gt;
&lt;p&gt;Bear in mind, that this is supposed to be a quick, not too polished, and
straight from top of my head, even if really a lot of content. But I
feel that esp. the optimization parts are worth reading.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hotfixes"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Hotfixes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So the 0.6.0 release was a huge success, but it definitely wasn’t
perfect, and hotfixes were necessary. The latest one 0.6.0.5 was done
just yesterday and actually contains one for an important
mis-optimization being done, and you ought to update to it from any
prior 0.6.0 release.&lt;/p&gt;
&lt;p&gt;There are also a few remaining compatibility issues fixed for 3.7 and
generally using the latest hotfix is always a good idea.&lt;/p&gt;
&lt;p&gt;Kind of what one has to expect from a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;0&lt;/span&gt;&lt;/code&gt; release, this one also had
more expose than usual is seems.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="google-summer-of-code-for-nuitka"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Google Summer of Code for Nuitka&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I need more people to work on Nuitka. One way of doing this could be to
participate in Google Summer of Code under the Python umbrella. To make
that possible, I need you to volunteer as a mentor. So please, please,
do.&lt;/p&gt;
&lt;p&gt;I know you will feel not qualified. But I just need a backup that will
help a student around obstacles in case I go missing. Contact me and I
will be very happy.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="website-overhaul"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Website Overhaul&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I updated the website to recent Nikola and dropped the tag cloud that I
was using. Should have cleaner and better looks. Also integrated privacy
aware sharing links, where two clicks are necessary to share a page or
article like this one on Twitter, Facebook, etc.&lt;/p&gt;
&lt;p&gt;Also the download page saw some structural updates and polishing. It
should easier to overview now.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="performance-work"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Performance Work&lt;/a&gt;&lt;/h2&gt;
&lt;section id="adding-specialized-object-operations"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Adding specialized object operations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The feedback for performance and the work on 0.6.1 are fully ongoing,
and there are many major points that are ongoing. I want to briefly
cover each one of them now, but many of them will only have full effect,
once everything is in place, which each one is very critical.&lt;/p&gt;
&lt;p&gt;So, with the type tracing, objects have known types, and short of using
a C type, knowing e.g. that an object is an &lt;cite&gt;int&lt;/cite&gt;, and the other one
too, doing &lt;cite&gt;+&lt;/cite&gt; for them can take a lot of advantage avoiding unrelated
checks and code paths, even if still using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; at the end of
the day.&lt;/p&gt;
&lt;p&gt;And even we are only knowing it’s &lt;em&gt;not&lt;/em&gt; an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, but say one value is
a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt; and the other an unknown, that allows to remove checks for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; shortcuts as they can no longer apply. These are tiny
optimizations then, but still worthwhile.&lt;/p&gt;
&lt;p&gt;To further this, first the inplace operations for a couple of more or
less randomly selected types, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt;, have been looked at and
have gotten their own special object based helpers if one or both types
are known to be of that kind.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="finding-missing-specialized-object-code-generation"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Finding missing specialized object code generation&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A report has been added, that will tell when such an operation could
have been used, but was not available. This uncovered where typical
stuff goes non optimized, a nice principle to see what is actually
happening.&lt;/p&gt;
&lt;p&gt;So adding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; would now give a warning, although of
course, the optimization phase ought to catch the static raise that is
and never let it get there, so this report also addresses missing
optimization in an earlier phase.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="optimizing-plain-object-operations-too"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Optimizing plain object operations too&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;So the in-place operations were then covered, so this was extended to
mere &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; operations too, the ones that are not in-place. Sometimes,
esp. for immutable types, there was already code for that, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;
doesn’t really do it, in other cases, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; + &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; code for a
quicker concat was added.&lt;/p&gt;
&lt;p&gt;And again a report for where it’s missing was added and basic coverage
for most of the types. However, in some instances, the optimization
doesn’t use the full knowledge yet. But where it does, it will shove off
quite a few cycles.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="lack-of-type-knowledge"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Lack of type knowledge&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To apply these things effectively, optimization and value tracing need
to know types in the first place. I have found two obstacles for that.
One are branch merges. If a branch or both assign to the same type or
original type, well the type is changed. Previously it became “unknown”
which is treated as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;object&lt;/span&gt;&lt;/code&gt; for code generation, and allows nothing
really. But now that is better on develop now, and was actually a
trivial missing thing.&lt;/p&gt;
&lt;p&gt;The other area is loops. Loops put values to unknown when entering loop
body, and again when leaving. Essentially making type tracing not
effective where it is needed the most to achieve actual performance.
Also this was limiting the knowledge for all function to one type to not
happening for these kinds of variables that were assigned inside a loop
at all.&lt;/p&gt;
&lt;p&gt;Took me a while, but I figured out how to build type tracing for loops
that works. It currently is still unfinished in my private repo, but
passes all tests, I would just like to make it use dedicated interfaces,
and clean it up.&lt;/p&gt;
&lt;p&gt;I will most likely have that for 0.6.1 too and that should expand the
cases where types are known in code generation by a fair amount.&lt;/p&gt;
&lt;p&gt;The effect of that will be that more often C code generation will
actually see types. Currently e.g. a boolean variable that is assigned
in a loop, cannot use the C target type in code generation. Once loop
code is merged, it will however take advantage there too. And only then
I think adding “C int” as a C type makes sense at all.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="performance-regressions-vs-cpython"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Performance regressions vs. CPython&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Then another area is performance regressions. So one thing I did early
on in the 0.6.1 cycle was using the “module var C target type” to get
in-place working for those too. Doing string concatenations on module
variables could be slower by an order of magnitude, as could be other
operations.&lt;/p&gt;
&lt;p&gt;I still need to do it for closure variables too. Then Nuitka will do at
least as many of them perfectly as CPython does. It also will be better
at it them, because e.g. it doesn’t have to delete from the module
dictionary first, due to it never taking a reference, and same applies
to the cell. Should be faster for that too.&lt;/p&gt;
&lt;p&gt;But strings in-place on these if not optimized, it will look very ugly
in terms of worse performance, so 0.6.0 was still pretty bad for some
users. This will however hopefully be addressed in 0.6.1 then.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="in-place-unicode-still-being-bad"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;In-place unicode still being bad&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Another field was in-place string add for the already optimized case, it
was still slower than CPython, and I finally found out what causes this.
And that is the using of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyUnicode_Append&lt;/span&gt;&lt;/code&gt; is far
worse than in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt;&lt;/code&gt; binary that you normally use, I have see
that at least for 3.5 and higher CPython. Analysis showed that e.g.
MiniConda had the issue to a much smaller extent, and was being much
faster anyway, but probably just has better &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; compilation
flags.&lt;/p&gt;
&lt;p&gt;So what to do. Ultimately that was to be solved by including a clone of
that function, dubbed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UNICODE_APPEND&lt;/span&gt;&lt;/code&gt; that behaves the same, and can
even shove off a couple of cycles, by indicating the Python error status
without extra checks, and specializing it for the pure &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt; &lt;span class="pre"&gt;+=&lt;/span&gt;
&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; case that we see most often, same for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UNICODE_CONCAT&lt;/span&gt;&lt;/code&gt; for
mere &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Right now the benchmarks to show it do not exist yet. Again something
that typically wants me to delay stuff. But as you can imagine, tracking
down these hard issues, writing that much code to replace the unicode
resizing, is hard enough by itself.&lt;/p&gt;
&lt;p&gt;But I hope to convince myself that this will allow to show that for
compiled code, things are going to be faster only now.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benchmarks-missing"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Benchmarks Missing&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In fact, speedcenter as a whole is currently broken, mostly due to
Nikola changes that I am trying to work around, but it will take more
time apparently and isn’t finished as I write this.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="type-shapes-in-optimization"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Type shapes in optimization&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Another optimization end, is the type shapes of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; operation
itself. Right now what is being done is that the shape is derived from
the shape of the left argument with the right shape to be considered by
it. These also have reports now, for cases where they are missing. So
saying e.g. that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; + &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; results in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; and these
kinds of things, are stuff being encoded there right now.&lt;/p&gt;
&lt;p&gt;This is necessary step to e.g. know that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; + &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; -&amp;gt;
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int_or_long&lt;/span&gt;&lt;/code&gt;, to make effective loop variable optimization.&lt;/p&gt;
&lt;p&gt;Without these, and again, that is a lot of code to write, there is no
way to hope for wide spread type knowledge in code generation.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="control-flow-escape"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id16" role="doc-backlink"&gt;Control flow escape&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Something missing there, is to also make it known that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; unlike it
currently is now, should not in all cases lead to “control flow escape”
with the consequence of removing all stuff, and expecting an exception
possible, but instead to let the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; type also make known that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;
&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; ont it not only gives an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int_or_long&lt;/span&gt;&lt;/code&gt; result shape, but also
while doing so, that it will never raise an exception (bare
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MemoryError&lt;/span&gt;&lt;/code&gt;), and therefore allow more optimization to happen and
less and therefore faster code generated.&lt;/p&gt;
&lt;p&gt;Until this is done, what is actually going to happen is that while the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; result is known, Nuitka will assume control flow escape.&lt;/p&gt;
&lt;p&gt;And speaking of that, I think this puts too many variables to a too
unknown state. You can to distrust all values, but not the types in this
case, so that could be better, but right now it is not. Something else
to look into.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="overall"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id17" role="doc-backlink"&gt;Overall&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;So 0.6.1 is in full swing in terms of optimization. All these ends need
a completion, and then I can expect to use advantage of things in a
loop, and ultimately to generate C performance code for one example of
loop. esp. if we add a C &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; target type, which currently isn’t yet
started, because I think it would barely be used yet.&lt;/p&gt;
&lt;p&gt;But we are getting there and I wouldn’t even say we are making small
steps, this is all just work to be completed, nothing fundamental about
it. But it may take more than one release for sure.&lt;/p&gt;
&lt;p&gt;Mind you, there is not only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt;, there is also &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;%&lt;/span&gt;&lt;/code&gt;,
and many more operators, all of them will require work. Granted, loop
variables tend to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; more often, but any un-optimized operation
will immediately loose a lot of type knowledge.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="improved-annotations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id18" role="doc-backlink"&gt;Improved Annotations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There are two kinds of annotations, ones for classes and modules, which
actually are stored in a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__annotations__&lt;/span&gt;&lt;/code&gt; variable, and everything
else is mostly just ignored.&lt;/p&gt;
&lt;p&gt;So Nuitka got the criterion wrong, and did one thing for functions, and
the other for everything else. So that annotations in generators,
coroutines and asyncgen ended up with wrong, crashing, and slower code,
due to it updating the module &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__annotations__&lt;/span&gt;&lt;/code&gt;, so that one is
important too if you have to do those.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="release-or-not"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id19" role="doc-backlink"&gt;Release or not&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To release or not. There is at least one bug about star imports that
affects numpy that is solved in develop, and wasn’t back ported, and I
was thinking it only applies to develop, but in fact does to stable. It
makes me want to release even before all these optimization things
happen and are polished, and I might well decide to go with that.&lt;/p&gt;
&lt;p&gt;Maybe I only add the closure in-place stuff and the polish the loop SSA
stuff, and then call it a release. It already will solve a lot of
performance issues that exist right now, while staging the ground for
more.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="standalone-improvements"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id20" role="doc-backlink"&gt;Standalone Improvements&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Standalone work is also improving. Using pyi files got more apt, and a
few things were added, all of which make sense to be used by people.&lt;/p&gt;
&lt;p&gt;But I also have a backlog of issues there however. I will schedule one
sprint for those I guess, where I focus on these. I am neglecting those
somewhat recently.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="caching-examined"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id21" role="doc-backlink"&gt;Caching Examined&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For the static code, I now noticed that it’s compiled for each target
name, due to the build directory being part of the object file for
debug. For gcc 8 there is an option to allow pointing at the original
static C file location, and then &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; is more effective, because
object files will be the same.&lt;/p&gt;
&lt;p&gt;That’s actually pretty bad, as most of my machines are on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc-6&lt;/span&gt;&lt;/code&gt; and
makes me think that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libnuitka.a&lt;/span&gt;&lt;/code&gt; is really more of an requirement
than ever. I might take some time to get this sorted out.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python3-deprecation-warnings"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id22" role="doc-backlink"&gt;Python3 deprecation warnings&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So Nuitka supports the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_warnings&lt;/span&gt;&lt;/code&gt; Python flag, and for a long time
I have been annoyed at how it was not working for Python3 in some cases.
The code was manually settign filters, but these would get overridden by
CPython test suites testing warnings. And the code said that there is no
CPython C-API to control it, which is just plain wrong.&lt;/p&gt;
&lt;p&gt;So I changed that and it became possible to remove lots of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ignore_stderr&lt;/span&gt;&lt;/code&gt; annotations in CPython test suites, and more
importantly, I can stop adding them for when running older/newer CPython
version with a suite.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id23" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I continue to be very active there.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.&lt;/p&gt;
&lt;p&gt;Adding Twitter more prominently to the web site is something that is
also going to happen.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id24" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-9.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very likely at least one &lt;em&gt;you&lt;/em&gt; can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id25" role="doc-backlink"&gt;Donations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to help, but cannot spend the time, please consider to
donate to Nuitka, and go here:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="/pages/donations.html"&gt;Donate to Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-9.html"/>
    <summary>Nuitka this week #9</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-10-20T06:17:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-8.html</id>
    <title>Nuitka this week #8</title>
    <updated>2018-10-02T06:05:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-8"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-8" id="id2"&gt;Nuitka this week #8&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#public-private-ci-workflow" id="id3"&gt;Public / Private CI / Workflow&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#workflow" id="id4"&gt;Workflow&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#hunting-bugs-with-bisect" id="id5"&gt;Hunting bugs with bisect&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#experimental-changes" id="id6"&gt;Experimental Changes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#hardware" id="id7"&gt;Hardware&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#milestone-release" id="id8"&gt;Milestone Release&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#ui-rework" id="id9"&gt;UI rework&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#benchmarks" id="id10"&gt;Benchmarks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#inplace-operations" id="id11"&gt;Inplace Operations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#new-use-cases" id="id12"&gt;New use cases&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#tcl-tk-standalone" id="id13"&gt;Tcl/Tk Standalone&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#caching-examined" id="id14"&gt;Caching Examined&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id15"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id16"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#plans" id="id17"&gt;Plans&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#donations" id="id18"&gt;Donations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="public-private-ci-workflow"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Public / Private CI / Workflow&lt;/a&gt;&lt;/h2&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;I wrote this as part of a discussion recently, and I think it makes
sense to share it here. This is a lot text though, feel free to skip
forward.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Indeed I have a private repo, where I push and only private CI picks up.
Based on Buildbot, I run many more compilations, basically around the
clock on all of my computers, to find regressions from new optimization
or codegen changes, and well UI changes too.&lt;/p&gt;
&lt;p&gt;Public CI offerings like Travis are not aimed at allowing this many
compilations. It will be a while before public cloud infrastructure will
be donated to Nuitka, although I see it happening some time in the
future. This leaves developers with the burden to run tests on their own
hardware, and never enough. Casual contributors will never be able to do
it themselves.&lt;/p&gt;
&lt;p&gt;My scope is running the CPython test suites on Windows and Linux. These
are the adapted 26, 27, 32, 33, 34, 35, 36, 37 suites, and also to get
even more errors covered, they are ran with mismatching Python versions,
so a lot of exceptions are raised. Often running the 36 tests with 37
and vice versa will extend the coverage, because of the exceptions being
raise.&lt;/p&gt;
&lt;p&gt;On Windows I compile with and without debug mode, x86 and x64, and it’s
kind of getting too much. For Linux I have 2 laptops in use, and an ARM
CuBox bought from your donations, there it’s working better, esp. due to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; being used everywhere, although recent investigations show
room for improvement there as well.&lt;/p&gt;
&lt;p&gt;For memory usage I still compile mercurial and observe the memory it
used in addition to comparing the mercurial tests to expected outputs
its test suite gives. It’s a sad day when Mercurial tests find changes
in behavior, and luckily that has been rare. Running the Mercurial test
suite gives some confidence in the thing not corrupting data it works
with without knowing.&lt;/p&gt;
&lt;p&gt;Caching the CPython outputs of tests to compare against is something I
am going to make operational these days, trying to make things ever
faster. There is no point to re-run tests with Python, just to get at
its output, which will typically not change at all.&lt;/p&gt;
&lt;p&gt;But for the time being, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache.exe&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache.exe&lt;/span&gt;&lt;/code&gt; seem to have
done wonders for Windows too, but I will want to investigate some more
to avoid unnecessary cache misses.&lt;/p&gt;
&lt;section id="workflow"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Workflow&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As for my workflow with Nuitka, I often tend to let some commits settle
in my private repo only until they become trusted. Other times I will
make bigger changes and put them out to factory immediately, because it
will be hard to split up the changes later, so putting them out makes it
easier.&lt;/p&gt;
&lt;p&gt;I am more conservative with factory right after telling people to try
something there. But also I break it on purpose, just trying out
something. I really consider it a private branch for interacting with me
or public CI. I do not recommend to use it, and it’s like a permanent
pull request of mine that is not ever going to be finished.&lt;/p&gt;
&lt;p&gt;Then on occasions I am making a sorting of all commits on factory and
split it into some things that become hotfixes, some things that become
current pre-release, and other things that will remain in that proving
ground. That is why I typically make hotfix and pre-release at the same
times. The git flow suggests doing that and it’s easy, so why not. As a
bonus, develop is then practically stable at nearly all times too, with
hardly any regressions.&lt;/p&gt;
&lt;p&gt;I do however normally not take things as hotfixes that are on develop
already, I hate the duplication of commits. Hotfixes must be small and
risk free, and easy to put out, when there is any risk, it definitely
will be on develop. Nuitka stable typically covers nearly all grounds
already. No panic needed to add missing stuff and break others.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hunting-bugs-with-bisect"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Hunting bugs with bisect&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For me the git bisect is very important. My private commit history is
basically a total mess and worthless, but on factory I am making very
nice organized commits that I will frequently amend, even for the random
PyLint cleanup. This allows me when e.g. one test suddenly says
“segfault” on Windows to easily find the change that triggers it, look
at C code difference, and spot the bug introduced, then amend the commit
and be done with it.&lt;/p&gt;
&lt;p&gt;It’s amazing how much time this can save. My goal is to always have a
workable state which is supposed to pass all tests. Obviously I cannot
prove it for every commit, but when I know it to not be the case, I tend
to make rebases. At times I have been tempted and followed up on
backward amending develop and even stable.&lt;/p&gt;
&lt;p&gt;I am doing that to be sure to have that bisect ability, but fortunately
it’s rare that kind of bug occurs, and I try not to do it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="experimental-changes"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Experimental Changes&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As with recent changes, I sometimes make changes with the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isExperimental()&lt;/span&gt;&lt;/code&gt; marker, activating breaking changes only gradually.
The C &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; type code generation has been there for months in a
barely useful form, until it became more polished, and always guarded
with a switch, until one day for 0.6 finally I changed it, and made the
necessary fixes retroactively before that switch, to make it work while
that was still in factory.&lt;/p&gt;
&lt;p&gt;Then I will remove the experimental code. I feel it’s very important and
even ideal to be able to always compare outputs to a fully working
solution. I am willing to postpone some cleanups until later date as a
price, but when then something in my mind tells me again “This cannot
possibly have ever worked”… a command line flag away, I have the
answer to compare, plus, that includes extra changes happened in the
meantime, they don’t add noise to diff outputs of generated C code for
example.&lt;/p&gt;
&lt;p&gt;Then looking at that diff, I can tell where the unwanted effect is, and
fix all the things, and that way find bugs much faster.&lt;/p&gt;
&lt;p&gt;Even better, if I decide to make a cleanup action as part of making a
change more viable to execute, then I get to execute it on stable
grounds, covered by the full test suite. I can complete that cleanup,
e.g. using variable identifier objects instead of mere strings was
needed to make “heap generators” more workable. But I was able to put
that one to active before “heap generators” was ever fully workable, and
complete it, and actually reap some of its benefits already.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hardware"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Hardware&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Obviously this takes a lot of hardware and CPU to be able to compile
this much Python code on a regular basis. And I really wish I could add
one of the new AMD Threadripper 2 to the mix. Anybody donating one to
me? Yes I know, I am only dreaming. But it would really help the cause.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="milestone-release"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Milestone Release&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So the 0.6 is out, and already a hotfix that addresses mostly use cases
of people that didn’t work. More people seemed to have tried out 0.6.0
and as a result 0.6.0.1 is going to cover a few corner cases. So far I
have not encountered a single regression of 0.6.0, but instead it
contained ones for 0.5.33 which did have one that was not easy to fix.&lt;/p&gt;
&lt;p&gt;So that went really smooth.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="ui-rework"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;UI rework&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The UI needs more work still. Specifically that packages do not
automatically include all stuff below them and have to be specified by
file path instead of by name, is really annoying to me.&lt;/p&gt;
&lt;p&gt;But I had delayed 0.6 for some UI work, and the quirks are to remain
some. I will work on these things eventually.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benchmarks"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Benchmarks&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So I updated the website to state that PyStone is now 312% faster, from
a number that was very old. I since then ran it with an updated version
for Python3, and it’s much less there. That is pretty sad.&lt;/p&gt;
&lt;p&gt;I will be looking into that for 0.6.1 release, or I will have to update
the wording to provide 2 numbers there, because it seems for Python3
performance with Nuitka it might be misleading.&lt;/p&gt;
&lt;p&gt;Something with unicode strings and in-place operations is driving me
crazy. Nuitka is apparently slower for that, and I can’t point where
that is happening exactly. It seems internally unicode objects are maybe
put into a different state from some operations, which then making
in-place extending in realloc fail more often, but I cannot know yet.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="inplace-operations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Inplace Operations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So more work has been put into those, adding more specialization, and
esp. also applying them for module variables as well. CPython can do
that, and actually is giving itself a hard time about it, and Nuitka
should be doing this much clever with its more static knowledge.&lt;/p&gt;
&lt;p&gt;But I cannot tell you how much scratching my head was wasted debugging
that. I was totally stupid about how I approached that, looking from the
final solution, it was always easy. Just not for me apparently.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="new-use-cases"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;New use cases&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Talked about those above. So the top level &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;logging&lt;/span&gt;&lt;/code&gt; module of your
own was working fine in accelerated mode, but for standalone it failed
and used the one from standard library instead. That kind of shadowing
happened because Nuitka was going from module objects to their names and
back to objects, which are bad in case of duplicates. That is fixed for
develop, and one of those risk cases, where it cannot be a hotfix
because it touched too much.&lt;/p&gt;
&lt;p&gt;Then pure Python3 packages need not have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__.py&lt;/span&gt;&lt;/code&gt; and so far that
was best working for sub-packages, but after 0.6.0.1 hotfix, now it will
also work for the main module you compile to be that empty.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="tcl-tk-standalone"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Tcl/Tk Standalone&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So instructions have been provided how to properly make that work for
Python standalone on Windows. I have yet to live up to my promise and
make Nuitka automatically include the necessary files. I hope to do it
for 0.6.1 though.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="caching-examined"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Caching Examined&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So I am looking at ccache on Linux right now, and found e.g. that it was
reporting that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gcc&lt;/span&gt; &lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; was called a lot at startup of Scons
and then &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;g++&lt;/span&gt; &lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; once. The later is particularly stupid,
because we are not going to use g++ normally, except if gcc is really
old and does not support C11. So in case a good one was found, lets
disable that version query and not do it.&lt;/p&gt;
&lt;p&gt;And for the gcc version output, monkey patching scons to a version of
getting that output that caches the result, removes those unnecessary
forks.&lt;/p&gt;
&lt;p&gt;So &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; is being called less frequently, and actually these
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; outputs appears to actually take measurable time. It’s not
dramatic, but &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; was apparently getting locks, and that’s worth
avoiding by itself.&lt;/p&gt;
&lt;p&gt;That said, the goal is for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache&lt;/span&gt;&lt;/code&gt; to make them both
report their effectiveness of cache usage after the end of a test suite
run. That way I am hoping to notice and be able to know, if caching is
used to its full effect.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I continue to be very active there. I put out a poll about the comment
system, and disabling Disqus comments as a result, I will focus on
Twitter for web site comments too now.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.&lt;/p&gt;
&lt;p&gt;Adding Twitter more prominently to the web site is something that is
also going to happen.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id16" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-8.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very likely at least one &lt;em&gt;you&lt;/em&gt; can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="plans"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id17" role="doc-backlink"&gt;Plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Working on the 0.6.1 release, attacking more in-place add operations as
a first goal, and now turning to binary operations, I am trying to shape
how using different helper functions to different object types looks
like. And to gain performance without C types. But ultimately the same
issue will arise there, what to do with mixed input types.&lt;/p&gt;
&lt;p&gt;My desire is for in-place operations to fully catch up with CPython, as
these can easily loose a lot of performance. Closure variables and their
cells are another target to pick on, and I feel they ought to be next
after module ones are now working, because also their solution ought to
be very similar. Then showing that depending on target storage, local,
closure, or module, is then faster in all cases would be a goal for the
0.6.1 release.&lt;/p&gt;
&lt;p&gt;This feels not too far away, but we will see. I am considering next
weekend for release.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id18" role="doc-backlink"&gt;Donations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to help, but cannot spend the time, please consider to
donate to Nuitka, and go here:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="/pages/donations.html"&gt;Donate to Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-8.html"/>
    <summary>Nuitka this week #8</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-10-02T06:05:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-060.html</id>
    <title>Nuitka Release 0.6.0</title>
    <updated>2018-09-27T18:24:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-6-0"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release adds massive improvements for optimization and a couple of
bug fixes.&lt;/p&gt;
&lt;p&gt;It also indicates reaching the mile stone of doing actual type
inference, even if only very limited.&lt;/p&gt;
&lt;p&gt;And with the new version numbers, lots of UI changes go along. The
options to control recursion into modules have all been renamed, some
now have different defaults, and finally the filenames output have
changed.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Fix, the awaiting flag was not removed for exceptions
thrown into a coroutine, so next time it appeared to be awaiting
instead of finished.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Classes in generators that were using built-in functions
crashed the compilation with C errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some regressions for XML outputs from previous changes were fixed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hasattr&lt;/span&gt;&lt;/code&gt; was not raising an exception if used with non-string
attributes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For really large compilations, MSVC linker could choke on the input
file, line length limits, which is now fixed for the inline copy of
Scons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Follow changed hidden dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5&lt;/span&gt;&lt;/code&gt; to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5.sip&lt;/span&gt;&lt;/code&gt; for newer versions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Include certificate file using by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requests&lt;/span&gt;&lt;/code&gt; module in
some cases as a data file.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Enabled C target type &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka_bool&lt;/span&gt;&lt;/code&gt; for variables that are stored
with boolean shape only, and generate C code for those&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using C target type &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka_bool&lt;/span&gt;&lt;/code&gt; many more expressions are now
handled better in conditions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt; to be C source type aware, so they can
be much faster for them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use C target type for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; built-in giving more efficient code
for some source values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Annotate the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt; result to have boolean type shape, allowing for
more compile time optimization with it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restored previously lost optimization of loop break handling
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; which makes loops much faster again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restore lost optimization of subscripts with constant integer values
making them faster again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize in-place operations for cases where left, right, or both
sides have known type shapes for some values. Initially only a few
variants were added, but there is more to come.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When adjacent parts of an f-string become known string constants,
join them at compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When there is only one remaining part in an f-string, use that
directly as the result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize empty f-strings directly into empty strings constant during
the tree building phase.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added specialized attribute check for use in re-formulations that
doesn’t expose exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove locals sync operation in scopes without local variables, e.g.
classes or modules, making &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; and the like slightly leaner
there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt; nodes that did only re-raise exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; of variables is now driven fully by C types and generates
more compatible code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed useless double exception exits annotated for expressions of
conditions and added code that allows conditions to adapt themselves
to the target shape bool during optimization.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.egg&lt;/span&gt;&lt;/code&gt; files in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt;, one of the
more rare uses, where Nuitka wasn’t yet compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Output binaries in standalone mode with platform suffix, on
non-Windows that means no suffix. In accelerated mode on non-Windows,
use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.bin&lt;/span&gt;&lt;/code&gt; as a suffix to avoid collision with files that have no
suffix.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: It’s now possible to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-cl.exe&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CC&lt;/span&gt;&lt;/code&gt; with
Nuitka as a third compiler on Windows, but it requires an existing
MSVC install to be used for resource compilation and linking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache.exe&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clcache.exe&lt;/span&gt;&lt;/code&gt;,
so that object files can now be cached for re-compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For debug mode, report missing in-place helpers. These kinds of
reports are to become more universal and are aimed at recognizing
missed optimization chances in Nuitka. This features is still in its
infancy. Subsequent releases will add more like these.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Disabled comments on the web site, we are going to use Twitter
instead, once the site is migrated to an updated Nikola.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The static C code is now formatted with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang-format&lt;/span&gt;&lt;/code&gt; to make it
easier for contributors to understand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved the construct runner to top level binary and use it from there,
with future changes coming that should make it generally useful
outside of Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced the issue template to tell people how to get the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt;
version of Nuitka to try it out.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added documentation for how use the object caching on Windows to the
User Manual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed the included GUI, originally intended for debugging, but XML
outputs are more powerful anyway, and it had been in disrepair for a
long time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed long deprecated options, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--exe&lt;/span&gt;&lt;/code&gt; which has long been
the default and is no more accepted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renamed options to include plugin files to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-plugin-directory&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-plugin-files&lt;/span&gt;&lt;/code&gt; for
more clarity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renamed options for recursion control to e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--follow-imports&lt;/span&gt;&lt;/code&gt; to
better express what they actually do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-version&lt;/span&gt;&lt;/code&gt; support for switching the version during
compilation. This has only worked for very specific circumstances and
has been deprecated for a while.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--code-gen-no-statement-lines&lt;/span&gt;&lt;/code&gt; support for not having line
numbers updated at run time. This has long been hidden and probably
would never gain all that much, while causing a lot of
incompatibilty.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved command line arguments to dedicated module, adding checks was
becoming too difficult.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved rich comparison helpers to a dedicated C file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dedicated binary and unary node bases for clearer distinction and
more efficient memory usage of unuary nodes. Unary operations also no
longer have in-place operation as an issue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Major cleanup of variable accesses, split up into multiple phases and
all including module variables being performed through C types, with
no special cases anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Partial cleanups of C type classes with code duplications, there is
much more to resolve though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The way &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; was performed is discouraged in the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;subprocess&lt;/span&gt;&lt;/code&gt; documentation, so use a variant that cannot block
instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code proving information about built-in names and values was using
not very portable constructs, and is now written in a way that PyPy
would also like.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; for basic operators test, removing test of some
Python2 only stuff, that is covered elsewhere.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added ability to cache output of CPython when comparing to it. This
is to allow CI tests to not execute the same code over and over, just
to get the same value to compare with. This is not enabled yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release marks a point, from which on performance improvements are
likely in every coming release. The C target types are a major
milestone. More C target types are in the work, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;void&lt;/span&gt;&lt;/code&gt; is coming
for expressions that are done, but not used, that is scheduled for the
next release.&lt;/p&gt;
&lt;p&gt;Although there will be a need to also adapt optimization to take full
advantage of it, progress should be quick from here. There is a lot of
ground to cover, with more C types to come, and all of them needing
specialized helpers. But as soon as e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; are covered,
many more programs are going to benefiting from this.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-060.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-09-27T18:24:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-7.html</id>
    <title>Nuitka this week #7</title>
    <updated>2018-09-22T11:05:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-7"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-7" id="id2"&gt;Nuitka this week #7&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-design-philosophy" id="id3"&gt;Nuitka Design Philosophy&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#ui-rework" id="id4"&gt;UI rework&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#goto-generators" id="id5"&gt;Goto Generators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#benchmarks" id="id6"&gt;Benchmarks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id7"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id8"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#egg-files-in-pythonpath" id="id9"&gt;Egg files in PYTHONPATH&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#certifi" id="id10"&gt;Certifi&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#compatibility-with-pkg-resources" id="id11"&gt;Compatibility with pkg_resources&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#plans" id="id12"&gt;Plans&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#donations" id="id13"&gt;Donations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="nuitka-design-philosophy"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Nuitka Design Philosophy&lt;/a&gt;&lt;/h2&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;I wrote this as part of a discussion recently, and I think it makes
sense to share my take on Nuitka and design. This is a lot text
though, feel free to skip forward.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The issue with Nuitka and design mainly for me is that the requirements
for many parts were and are largely unknown to me, until I actually
start to do it.&lt;/p&gt;
&lt;p&gt;My goto generators approach worked out as originally designed, and that
felt really cool for once, but the whole “C type” thing was a total
unknown to me, until it all magically took form.&lt;/p&gt;
&lt;p&gt;But rather I know it will evolve further if I go from “bool” (complete
and coming for 0.6.0) via “void” (should be complete already, but
enabling will happen only for 0.6.1 likely) to “int”, not sure how long
that will take.&lt;/p&gt;
&lt;p&gt;I really think Nuitka, unlike other software that I have designed, is
more of a prototype project that gradually turns more and more into the
real thing.&lt;/p&gt;
&lt;p&gt;I have literally spent &lt;em&gt;years&lt;/em&gt; to inject proper design in steps into the
optimization phase, what I call SSA, value tracing, and it is very much
there now. I am probably going to spend similar amounts of time, to
execute on applying type inference results to the code generation.&lt;/p&gt;
&lt;p&gt;So I turned that into something working with code strings to something
working with variable declaration objects knowing their type for the
goto generators, aiming at C types generally. All the while carrying the
full weight of passing every compatibility test there is.&lt;/p&gt;
&lt;p&gt;Then e.g. suddenly cleaning up module variables to no longer have their
special branch, but a pseudo C type, that makes them like everything
else. Great. But when I first introduced the new thing, I postponed
that, because I could sooner apply its benefits to some things and get
experience from it.&lt;/p&gt;
&lt;p&gt;While doing partial solutions, the design sometimes horribly degrades,
but only until some features can carry the full weight, and/or have been
explored to have their final form.&lt;/p&gt;
&lt;p&gt;Making a whole Nuitka design upfront and then executing it, would
instead give a very high probability of failing in the real world. I am
therefore applying the more agile approach, where I make things work
first. And then continue to work while I clean it up.&lt;/p&gt;
&lt;p&gt;For every feature I added, I actively go out, and change the thing, that
made it hard or even fail. Always. I think Nuitka is largely developed
by cleanups and refactoring. Goto generators were a fine example of
that, solving many of the issues by injecting variable declarations
objects into code generation, made it easy to indicate storage (heap or
object or stack) right there.&lt;/p&gt;
&lt;p&gt;That is not to say that Nuitka didn’t have the typical compiler design.
Like parsing inputs, optimizing a tree internally, producing outputs.
But that grand top level design only tells you the obvious things really
and is stolen anyway from knowing similar projects like gcc.&lt;/p&gt;
&lt;p&gt;There always were of course obvious designs for Nuitka, but that really
never was what anybody would consider to make a Python compiler hard.
But for actual compatibility of CPython, so many details were going to
require examination with no solutions known ahead of time.&lt;/p&gt;
&lt;p&gt;I guess, I am an extreme programmer, or agile, or however they call it
these days. At least for Nuitka. In my professional life, I have
designed software for ATC on the drawing board, then in paper, and then
in code, the design just worked, and got operational right after
completion, which is rare I can tell you.&lt;/p&gt;
&lt;p&gt;But maybe that is what keeps me exciting about Nuitka. How I need to go
beyond my abilities and stable ground to achieve it.&lt;/p&gt;
&lt;p&gt;But the complexity of Nuitka is so dramatically higher than anything I
ever did. It is doing a complicated, i.e. detail rich work, and then it
also is doing hard jobs where many things have to play together. And the
wish to have something working before it is completed, if it ever is,
makes things very different from projects I typically did.&lt;/p&gt;
&lt;p&gt;So the first version of Nuitka already had a use, and when I publicly
showed it first, was capable of handling most complex programs, and the
desire was to evolve gradually.&lt;/p&gt;
&lt;p&gt;I think I have described this elsewhere, but for large parts of the well
or bad designed solutions of Nuitka, there is reliable ways of
demonstrating it works correctly. Far better than I have ever
encountered. i believe it’s the main reason I managed to get this off
the ground is that. Having a test “oracle” is what makes Nuitka special,
i.e. comparing to existing implementations.&lt;/p&gt;
&lt;p&gt;Like a calculator can be tested comparing it to one of the many already
perfect ones out there. That again makes Nuitka relatively easy despite
the many details to get right, there is often an easy way to tell
correct from wrong.&lt;/p&gt;
&lt;p&gt;So for me, Nuitka is on the design level, something that goes through
many iterations, discovery, prototyping, and is actually really exciting
in that.&lt;/p&gt;
&lt;p&gt;Compilers typically are boring. But for Nuitka that is totally not the
case, because Python is not made for it. Well, that*s technically
untrue, lets say not for optimizing compilers, not for type inference,
etc.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="ui-rework"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;UI rework&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Following up on discussion on the mailing list, the user interface of
Nuitka will become more clear with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-*&lt;/span&gt;&lt;/code&gt; options and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--[no]follow-import*&lt;/span&gt;&lt;/code&gt; options that better express what is going to
happen.&lt;/p&gt;
&lt;p&gt;Also the default for following with extension modules is now precisely
what you say, as going beyond what you intend to deliver makes no sense
in the normal case.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="goto-generators"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Goto Generators&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Now release as 0.5.33 and there has been little regressions so far, but
the one found is only in the pre-release of 0.6.0 so use that instead if
you encounter a C compilation error.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benchmarks"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Benchmarks&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The performance regressions fixed for 0.6.0 impact &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pystone&lt;/span&gt;&lt;/code&gt; by a lot,
loops were slower, so were subscripts with constant integer indexes. It
is a pity these were introduced in previous releases during refactorings
without noticing.&lt;/p&gt;
&lt;p&gt;We should strive to have benchmarks with trends. Right now Nuitka
speedcenter cannot do it. Focus should definitely go to this. Like I
said, after 0.6.0 release, this will be a priority, to make them more
useful.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I continue to be active there. I just put out a poll about the comment
system, and disabling Disqus comments I will focus on Twitter for web
site comments too now.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-7.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very likely at least one &lt;em&gt;you&lt;/em&gt; can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="egg-files-in-pythonpath"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Egg files in PYTHONPATH&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is a relatively old issue that now got addressed. Basically these
should be loaded from for compilation. Nuitka now unpacks them to a
cache folder so it can read source code from them, so this apparently
rare use case works now, yet again improving compatibility.&lt;/p&gt;
&lt;p&gt;Will be there for 0.6.0 release.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="certifi"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Certifi&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Seems request module sometimes uses that. Nuitka now includes that data
file starting with 0.6.0 release.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="compatibility-with-pkg-resources"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Compatibility with pkg_resources&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It seems that getting “distributions” and taking versions from there, is
really a thing, and Nuitka fails pkg_resources requirement checks in
standalone mode at least, and that is of course sad.&lt;/p&gt;
&lt;p&gt;I am currently researching how to fix that, not sure yet how to do it.
But some forms of Python installs are apparently very affected by it. I
try looking into its data gathering, maybe compiled modules can be
registered there too. It seems to be based on file system scans of its
own makings, but there is always a monkey patch possible to make it
better.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="plans"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Still working on the 0.6.0 release, cleaning up open ends only. Release
tests seem to be pretty good looking. The UI changes and stuff are a
good time to be done now, but delay things, and there is a bunch of
small things that are low hanging fruits while I wait for test results.&lt;/p&gt;
&lt;p&gt;But since it fixes so many performance things, it really ought to be out
any day now.&lt;/p&gt;
&lt;p&gt;Also the in-place operations stuff, I added it to 0.6.0 too, just
because it feels very nice, and improves some operations by a lot too.
Initially I had made a cut for 0.6.1 already, but that is no more.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Donations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to help, but cannot spend the time, please consider to
donate to Nuitka, and go here:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="/pages/donations.html"&gt;Donate to Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-7.html"/>
    <summary>Nuitka this week #7</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-09-22T11:05:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0533.html</id>
    <title>Nuitka Release 0.5.33</title>
    <updated>2018-09-14T19:54:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-33"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a bunch of fixes, most of which were previously
released as part of hotfixes, and important new optimization for
generators.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, nested functions with local classes using outside function
closure variables were not registering their usage, which could lead
to errors at C compile time. Fixed in 0.5.32.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, usage of built-in calls in a class level could crash the
compiler if a class variable was updated with its result. Fixed in
0.5.32.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python 3.7: The handling of non-type bases classes was not fully
compatible and wrong usages were giving &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AttributeError&lt;/span&gt;&lt;/code&gt; instead of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TypeError&lt;/span&gt;&lt;/code&gt;. Fixed in 0.5.32.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python 3.5: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;await&lt;/span&gt;&lt;/code&gt; expressions didn’t annotate their
exception exit. Fixed in 0.5.32.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;enum&lt;/span&gt;&lt;/code&gt; module usages with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt; in derived
classes were not working, due to our automatic &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt;
decoration. Turns out, that was only needed for Python2 and can be
removed, making enum work all the way. Fixed in 0.5.32.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, recursion into &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt; was done and could lead to compiler
crashes if the main module was named like that. This is not
prevented. Fixed in 0.5.32.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: The name for list contraction’s frames was wrong all along
and not just changed for 3.7, so drop that version check on it. Fixed
in 0.5.32.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the hashing of code objects has creating a key that could
produce more overlaps for the hash than necessary. Using a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;C1&lt;/span&gt;&lt;/code&gt; on
line 29 and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;C&lt;/span&gt;&lt;/code&gt; on line 129, was considered the same. And that is
what actually happened. Fixed in 0.5.32.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Various fixes for newer Xcode versions to work as well. Fixed
in 0.5.32.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, the default &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__annotations__&lt;/span&gt;&lt;/code&gt; was the empty dict and
could be modified, leading to severe corruption potentially. Fixed in
0.5.32.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: When an exception is thrown into a generator that currently
does a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; is not to be normalized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Some exception handling cases of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; were leaking
references to objects. Fixed in 0.5.32.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Nested namespace packages were not working unless the
directory continued to exist on disk. Fixed in 0.5.32.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;icuuc.dll&lt;/span&gt;&lt;/code&gt; which is a system DLL. Fixed
in 0.5.32.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added hidden dependency of newer version of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sip&lt;/span&gt;&lt;/code&gt;.
Fixed in 0.5.32.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not copy file permissions of DLLs and extension
modules as that makes deleting and modifying them only harder. Fixed
in 0.5.32.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The multiprocessing plugin was not always properly patching
the run time for all module loads, made it more robust. Fixed in
0.5.32.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not preserve permissions of copied DLLs, which can
cause issues with read-only files on Windows when later trying to
overwrite or remove files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: Make sure to disconnect finished generators from their
frames to avoid potential data corruption. Fixed in 0.5.32.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Make sure to disconnect finished coroutines from their
frames to avoid potential data corruption. Fixed in 0.5.32.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Make sure to disconnect finished asyncgen from their
frames to avoid potential data corruption. Fixed in 0.5.32.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Explicit frame closes of frames owned by coroutines could
corrupt data. Fixed in 0.5.32.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Explicit frame closes of frames owned by asyncgen could
corrupt data. Fixed in 0.5.32.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python 3.4: Fix threaded imports by properly handling
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_initializing&lt;/span&gt;&lt;/code&gt; in compiled modules &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; attributes. Before
it happen that another thread attempts to use an unfinished module.
Fixed in 0.5.32.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the options &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; were
present but not visible in the help output. Fixed in 0.5.32.8
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The multiprocessing plugin failed to properly pass compiled
functions. Fixed in 0.5.32.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, optimization for in-place operations on mapping values
are not allowed and had to be disabled. Fixed in 0.5.32.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python 3.5: Fixed exception handling with coroutines and asyncgen
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw&lt;/span&gt;&lt;/code&gt; to not corrupt exception objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python 3.7: Added more checks to class creations that were missing
for full compatibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Smarter hashing of unicode values avoids increased memory
usage from cached converted forms in debug mode.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The issue tracker on GitHub is now the one that should be used with
Nuitka, winning due to easier issue templating and integration with
pull requests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Document the threading model and exception model to use for MinGW64.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;enum&lt;/span&gt;&lt;/code&gt; plug-in which is no longer useful after the
improvements to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; handling for Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Python 3.7 testing for Travis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make it clear in the documentation that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyenv&lt;/span&gt;&lt;/code&gt; is not supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The version output includes more information now, OS and
architecture, so issue reports should contain that now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On PyPI we didn’t yet indicated Python 3.7 as supported, which it of
course is.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for MiniConda Python.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Using goto based generators that return from execution and resume
based on heap storage. This makes tests using generators twice as
fast and they no longer use a full C stack of 2MB, but only 1K
instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conditional &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;if&lt;/span&gt; &lt;span class="pre"&gt;cond&lt;/span&gt; &lt;span class="pre"&gt;else&lt;/span&gt; &lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;and&lt;/span&gt; &lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;or&lt;/span&gt; &lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt; expressions
of which the result value is are now transformed into conditional
statements allowing to apply further optimizations to the right and
left side expressions as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Replace unused function creations with side effects from their
default values with just those, removing more unused code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Put all statement related code and declarations for it in a dedicated
C block, making things slightly more easy for the C compiler to reuse
the stack space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid linking against &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;libpython&lt;/span&gt;&lt;/code&gt; in module mode on everything but
Windows where it is really needed. No longer check for static Python,
not needed anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More compact function, generator, and asyncgen creation code for the
normal cases, avoid qualname if identical to name for all of them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2 class dictionaries are now indeed directly optimized, giving
more compact code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module exception exits and thus its frames have become optional
allowing to avoid some code for some special modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uncompiled generator integration was backported to 3.4 as well,
improving compatibility and speed there as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Frame object and their cache declarations are now handled by the way
of allocated variable descriptions, avoid special handling for them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The interface to “forget” a temporary variable has been replaced with
a new method that skips a number for it. This is done to keep
expression use the same indexes for all their child expressions, but
this is more explicit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instead of passing around C variables names for temporary values, we
now have full descriptions, with C type, code name, storage location,
and the init value to use. This makes the information more
immediately available where it is needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variable declarations are now created when needed and stored in
dedicated variable storage objects, which then in can generate the
code as necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module code generation has been enhanced to be closer to the pattern
used by functions, generators, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now only one spot that creates variable declaration, instead
of previous code duplications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code objects are now attached to functions, generators, coroutines,
and asyncgen bodies, and not anymore to the creation of these
objects. This allows for simpler code generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed fiber implementations, no more needed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Finally the asyncgen tests can be enabled in the CPython 3.6 test
suite as the corrupting crash has been identified.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover ever more cases of spurious permission problems on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added the ability to specify specific modules a comparison test
should recurse to, making some CPython tests follow into modules
where actual test code lives.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is huge in many ways.&lt;/p&gt;
&lt;p&gt;First, finishing “goto generators” clears an old scalability problem of
Nuitka that needed to be addressed. No more do
generators/coroutines/asyncgen consume too much memory, but instead they
become as lightweight as they ought to be.&lt;/p&gt;
&lt;p&gt;Second, the use of variable declarations carying type information all
through the code generation, is an important pre-condition for “C types”
work to resume and become possible, what will be 0.6.0 and the next
release.&lt;/p&gt;
&lt;p&gt;Third, the improved generator performance will be removing a lot of
cases, where Nuitka wasn’t as fast, as its current state not using “C
types” yet, should allow. It is now consistently faster than CPython for
everything related to generators.&lt;/p&gt;
&lt;p&gt;Fourth, the fibers were a burden for the debugging and linking of Nuitka
on various platforms, as they provided deprecated interfaces or not. As
they are now gone, Nuitka ought to definitely work on any platform where
Python works.&lt;/p&gt;
&lt;p&gt;From here on, C types work can take it, and produce the results we are
waiting for in the next major release cycle that is about to start.&lt;/p&gt;
&lt;p&gt;Also the amount of fixes for this release has been incredibly high. Lots
of old bugs esp. for coroutines and asyncgen have been fixed, this is
not only faster, but way more correct. Mainly due to the easier
debugging and interface to the context code, bugs were far easier to
avoid and/or find.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0533.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-09-14T19:54:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-6.html</id>
    <title>Nuitka this week #6</title>
    <updated>2018-09-12T12:05:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-6"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-6" id="id2"&gt;Nuitka this week #6&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#holiday" id="id3"&gt;Holiday&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#bool" id="id4"&gt;bool&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#void" id="id5"&gt;void&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#module-var" id="id6"&gt;module_var&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#goto-generators" id="id7"&gt;Goto Generators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#benchmarks" id="id8"&gt;Benchmarks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id9"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#poll-on-executable-names" id="id10"&gt;Poll on Executable Names&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#hotfixes" id="id11"&gt;Hotfixes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id12"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#plans" id="id13"&gt;Plans&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#donations" id="id14"&gt;Donations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="holiday"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Holiday&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In my 2 weeks holiday, I indeed focused on a really big thing, and got
more done that I had hoped for. For C types, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka_bool&lt;/span&gt;&lt;/code&gt;, which is a
tri-state boolean with true, false and unassigned, can be used for some
variables, and executes some operations without going through objects
anymore.&lt;/p&gt;
&lt;section id="bool"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;bool&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Condition codes are no longer special. They all need a boolean value
from the expression used as a condition, and there was a special paths
for some popular expressions for conditions, but of course not all. That
is now a universal thing, conditional statement/expressions will now
simply ask to provide a temp variable of value &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka_bool&lt;/span&gt;&lt;/code&gt; and then
code generation handles it.&lt;/p&gt;
&lt;p&gt;For where it is used, code gets a lot lighter, and of course faster,
although I didn’t measure it yet. Going to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_True&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_False&lt;/span&gt;&lt;/code&gt; and
comparing with it, wasn’t that optimal, and it’s nice this is now so
much cleaner as a side effect of that C bool work.&lt;/p&gt;
&lt;p&gt;This seems to be so good, that actually it’s the default for this to be
used in 0.6.0, and that itself is a major break through. Not so much for
actual performance, but for structure. Other C types are going to follow
soon and will give massive performance gains.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="void"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;void&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;And what was really good, is that not only did I get &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; to work
almost perfectly, I also started work on the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;void&lt;/span&gt;&lt;/code&gt; C target type and
finished that after my return from holiday last weekend, which lead to
new optimization that I am putting in the 0.5.33 release that is coming
soon, even before the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;void&lt;/span&gt;&lt;/code&gt; code generation is out.&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;void&lt;/span&gt;&lt;/code&gt; C type cannot read values back, and unused values should
not be used, so this gives errors for cases where that becomes obvious.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Consider this expression. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; expression, that one is going to
producing a value, which is then released, but not used otherwise. New
optimzation creates a conditional statement out of it, which takes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt;
as the condition and if not true, then evaluates &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt; but ignores it.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;void&lt;/span&gt;&lt;/code&gt; evaluation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt; can then do further optimization for
it.&lt;/p&gt;
&lt;p&gt;Void code generation can therefore highlight missed opportunities for
this kid of optimization, and found a couple of these. That is why I was
going for it, and I feel it pays off. Code generation checking
optimization here, is a really nice synergy between the two.&lt;/p&gt;
&lt;p&gt;Plus I got all the tests to work with it, and solved the missing
optimizations it found very easily. And instead of allocating an object
now, not assigning is often creating more obvious code. And that too
allowed me to find a couple of bugs by C compiler warnings.&lt;/p&gt;
&lt;p&gt;Obviously I will want to run a compile all the world test before making
it the default, which is why this will probably become part of 0.6.1 to
be the default.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="module-var"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;module_var&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Previously variable codes were making a hard distinction for module
variables and make them use their own helper codes. Now this is
encapsulated in a normal C type class like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka_bool&lt;/span&gt;&lt;/code&gt;, or the one
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; variables, and integrates smoothly, and even got
better. A sign things are going smooth.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="goto-generators"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Goto Generators&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Still not released. I delayed it after my holiday, and due to the heap
generator change, after stabilizing the C types work, I want to first
finish a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tests/library/compile_python_module.py&lt;/span&gt; &lt;span class="pre"&gt;resume&lt;/span&gt;&lt;/code&gt; run, which
will for a Anaconda3 compile all the code found in there.&lt;/p&gt;
&lt;p&gt;Right now it’s still doing that, and even found a few bugs. The heap
storage can still cause issues, as can changes to cloning nodes, which
happens for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt; nodes and their &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; blocks.&lt;/p&gt;
&lt;p&gt;This should finish these days. I looked at performance numbers and found
that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt; is indeed only faster, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;factory&lt;/span&gt;&lt;/code&gt; due to even more
optimization will be yet faster, and often noteworthy.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benchmarks"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Benchmarks&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Speedcenter of Nuitka is what I use right now, but it’s only showing
the state of 3 branches and compared to CPython, not as much historical
information. Also the organization of tests is poor. At least there is
tags for what improved.&lt;/p&gt;
&lt;p&gt;After release of Nuitka 0.6.0 I will show more numbers, and I will start
to focus on making it easier to understand. Therefore no link right now,
google if you are so keen. ;-)&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;During the holiday sprint, and even after, I am going to Tweet a lot
about what is going on for Nuitka. So follow me on twitter if you like,
I will post important stuff as it happens there:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="poll-on-executable-names"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Poll on Executable Names&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So I put e.g. poll up on Twitter, which is now over. But it made me
implement a new scheme, due to &lt;a class="reference external" href="https://twitter.com/KayHayen/status/1037591355319640065"&gt;popular consensus&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hotfixes"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Hotfixes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Even more hotfixes. I even did 2 during my holiday, however packages
built only later.&lt;/p&gt;
&lt;p&gt;Threaded imports on 3.4 or higher of modules were not using the locking
they should use. Multiprocessing on Windows with Python3 had even more
problems, and the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; were
present, but not working.&lt;/p&gt;
&lt;p&gt;That last one was actually very strange. I had added a new option group
for them, but not added it to the parser. Result: Option works. Just
does not show up in help output. Really?&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-6.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very like one you can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="plans"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Working down the release backlog. Things should be out. I am already
working on what should become 0.6.1, but it’s not yet 0.5.33 released.
Not a big deal, but 0.6.0 has 2 really important fixes for performance
regressions that have happened in the past. One is for loops, making
that faster is probably like the most important one. The other for
constant indexing, probably also very important. Very much measurable in
pystone at least.&lt;/p&gt;
&lt;p&gt;In the mean time, I am preparing to get &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; working as a target C
type, so e.g. comparisons of such values could be done in pure C, or
relatively pure C.&lt;/p&gt;
&lt;p&gt;Also, I noticed that e.g. in-place operations can be way more optimized
and did stuff for 0.6.1 already in this domain. That is unrelated to C
type work, but kind of follows a similar route maybe. How to compare
mixed types we know of, or one type only. That kind of things needs
ideas and experiments.&lt;/p&gt;
&lt;p&gt;Having &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; supported should help getting some functions to C speeds,
or at least much closer to it. That will make noticeable effects in many
of the benchmarks. More C types will then follow one by one.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Donations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to help, but cannot spend the time, please consider to
donate to Nuitka, and go here:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="/pages/donations.html"&gt;Donate to Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-6.html"/>
    <summary>Nuitka this week #6</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-09-12T12:05:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-5.html</id>
    <title>Nuitka this week #5</title>
    <updated>2018-08-24T12:55:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-5"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-5" id="id2"&gt;Nuitka this week #5&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#goto-generators" id="id3"&gt;Goto Generators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#benchmarks" id="id4"&gt;Benchmarks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#holiday" id="id5"&gt;Holiday&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#static-compilation" id="id6"&gt;Static Compilation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id7"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#hotfixes" id="id8"&gt;Hotfixes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#bug-tracker" id="id9"&gt;Bug Tracker&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#issue-backlog" id="id10"&gt;Issue Backlog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#help-wanted" id="id11"&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#plans" id="id12"&gt;Plans&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#donations" id="id13"&gt;Donations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="goto-generators"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Goto Generators&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Finished. Done. Finally.&lt;/p&gt;
&lt;p&gt;Benchmarking was exciting. One program benchmark I had run in the past,
was twice as fast than before, showing that the new implementation is
indeed much faster, which is fantastic news.&lt;/p&gt;
&lt;p&gt;Creating generator expressions and using them both got substantially
faster and that is great.&lt;/p&gt;
&lt;p&gt;It took me a fair amount of time to debug coroutines and asyncgen based
on the new goto implementation. But the result is really good, and a
fair amount of old bugs have been fixed. There always had been a
segfault with asyncgen test that now has been eradicated.&lt;/p&gt;
&lt;p&gt;One major observation is now, with only one C stack, debugging got a lot
easier before, where context switches left much of the program state not
reachable.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benchmarks"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Benchmarks&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Posted this one Twitter already:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://speedcenter.nuitka.net/constructs/construct-builtinsumwithgenerator.html"&gt;Nuitka Speedcenter Builtin sum with generator&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That one construct test has been a problem child, where Nuitka was
slower than CPython 2.x, and very little faster than 3.x, and now with
goto generators finally has become consistently faster.&lt;/p&gt;
&lt;p&gt;I will explain what you see there in the next issue. The short version
is that there is code, in which for one run, one line is used, and in
another the other line is used, and then the “construct” is measure that
way, by making the delta of the two. That construct performance is then
compared between Python and Nuitka.&lt;/p&gt;
&lt;p&gt;So if e.g. Nuitka is already better at looping, that won’t influence the
number of making that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sum&lt;/span&gt;&lt;/code&gt; call with a generator expression.&lt;/p&gt;
&lt;p&gt;The alternative line uses the generator expression, to make sure the
construction time is not counted. To measure that, there is another
construct test, that just creates it.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://speedcenter.nuitka.net/constructs/construct-generatorexpressioncreation.html"&gt;Nuitka Speedcenter Generator Expression Creation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This one shows that stable Nuitka was already faster at creating them,
but that the develop version got even faster again. As creating
generator objects became more lightweight, that is also news.&lt;/p&gt;
&lt;p&gt;There are constructs for many parts of Python, to shed a light on how
Nuitka fares for that particular one.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="holiday"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Holiday&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In my 2 weeks holiday, I will try and focus on the next big thing, C
types, something also started in the past, and where recent changes as
part of the heap storage, should make it really a lot easier to get it
finished. In fact I don’t know right now, why my &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; experimental
work shouldn’t just prove to be workable.&lt;/p&gt;
&lt;p&gt;I am not going to post a TWN issue next week, mostly because my home
servers won’t be running, and the static site is rendered on one of
them. Of course that would be movable, but I won’t bother.&lt;/p&gt;
&lt;p&gt;I am going to post a lot on Twitter though.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="static-compilation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Static Compilation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is a GitHub issue where I describe how pyenv on macOS ought to be
possible to use, and indeed, a brave soul has confirmed and even
provided the concrete commands. All it takes now is somebody to fit this
into the existing caching mechanism of Nuitka and to make sure the
static library is properly patched to work with these commands.&lt;/p&gt;
&lt;p&gt;Now is anyone of you going to create the code that will solve it for
good?&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Follow me on twitter if you like, I will post important stuff as it
happens there:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And lets not forget, having followers make me happy. So do re-tweets.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hotfixes"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Hotfixes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And there have been yet again more hotfixes. Some are about coroutine
and asyncgen corruptions for closes of frames. Multiprocessing plugin on
Windows will work in all cases now.&lt;/p&gt;
&lt;p&gt;Noteworthy was that the “0.5.32.6” was having a git merge problem on the
cherry-pick that git didn’t tell me about, leading to crashes. That made
it necessary to push an update right after. I was confused that I didn’t
get a conflict, because there was one. But I am to blame for not
checking the actual diff.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="bug-tracker"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Bug Tracker&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The next release will make GitHub the official tracker for Nuitka
issues. I am working down the issues on the old tracker. The web site
already pointed users there for a while, and I was set on this for some
time, but yesterday I focused on taking action.&lt;/p&gt;
&lt;p&gt;Basically what won me over is the easier templating of issues and pull
requests that would have been possible with Roundup, but never happened.
Also the OpenID integration that bugs.python.org has, never became
available to me in a ready usable form.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="issue-backlog"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Issue Backlog&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Finishing goto “generators allowed” for around 10 issues to be closed
alone, and I went over things, and checked out some stale issues, to see
if they are dealt with, or pinging authors. I spent like half a day on
this, bring down the issue count by a lot. Tedious work, but must be
done too.&lt;/p&gt;
&lt;p&gt;Also my inbox got a fair amount of cleanup, lots of issues pile up
there, and from time to time, I do this, to get things straight. I
raised issues for 2 things, that I won’t be doing immediately.&lt;/p&gt;
&lt;p&gt;But actually as issues go, there really very little problematic stuff
open right now, and nothing important really. I would almost call it
issue clean.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="help-wanted"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Help Wanted&lt;/a&gt;&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-this-week-5.rst&lt;/span&gt;, line 7); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “help wanted”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;If you are interested, I am tagging issues &lt;a class="reference external" href="https://github.com/kayhayen/Nuitka/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22"&gt;help wanted&lt;/a&gt;
and there is a bunch, and very like one you can help with.&lt;/p&gt;
&lt;p&gt;Nuitka definitely needs more people to work on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="plans"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The goto generator work could be released, but I want to make the
compile all the world test before I do so. It is running right now, but
I will not complete before I leave. Also I do not want to get regression
reports in my holiday, and goto generators along with heap storage, mean
there could be some.&lt;/p&gt;
&lt;p&gt;I am going to work on C types now. There is a few closing down actions
on what I observed doing goto generators. There are a few easy ways to
get even slightly better performance, definitely smaller code out of
generators. Not sure if I go there first, or for the C types work
directly. I often like to get these kind of observations dealt with more
immediately, but I don’t want to spend too much quality time on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Donations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As I have been asked this, yes, you can donate to Nuitka if you wish to
further its development. Go here:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="/pages/donations.html"&gt;Donate to Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-5.html"/>
    <summary>Nuitka this week #5</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-08-24T12:55:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-4.html</id>
    <title>Nuitka this week #4</title>
    <updated>2018-08-17T14:55:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-4"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-4" id="id1"&gt;Nuitka this week #4&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#goto-generators" id="id2"&gt;Goto Generators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#tox-plugin" id="id3"&gt;Tox Plugin&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id4"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#hotfixes" id="id5"&gt;Hotfixes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#plans" id="id6"&gt;Plans&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="goto-generators"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;Goto Generators&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This continues &lt;a class="reference external" href="./nuitka-this-week-3.html#goto-generators"&gt;TWN #3&lt;/a&gt;
where I explained what is all about.&lt;/p&gt;
&lt;p&gt;Good news is, at the time Python2 generators were largely working with
the new ways, in the mean time not only did all of the Python 2.7 test
suite pass with goto generators, also did the Python 3.4 test suite,
i.e. also the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; is working with it.&lt;/p&gt;
&lt;p&gt;The way it was done is to set &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;m_yieldfrom&lt;/span&gt;&lt;/code&gt; in generators, and then to
enter a state, where the code will only be resumed, when that
sub-generator that currently it is yielding from, is finished. That
makes it very much like normal yield. In fact, code generation is hardly
different there.&lt;/p&gt;
&lt;p&gt;Since the whole purpose is to get rid of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;make/get/setcontext&lt;/span&gt;&lt;/code&gt;, the
next stop is coroutines. They have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt; &lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt; &lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;await&lt;/span&gt;&lt;/code&gt; but at the end of the day, the implementation comes down to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; really with only a lot of sugar applied.&lt;/p&gt;
&lt;p&gt;Right now, I am debugging “goto coroutines”. It’s hard to tell when it
will be finished, and then &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncgen&lt;/span&gt;&lt;/code&gt; will be waiting still.&lt;/p&gt;
&lt;p&gt;This is easily the largest change in a long time, esp. due to the heap
storage changes that I already discussed. One this is finished, I expect
to turn towards C types with relative ease.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="tox-plugin"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Tox Plugin&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Anthony Shaw took on Tox and Nuitka and created a plugin that allows
using Nuitka. I am still wrapping my head around these things. It’s only
a proof of concept yet. I will give it more coverage in the future.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Follow me on twitter if you like, I will:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hotfixes"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Hotfixes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So there have even more hotfixes. One addresses memory leaks found with
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; while I was adding tests. Usually if I encounter an
old issue that has a small fix, that is what I do, push out a hotfix
using the git flow model. Also nested namespace packages for Python3,
those are the ones without a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__.py&lt;/span&gt;&lt;/code&gt; were not working after the
original directory was removed, and that got fixed.&lt;/p&gt;
&lt;p&gt;And right now, I have hotfixes for frames &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;close&lt;/span&gt;&lt;/code&gt; method, which
apparently was never updated to work properly for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;coroutines&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncgen&lt;/span&gt;&lt;/code&gt;. That is going to be in the next hotfix.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="plans"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So the heap storage seems pretty complete now, and goto generators are
on the final stretch. As always, things feel right around the corner.
But it’s unclear how much longer I will have to debug. I am pretty sure
the bare work of doing asyncgen is going to be low. Debugging that too
then, that is the hard part.&lt;/p&gt;
&lt;p&gt;A new release seems justified, but I kind of do not want to make it
without that major new code used. Because apparently during the
debugging, I tend to find issues that need hotfixes, so I will wait for
the goto generator work to finish.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-4.html"/>
    <summary>Nuitka this week #4</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-08-17T14:55:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-3.html</id>
    <title>Nuitka this week #3</title>
    <updated>2018-08-11T11:58:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-3"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-3" id="id1"&gt;Nuitka this week #3&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#new-series-rationale" id="id2"&gt;New Series Rationale&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id3"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#goto-generators" id="id4"&gt;Goto Generators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#hotfixes" id="id5"&gt;Hotfixes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#plans" id="id6"&gt;Plans&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="new-series-rationale"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;New Series Rationale&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is working out well so far. I think driving more attention at the
things that are going on can only be good. Also to explain will always
help. It also kind of motivates me a bit.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Also as part of my communications offensive, I am using my Twitter
account more regularly. I used to highlight important fixes, or
occasionally releases of some importance there. I will continue to do
only important stuff there, but with more regularity.&lt;/p&gt;
&lt;p&gt;And I noticed in the past, even when I do not post, followers makes me
happy. So here you go:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://twitter.com/kayhayen?ref_src=twsrc%5Etfw"&gt;Follow &amp;#64;kayhayen&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;section id="goto-generators"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Goto Generators&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This continues &lt;a class="reference external" href="./nuitka-this-week-2.html#goto-generators"&gt;TWN #2&lt;/a&gt;
where I promised to speak more of it, and this is the main focus of my
work on Nuitka right now.&lt;/p&gt;
&lt;p&gt;Brief summary, context switches were how this was initially implemented.
The main reason being that for C++ there never was going to be a way to
save and restore state in the middle of an expression that involves
constructors and destructors.&lt;/p&gt;
&lt;p&gt;Fast forward some years, and C-ish entered the picture. No objects are
used anymore, and Nuitka is purely C11 now, which has convenience of
C++, but no objects. Instead &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;goto&lt;/span&gt;&lt;/code&gt; is used a lot already. So every
time an exception occurs, a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;goto&lt;/span&gt;&lt;/code&gt; is done, every time a branch is
done, a loop exit or continue, you get it, another &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;goto&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;But so far, all Python level variables of a frame live on that C stack
still, and the context switch is done with functions that swap stack.
That is fast, but the imporant drawback is that it takes more memory.
How deep of a stack will we need? And we can use really many, if you
imagine a pool of 1000 coroutines, that quickly become impossible to
deal with.&lt;/p&gt;
&lt;p&gt;So, the new way of doing this basically goes like this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;g&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This was some far becoming something along this lines:&lt;/p&gt;
&lt;div class="highlight-c notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;PyObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nf"&gt;impl_g&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NuitkaGenerator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;YIELD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;const_int_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;YIELD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;const_int_2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;PyErr_SetException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;StopIteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;YIELD&lt;/span&gt;&lt;/code&gt; in there was basically doing the switching of the stacks
and for the C code, it looked like a normal function call.&lt;/p&gt;
&lt;p&gt;In the new approach, this is done:&lt;/p&gt;
&lt;div class="highlight-c notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;PyObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nf"&gt;impl_g&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NuitkaGenerator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m_resume_point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resume_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resume_2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m_yielded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;const_int_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;resume_point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nl"&gt;resume_1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;m_yielded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;const_int_2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;resume_point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nl"&gt;resume_2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;PyErr_SetException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;StopIteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;As you can see, the function has an initial dispatcher. Resume point 0
means we are starting at the top. Then every &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt;&lt;/code&gt; results in a
function return with an updated resume point.&lt;/p&gt;
&lt;p&gt;I experimented with this actually a long time ago, and experimental code
was the result that remained in Nuitka. The problem left to solve was to
store the variables that would normally live on the stack, in a heap
storage. That is what I am currently working on.&lt;/p&gt;
&lt;p&gt;This leads me to “heap storage”, which is what I am currently working on
and will report on next week. Once that is there, goto generators can
work, and will become the norm. Until then, I am refactoring a lot to
get accesses to variable go through proper objects that know their
storage locations and types.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hotfixes"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Hotfixes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So there have been 2 more hotfixes. One was to make the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;enum&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt; compatibility available that I talked about last week in
&lt;cite&gt;TWN #2 &amp;lt;./nuitka-this-week-2.html#python3-enumerators&amp;gt;&lt;/cite&gt; coupled with a
new minor things.&lt;/p&gt;
&lt;p&gt;And then another one, actually important, where Python3
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__annotations__&lt;/span&gt;&lt;/code&gt; by default was the empty dictionary, but then could
be modified, corrupting the Nuitka internally used one severely.&lt;/p&gt;
&lt;p&gt;Right now I have on factory another fix for nested namespace packages in
Python3 and that might become another hotfix soon.&lt;/p&gt;
&lt;p&gt;As you know, I am following the git flow model, where it’s easy to push
out small fixes, and just those, on top of the last release. I tend to
decide based on importance. However, I feel that with the important
fixes in the hotfixes now, it’s probably time to make a full release, to
be sure everybody gets those.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="plans"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Finishing heap storage is my top priority right now and I hope to
complete the refactorings necessary in the coming week. I will also talk
about how it also enables C types work next week.&lt;/p&gt;
&lt;p&gt;Until next week then!&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-3.html"/>
    <summary>Nuitka this week #3</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-08-11T11:58:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-2.html</id>
    <title>Nuitka this week #2</title>
    <updated>2018-08-02T07:08:54+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-2"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-2" id="id1"&gt;Nuitka this week #2&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#new-series-rationale" id="id2"&gt;New Series Rationale&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python-3-7" id="id3"&gt;Python 3.7&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#msi-3-7-files-for-nuitka" id="id4"&gt;MSI 3.7 files for Nuitka&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#planned-mode" id="id5"&gt;Planned Mode&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#goto-generators" id="id6"&gt;Goto Generators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python3-enumerators" id="id7"&gt;Python3 Enumerators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#hotfixes" id="id8"&gt;Hotfixes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#plans" id="id9"&gt;Plans&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="new-series-rationale"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;New Series Rationale&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As discussed last week in &lt;a class="reference external" href="./nuitka-this-week-1.html"&gt;TWN #1&lt;/a&gt; this is
a new series that I am using to highlight things that are going on,
newly found issues, hotfixes, all the things Nuitka.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python-3-7"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Python 3.7&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I made the first release with official 3.7 support, huge milestone in
terms of catching up. Generic classes posed a few puzzles, and need more
refinements for error handling, but good code works now.&lt;/p&gt;
&lt;p&gt;The class creation got a bit more complex, yet again, which will make it
even hard to know the exact base classes to be used. But eventually we
will manage to overcome this and statically optimize that.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="msi-3-7-files-for-nuitka"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;MSI 3.7 files for Nuitka&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Building the MSI files for Nuitka ran into a 3.7.0 regression of CPython
failing to build them, that I reported and seems to be valid bug of
theirs.&lt;/p&gt;
&lt;p&gt;So they will be missing for some longer time. Actually I wasn’t so sure
if they are all that useful, or working as expected for the runners, but
with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; mode of execution, that ought to be a non-issue.
so it would be nice to keep them for those who use them for deployment
internally.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="planned-mode"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Planned Mode&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have a change here. This is going to be a draft post until I publish
it, so I might the link, or mention it on the list, but I do not think I
will wait for feedback, where there is not going to be all that much.&lt;/p&gt;
&lt;p&gt;So I am shooting this off the web site.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="goto-generators"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Goto Generators&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is an exciting field of work, that I have been busy with this week.
I will briefly describe the issue at hand.&lt;/p&gt;
&lt;p&gt;So generators in Python are more generally called coroutines in other
places, and basically that is code shaking hands, executing resuming in
one, handing back a piece of data back and forth.&lt;/p&gt;
&lt;p&gt;In Python, the way of doing this is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt;&lt;/code&gt; and more recently &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt;
&lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; as a convienant way for of doing it in a loop in Python3. I still
recall the days when that was a statement. Then communication was one
way only. Actually when I was still privately doing Nuitka based on then
Python 2.5 and was then puzzled for Python 2.6, when I learned in Nuitka
about it becoming an expression.&lt;/p&gt;
&lt;p&gt;The way this is implemented in Python, is that execution of a frame is
simply suspended, and another frame stack bytecode is activated. This
switching is of course very fast potentially, the state is already fully
preserved on the stack of the virtual machine, which is owned by the
frame. For Nuitka, when it still was C++, it wasn’t going to be possible
to interrupt execution without preserving the stack. So what I did was
very similar, and I started to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;makecontext/setcontext&lt;/span&gt;&lt;/code&gt; to
implement what I call fibers.&lt;/p&gt;
&lt;p&gt;Basically that is C level stack switching, but with a huge issue. Python
does not grow stacks, but can need a lot of stack space below. Therefore
1MB or even 2MB per generator was allocated, to be able to make deep
function calls if needed.&lt;/p&gt;
&lt;p&gt;So using a lot of generators on 32 bits could easily hit a 2GB limit.
And now with Python3.5 coroutines people use more and more of them, and
hit memory issues.&lt;/p&gt;
&lt;p&gt;So, goto generators, now that C is possible, are an entirely new
solution. With it, Nuitka will use one stack only. Generator code will
become re-entrant, store values between entries on the heap, and
continue execution at goto destinations dispatched by a switch according
to last exit of the generator.&lt;/p&gt;
&lt;p&gt;So I am now making changes to cleanup the way variable declarations and
accesses for the C variables are being made. More on that next week
though. For now I am very exited about the many cleanups that stem from
it. The code generation used to have many special bells and whistles,
and they were generalized into one thing now, making for cleaner and
easier to understand Nuitka code.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python3-enumerators"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Python3 Enumerators&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On interesting thing, is that an incompatibility related to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt;
will go away now.&lt;/p&gt;
&lt;p&gt;The automatic &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; that we had to hack into it, because the
Python core will do it for uncompiled functions only, had to be done
while declaring the class. So it was visible and causing issues with at
least the Python enum module, which wants to call your &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt;
manually. Because why would it not?!&lt;/p&gt;
&lt;p&gt;But turns out, for Python3 the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; is not needed anymore.
So this is now only done for Python2, where it is needed, and things
work smoothly with this kind of code now too. This is currently in my
factory testing and will probably become part of a hotfix if it turns
out good.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="hotfixes"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Hotfixes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Immediately after the release, some rarely run test, where I compiled
all the code on my machine, found 2 older bugs, obscure ones arguably,
that I made into a hotfix, also because the test runner was having a
regression with 3.7, which prevented some package builds. So that was
0.5.32.1 release.&lt;/p&gt;
&lt;p&gt;And then I received a bug report about &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;await&lt;/span&gt;&lt;/code&gt; where a self test of
Nuitka fails and reports an optimization error. Very nice, the new
exceptions that automatically dump involved nodes as XML made it
immediately clear from the report, what is going on, even without having
to reproduce anything. I bundled a 3.7 improvement for error cases in
class creation with it. So that was the 0.5.32.2 release.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="plans"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Finishing goto generators is my top priority, but I am also going over
minor issues with the 3.7 test suite, fixing test cases there, and as
with e.g. the enum issue, even known issues this now finds.&lt;/p&gt;
&lt;p&gt;Until next week.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-2.html"/>
    <summary>Nuitka this week #2</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-08-02T07:08:54+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0532.html</id>
    <title>Nuitka Release 0.5.32</title>
    <updated>2018-07-29T22:46:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-32"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains substantial new optimization, bug fixes, and
already the full support for Python 3.7. Among the fixes, the enhanced
coroutine work for compatibility with uncompiled ones is most important.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, was optimizing write backs of attribute in-place assignments
falsely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, generator stop future was not properly supported. It is now the
default for Python 3.7 which showed some of the flaws.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__qualname__&lt;/span&gt;&lt;/code&gt; of coroutines and asyncgen was wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Fix, for dictionary unpackings to calls, check the keys if
they are string values, and raise an exception if not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Fix, need to check assignment unpacking for too short
sequences, we were giving &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IndexError&lt;/span&gt;&lt;/code&gt; instead of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ValueError&lt;/span&gt;&lt;/code&gt;
for these. Also the error messages need to consider if they should
refer to “at least” in their wording.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, outline nodes were cloned more than necessary, which would
corrupt the code generation if they later got removed, leading to a
crash.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Compiled coroutines awaiting uncompiled coroutines was not
working properly for finishing the uncompiled ones. Also the other
way around was raising a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RuntimeError&lt;/span&gt;&lt;/code&gt; when trying to pass an
exception to them when they were already finished. This should
resolve issues with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncio&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, side effects of a detected exception raise, when they had an
exception detected inside of them, lead to an infinite loop in
optimization. They are now optimized in-place, avoiding an extra step
later on.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Support for Python 3.7 with only some corner cases not supported yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Delay creation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; exception in generator code for
as long as possible. This gives more compact code for generations,
which now pass the return values via compiled generator attribute for
Python 3.3 or higher.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: More immediate re-formulation of classes with no bases.
Avoids noise during optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: For class dictionaries that are only assigned from values
without side effects, they are not converted to temporary variable
usages, allowing the normal SSA based optimization to work on them.
This leads to constant values for class dictionaries of simple
classes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Explicit cleanup of nodes, variables, and local scopes that become
unused, has been added, allowing for breaking of cyclic dependencies
that prevented memory release.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Adapted 3.5 tests to work with 3.7 coroutine changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added CPython 3.7 test suite.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Removed remaining code that was there for 3.2 support. All uses of
version comparisons with 3.2 have been adapted. For us, Python3 now
means 3.3, and we will not work with 3.2 at all. This removed a fair
bit of complexity for some things, but not all that much.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have dedicated file for import released helpers, so they are easier
to find if necessary. Also do not have code for importing a name in
the header file anymore, not performance relevant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable Python warnings when running scons. These are particularly
given when using a Python debug binary, which is happening when
Nuitka is run with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-debug&lt;/span&gt;&lt;/code&gt; option and the inline copy of
Scons is used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have a factory function for all conditional statement nodes created.
This solved a TODO and handles the creation of statement sequences
for the branches as necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split class reformulation into two files, one for Python2 and one for
Python3 variant. They share no code really, and are too confusing in
a single file, for the huge code bodies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Locals scopes now have a registry, where functions and classes
register their locals type, and then it is created from that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have a dedicated helper function for single argument calls in static
code that does not require an array of objects as an argument.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There are now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requirements-devel.txt&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requirements.txt&lt;/span&gt;&lt;/code&gt;
files aimed at usage with scons and by users, but they are not used
in installation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This releases has this important step to add conversion of locals
dictionary usages to temporary variables. It is not yet done everywhere
it is possible, and the resulting temporary variables are not yet
propagated in the all the cases, where it clearly is possible. Upcoming
releases ought to achieve that most Python2 classes will become to use a
direct dictionary creation.&lt;/p&gt;
&lt;p&gt;Adding support for Python 3.7 is of course also a huge step. And also
this happened fairly quickly and soon after its release. The generic
classes it adds were the only real major new feature. It breaking the
internals for exception handling was what was holding back initially,
but past that, it was really easy.&lt;/p&gt;
&lt;p&gt;Expect more optimization to come in the next releases, aiming at both
the ability to predict Python3 metaclasses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__prepare__&lt;/span&gt;&lt;/code&gt; results, and
at more optimization applied to variables after they became temporary
variables.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0532.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-07-29T22:46:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-this-week-1.html</id>
    <title>Nuitka this week #1</title>
    <updated>2018-07-27T07:08:54+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-this-week-1"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-this-week-1" id="id1"&gt;Nuitka this week #1&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#new-series-rationale" id="id2"&gt;New Series Rationale&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#planned-mode" id="id3"&gt;Planned Mode&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#locals-dict" id="id4"&gt;Locals Dict&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nodes-need-finalization" id="id5"&gt;Nodes need Finalization&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#impact-on-memory-usage" id="id6"&gt;Impact on Memory Usage&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#type-hints-question" id="id7"&gt;Type Hints Question&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python-3-7" id="id8"&gt;Python 3.7&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#coroutine-compatibility" id="id9"&gt;Coroutine Compatibility&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#pylint-troubles" id="id10"&gt;PyLint Troubles&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#todo-solving" id="id11"&gt;TODO solving&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#issues-encountered" id="id12"&gt;Issues Encountered&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#plans" id="id13"&gt;Plans&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="new-series-rationale"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;New Series Rationale&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think I tend to prefer coding over communication too much. I think I
need to make more transparent what I am doing. Also things, will be
getting exciting continuously for a while now.&lt;/p&gt;
&lt;p&gt;I used to status report posts, many years ago, every 3 months or so, and
that was nice for me also to get an idea of what changed, but I stopped.
What did not happen, was to successfully engage other people to
contribute.&lt;/p&gt;
&lt;p&gt;This time I am getting more intense. I will aim to do roughly weekly or
bi-weekly reports, where I highlight things that are going on, newly
found issues, hotfixes, all the things Nuitka.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="planned-mode"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Planned Mode&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I will do it this fashion. I will write a post to the mailing list,
right about wednesday every week or so. I need to pick a day. I am
working from home that day, saving me commute time. I will invest that
time into this.&lt;/p&gt;
&lt;p&gt;The writing will not be too high quality at times. Bare with me there.
Then I will check feedback from the list, if any. Hope is for it to
point out the things where I am not correct, missing, or even engage
right away.&lt;/p&gt;
&lt;p&gt;Topics are going to be random, albeit repeating. I will try and make
links to previous issues where applicable. Therefore also the TOC, which
makes for link targets in the pages.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="locals-dict"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Locals Dict&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When I am speaking of locals dict, I am talking of class scopes (and
functions with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statements). These started to use actual
dictionary a while ago, which was a severe setback to optimization.&lt;/p&gt;
&lt;p&gt;Right now, so for this week, after a first prototype was making the
replacement of local dict assignment and references for Python2, and
kind of worked through my buildbots, flawlessly, I immediately noticed
that it would require some refactoring to not depend on the locals
scopes to be only in one of the trace collections. Thinking of future
inlining, maybe part of a locals scope was going to be in multiple
functions, that ought to not be affected.&lt;/p&gt;
&lt;p&gt;Therefore I made a global registry of locals scopes, and working on
those, I checked its variables, if they can be forward propagated, and
do this not per module, but after all the modules have been done. This
is kind of a setback for the idea of module specific optimization
(cacheable later on) vs. program optimization, but since that is not yet
a thing, it can remain this way for now.&lt;/p&gt;
&lt;p&gt;Once I did that, I was interested to see the effect, but to my horror, I
noticed, that memory was not released for the locals dict nodes. It was
way too involved with cyclic dependencies, which are bad. So that was
problematic of course. Compilation to keep nodes in memory for both
tracing the usage as a locals dict and temporary variables, wasn’t going
to help scaling at all.&lt;/p&gt;
&lt;p&gt;Solution is finalization&lt;/p&gt;
&lt;/section&gt;
&lt;section id="nodes-need-finalization"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Nodes need Finalization&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So replaced nodes reference a parent, and then the locals scope
references variables, and trace collections referencing variables, which
reference locals scopes, and accesses referencing traces, and so on. The
garbage collector can handle some of this, but seems I was getting past
that.&lt;/p&gt;
&lt;p&gt;For a solution, I started to add a finalize method, which released the
links for locals scopes, when they are fully propagated, on the next
run.&lt;/p&gt;
&lt;p&gt;Adding a finalize to all nodes, ought to make sure, memory is released
soon, and might even find bugs, as nodes become unusable after they are
supposedly unused. Obviously, there will currently be cases, where nodes
becomes unused, but they are not finalized yet. Also, often this is more
manual, because part of the node is to be released, but one child is
re-used. That is messy.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="impact-on-memory-usage"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Impact on Memory Usage&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The result was a bit disappointing. Yes, memory usage of mercurial
compilation went back again, but mostly to what it had been. Some
classes are now having their locals dict forward propagated, but the
effect is not always a single dictionary making yet. Right now, function
definitions, are not forward at all propagated. This is a task I want to
take on before next release though, but maybe not, there is other things
too. But I am assuming that will make most class dictionaries created
without using any variables at all anymore, which should make it really
lean.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="type-hints-question"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Type Hints Question&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Then, asking about type hints, I got the usual question about Nuitka
going to use it. And my stance is unchanged. They are just hints, not
reliable. Need to behave the same if users do it wrong. Suggested to
create decorated which make type hints enforced. But I expect nobody
takes this on though. I need to make it a GitHub issue of Nuitka,
although technically it is pure CPython work and ought to be done
independently. Right now Nuitka is not yet there anyway yet, to take
full advantage.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python-3-7"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Python 3.7&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Then, for Python 3.7, I have long gotten the 3.6 test suite to pass. I
raised 2 bugs with CPython, one of which lead to update of a failing
test. Nuitka had with large delay, caught of with what &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;
&lt;span class="pre"&gt;__annotations__&lt;/span&gt;&lt;/code&gt; was doing in a class. Only with the recent work for
proper locals dict code generation, we could enforce a name to be local,
and have proper code generation, that allows for it to be unset.&lt;/p&gt;
&lt;p&gt;This was of course a bit of work. But the optimization behind was always
kind of necessary to get right. But now, that I got this, think of my
amazement when for 3.7 they reverted to the old behavior, where
annotiatons then corrupt the module annotations&lt;/p&gt;
&lt;p&gt;The other bug is a reference counting bug, where Nuitka tests were
failing with CPython 3.7, and turns out, there is a bug in the
dictionary implementation of 3.7, but it only corrupts counts reported,
not actual objects, so it’s harmless, but means for 3.7.0 the reference
count tests are disabled.&lt;/p&gt;
&lt;p&gt;Working through the 3.7 suite, I am cherry picking commits, that e.g.
allow the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;repr&lt;/span&gt;&lt;/code&gt; of compiled functions to contain &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;compiled_function&lt;/span&gt;
&lt;span class="pre"&gt;...&amp;gt;&lt;/span&gt;&lt;/code&gt; and the like. Nothing huge yet. There is now a subscript of type,
and foremost the async syntax became way more liberal, so it is more
complex for Nuitka to make out if it is a coroutine due to something
happening inside a generator declared inside of it. Also &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cr_origin&lt;/span&gt;&lt;/code&gt;
was added to coroutines, but that is mostly it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="coroutine-compatibility"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Coroutine Compatibility&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A bigger thing was that I debugged coroutines and their interaction with
uncompiled and compiled coroutines awaiting one another, and turns out,
there was a lot to improve.&lt;/p&gt;
&lt;p&gt;The next release will be much better compatible with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;asyncio&lt;/span&gt;&lt;/code&gt; module
and its futures, esp with exceptions to cancel tasks passed along. That
required to clone a lot of CPython generator code, due to how ugly they
mess with bytecode instruction pointers in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; on an
uncompiled coroutine, as they don’t work with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;send&lt;/span&gt;&lt;/code&gt; method unlike
everything else has to.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="pylint-troubles"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;PyLint Troubles&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For PyLint, the 2.0.0 release found new things, but unfortunately for
2.0.1 there is a lot of regressions that I had to report. I fixed the
versions of first PyLint, and now also Astroid, so Travis cannot
suddenly start to fail due to a PyLint release finding new warnings.&lt;/p&gt;
&lt;p&gt;Currently, if you make a PR on GitHub, a PyLint update will break it.
And also the cron job on Travis that checks master.&lt;/p&gt;
&lt;p&gt;As somebody pointed out, I am now using &lt;cite&gt;requires.io
&amp;lt;https://requires.io/github/kayhayen/Nuitka/requirements/?branch=factory&amp;gt;&lt;/cite&gt;
to check for Nuitka dependencies. But since 1.9.2 is still needed for
Python2, that kind of is bound to give alarms for now.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="todo-solving"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;TODO solving&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have a habit of doing off tasks, when I am with my notebook in some
place, and don’t know what to work on. So I have some 2 hours recently
like this, and used it to look at &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; and resolve them.&lt;/p&gt;
&lt;p&gt;I did a bunch of cleanups for static code helpers. There was one in my
mind about calling a function with a single argument. That fast call
required a local array with one element to put the arg into. That makes
using code ugly.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="issues-encountered"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Issues Encountered&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;enum&lt;/span&gt;&lt;/code&gt; module of Python3 hates compiled classes and their
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; around &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt;. Since it manually unwraps
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt; and then calls it itself, it then finds that a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; object cannot be called. It’s purpose is to sit in the
class dictionary to give a descriptor that removes the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;self&lt;/span&gt;&lt;/code&gt; arg from
the call.&lt;/p&gt;
&lt;p&gt;I am contemplating submitting an upstream patch for CPython here. The
hard coded check for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyFunction&lt;/span&gt;&lt;/code&gt; on the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt; value is hard to
emulate.&lt;/p&gt;
&lt;p&gt;So I am putting the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; into the dictionary passed already.
But the undecorated function should be there for full compatibility.&lt;/p&gt;
&lt;p&gt;If I were to make compiled function type that is both a staticmethod
alike and a function, maybe I can work around it. But it’s ugly and a
burden. But it would need no change. And maybe there is more core
wanting to call &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt; manually&lt;/p&gt;
&lt;/section&gt;
&lt;section id="plans"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I intend to make a release, probably this weekend. It might not contain
full 3.7 compatibility yet, although I am aiming at that.&lt;/p&gt;
&lt;p&gt;Then I want to turn to “goto generators”, a scalability improvement of
generators and coroutines that I will talk about next week then.&lt;/p&gt;
&lt;p&gt;Until next week.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-this-week-1.html"/>
    <summary>Nuitka this week #1</summary>
    <category term="NTW" label="NTW"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-07-27T07:08:54+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0531.html</id>
    <title>Nuitka Release 0.5.31</title>
    <updated>2018-07-10T15:37:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-31"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is massive in terms of fixes, but also adds a lot of
refinement to code generation, and more importantly adds experimental
support for Python 3.7, while enhancing support for Pyt5 in standalone
mode by a lot.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5.Qt&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5.Qt&lt;/span&gt;&lt;/code&gt; module and its &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;qml&lt;/span&gt;&lt;/code&gt;
plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The sensible plugin list for PyQt now includes that
platforms plugins on Windows too, as they are kind of mandatory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, for uninstalled Python versions wheels that linked
against the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Python3&lt;/span&gt;&lt;/code&gt; library as opposed to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Python3X&lt;/span&gt;&lt;/code&gt;, it was
not found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Prefer DLLs used by main program binary over ones used by
wheels.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: For DLLs added by Nuitka plugins, add the package
directory to the search path for dependencies where they might live.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vars&lt;/span&gt;&lt;/code&gt; built-in didn’t annotate its exception exit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;complex&lt;/span&gt;&lt;/code&gt; built-ins needs to be
treated as a slot too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, consider if &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; variable must be assigned, in which case no
exception exit should be created. This prevented &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Tkinter&lt;/span&gt;&lt;/code&gt;
compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Added support for the following language construct:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;metaclass&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;C&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Added support for cyclic imports. Now a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; import
with a name can really cause an import to happen, not just a module
attribute lookup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hasattr&lt;/span&gt;&lt;/code&gt; was never raising exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytearray&lt;/span&gt;&lt;/code&gt; constant values were considered to be
non-iterable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Fix, now it is possible to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt; &lt;span class="pre"&gt;__annotations__&lt;/span&gt;&lt;/code&gt; in a
class and behave compatible. Previously in this case we were falling
back to the module variable for annotations used after that which is
wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, some built-in type conversions are allowed to return derived
types, but Nuitka assumed the exact type, this affected &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_socket&lt;/span&gt;&lt;/code&gt; module was insisted on to be found,
but can be compiled in.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Python 3.7, more work will be needed
though for full support. Basic tests are working, but there are are
at least more coroutine changes to follow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for building extension modules against statically
linked Python. This aims at supporting manylinux containers, which
are supposed to be used for creating widely usable binary wheels for
Linux. Programs won’t work with statically linked Python though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added options to allow ignoring the Windows cache for DLL
dependencies or force an update.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow passing options from distutils to Nuitka compilation via setup
options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option to disable the DLL dependency cache on Windows as it may
become wrong after installing new software.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental ability to provide extra options for Nuitka to
setuptools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Remove frame preservation and restoration of exceptions.
This is not needed, but leaked over from Python2 code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Apply value tracing to local dict variables too, enhancing the
optimization for class bodies and function with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statements
by a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better optimization for “must not have value”, wasn’t considering
merge traces of uninitialized values, for which this is also the
case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use 10% less memory at compile time due to specialized base classes
for statements with a single child only allowing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__slots__&lt;/span&gt;&lt;/code&gt; usage
by not having multiple inheritance for those.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More immediately optimize branches with known truth values, so that
merges are avoided and do not prevent trace based optimization before
the pass after the next one. In some cases, optimization based on
traces could fail to be done if there was no next pass caused by
other things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Much faster handling for functions with a lot of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eval&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Static optimization of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; with known type shapes, the value is
predicted at compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize containers for all compile time constants into constant
nodes. This also enables further compile time checks using them, e.g.
with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isinstance&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; checks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Using threads when determining DLL dependencies. This
will speed up the un-cached case on Windows by a fair bit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also remove unused assignments for mutable constant values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Also optimize calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; built-in, this was so far
not done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Statically optimize iteration over constant values that are not
iterable into errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed Fortran, Java, LaTex, PDF, etc. stuff from the inline copies
of Scons for faster startup and leaner code. Also updated to 3.0.1
which is no important difference over 3.0.0 for Nuitka however.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to always release temporary objects before checking for
error exits. When done the other way around, more C code than
necessary will be created, releasing them in both normal case and
error case after the check.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also remove unused assignments in case the value is a mutable
constant.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Don’t store “version” numbers of variable traces for code generation,
instead directly use the references to the value traces instead,
avoiding later lookups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added dedicated module for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;complex&lt;/span&gt;&lt;/code&gt; built-in nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved C helpers for integer and complex types to dedicated files,
solving the TODOs around them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed some Python 3.2 only codes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;For better bug reports, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt; output now contains also
the Python version information and the binary path being used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Started using specialized exceptions for some types of errors, which
will output the involved data for better debugging without having to
reproduce anything. This does e.g. output XML dumps of problematic
nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When encountering a problem (compiler crash) in optimization, output
the source code line that is causing the issue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Fedora 28 RPM builds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove more instances of mentions of 3.2 as supported or usable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renovated the graphing code and made it more useful.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release marks important progress, as the locals dictionary tracing
is a huge step ahead in terms of correctness and proper optimization.
The actual resulting dictionary is not yet optimized, but that ought to
follow soon now.&lt;/p&gt;
&lt;p&gt;The initial support of 3.7 is important. Right now it apparently works
pretty well as a 3.6 replacement already, but definitely a lot more work
will be needed to fully catch up.&lt;/p&gt;
&lt;p&gt;For standalone, this accumulated a lot of improvements related to the
plugin side of Nuitka. Thanks to those involved in making this better.
On Windows things ought to be much faster now, due to parallel usage of
dependency walker.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0531.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-07-10T15:37:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0530.html</id>
    <title>Nuitka Release 0.5.30</title>
    <updated>2018-05-01T11:53:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-30"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has improvements in all areas. Many bug fixes are
accompanied with optimization changes towards value tracing.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fix, the new setuptools runners were not used by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pip&lt;/span&gt;&lt;/code&gt; breaking the
use of Nuitka from PyPI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, imports of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;six.moves&lt;/span&gt;&lt;/code&gt; could crash the compiler for built-in
names. Fixed in 0.5.29.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Make the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-run&lt;/span&gt;&lt;/code&gt; not a symlink as these work really
bad on that platform, instead make it a full copy just like we did
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka3-run&lt;/span&gt;&lt;/code&gt; already. Fixed in 0.5.29.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: In module mode, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;types.coroutine&lt;/span&gt;&lt;/code&gt; was monkey patched
into an endless recursion if including more than one module, e.g. for
a package. Fixed in 0.5.29.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Dictionary unpackings with both star arguments and non
star arguments could leak memory. Fixed in 0.5.29.3 already.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, distutils usage was not working for Python2 anymore, due to
using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; for what are old style classes on that version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, some method calls to C function members could leak references.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;for_call&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;functools&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;partial&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;m&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;for_call&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# This leaked a reference to the descriptor.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: The bases classes should be treated as an unpacking too.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;C&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;  &lt;span class="c1"&gt;# Allowed syntax that was not supported.&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added back batch files to run Nuitka from the command line.
Fixed in 0.5.29.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-package&lt;/span&gt;&lt;/code&gt; to force inclusion of a whole
package with the submodules in a compilation result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added options &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--include-module&lt;/span&gt;&lt;/code&gt; to force inclusion of a single
module in a compilation result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; plug-in got adapted to Python 3.4 changes and
will now also work in accelerated mode on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It is now possible to specify the Qt plugin directories with e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--enable-plugin-=qt_plugins=imageformats&lt;/span&gt;&lt;/code&gt; and have only those
included. This should avoid dependency creep for shared libraries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins can now make the decision about recursing to a module or not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins now can get their own options passed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The re-raising of exceptions has gotten its own special node type.
This aims at more readability (XML output) and avoiding the overhead
of checking potential attributes during optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed built-in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; to using a slot
mechanism that also analyses the type shape and detects and warns
about errors at compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed the variable tracing to value tracing. This meant to cleanup
all the places that were using it to find the variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable must have / must not value value optimization for all kinds of
variables including module and closure variables. This often avoids
error exits and leads to smaller and faster generated code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added burn test with local install of pip distribution to virtualenv
before making any PyPI upload. It seems pip got its specific error
sources too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid calling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; and prefer &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;python&amp;gt;&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;lib2to3&lt;/span&gt;&lt;/code&gt; instead, as
it seems at least Debian Testing stopped to provide the binary by
default. For Python 2.6 and 3.2 we continue to rely on it, as the
don’t support that mode of operation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The PyLint checks have been made more robust and even more Python3
portable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added PyLint to Travis builds, so PRs are automatically checked too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test for distutils usage with Nuitka that should prevent
regressions for this new feature and to document how it can be used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make coverage taking work on Windows and provide the full information
needed, the rendering stage is not there working yet though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expanded the trick assignment test cases to cover more slots to find
bugs introduced with more aggressive optimization of closure
variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New test to cover multiprocessing usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generating more code tests out of doctests for increased coverage of
Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Stop using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-version&lt;/span&gt;&lt;/code&gt; in tests where they still remained.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split the forms of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; into two different nodes,
they share nothing except the name. Create the constants for the zero
arg variant more immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split the output comparison part into a dedicated testing module so
it can be re-used, e.g. when doing distutils tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed dead code from variable closure taking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have a dedicated module for the metaclass of nodes in the tree, so it
is easier to find, and doesn’t clutter the node base classes module
as much.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have a dedicated node for reraise statements instead of checking for
all the arguments to be non-present.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There is now a pull request template for GitHub when used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deprecating the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-version&lt;/span&gt;&lt;/code&gt; argument which should be
replaced by using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; with the correct Python version.
Outputs have been updated to recommend this one instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make automatic import sorting and auto-format tools properly
executable on Windows without them changing new lines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The documentation was updated to prefer the call method with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-m&lt;/span&gt;
&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; and manually providing the Python binary to use.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release continued the distutils integration adding first tests, but
more features and documentation will be needed.&lt;/p&gt;
&lt;p&gt;Also, for the locals dictionary work, the variable tracing was made
generic, but not yet put to use. If we use this to also trace dictionary
keys, we can expect a lot of improvements for class code again.&lt;/p&gt;
&lt;p&gt;The locals dictionary tracing will be the focus before resuming the work
on C types, where the ultimate performance boost lies. However,
currently, not the full compatibility has been achieved even with
currently using dictionaries for classes, and we would like to be able
to statically optimize those better anyway.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0530.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-05-01T11:53:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0529.html</id>
    <title>Nuitka Release 0.5.29</title>
    <updated>2018-03-28T00:45:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-29"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release comes with a lot of improvements across the board. A lot of
focus has been givevn to the packaging side of Nuitka, but also there is
a lot of compatibility work.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: When using Scons for Python3 and Scons for Python2 on the
same build directory, a warning would be given about the need to
migrate. Make the Scons cache directory use the Python ABI version as
a key too, to avoid these issues. Fixed in 0.5.28.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fixup for Python3 and Scons no more generating the MinGW64
import library for Python anymore properly. Was only working if
cached from a previous install of Nuitka. Fixed in 0.5.28.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: Made the data files plugin mandatory and added support for
the scrapy package needs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, added implicit dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkg_resources.external&lt;/span&gt;&lt;/code&gt;
package. Fixed in 0.5.28.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, an import of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x.y&lt;/span&gt;&lt;/code&gt; where this was not a package didn’t cause
the package &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x&lt;/span&gt;&lt;/code&gt; to be included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;six.moves&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;requests.packages&lt;/span&gt;&lt;/code&gt;
meta imports, these cause hidden implicit imports, that are now
properly handled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Patch the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; value for technical bytecode
modules loaded during Python library initialization in a more
compatible way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Extension modules when loaded might actually raise legit
errors, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ImportError&lt;/span&gt;&lt;/code&gt; of another module, don’t make those into
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SystemError&lt;/span&gt;&lt;/code&gt; anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.2: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__package__&lt;/span&gt;&lt;/code&gt; of sub-packages was wrong, which could
cause issues when doing relative imports in that sub-package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Contractions in a finally clause could crash the compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, unused closure variables could lead to a crash in they were
passed to a nested function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Standalone dependency analysis could enter an endless
recursion in case of cyclic dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Async generation expressions need to return a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;
value too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; is a package attribute and not a
built-in value.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;It is now possible to run Nuitka with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;some_python_you_choose&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt;
&lt;span class="pre"&gt;nuitka&lt;/span&gt; &lt;span class="pre"&gt;...&lt;/span&gt;&lt;/code&gt; and therefore know exactly which Python installation is
going to be used. It does of course need Nuitka installed for this to
work. This mechanism is going to replace the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-version&lt;/span&gt;&lt;/code&gt;
mechanism in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There are dedicated runners for Python3, simply use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka3&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka3-run&lt;/span&gt;&lt;/code&gt; to execute Nuitka if your code is Python3 code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added warning for implicit exception raises due to mismatch in
unpacking length. These are statically detected, but so far were not
warned about.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added cache for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;depends.exe&lt;/span&gt;&lt;/code&gt; results. This speeds up standalone
mode again as some of these calls were really slow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The import tracer is more robust against recursion and works with
Python3 now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added an option to assume yes for downloading questions. The
currently only enables the download of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;depends.exe&lt;/span&gt;&lt;/code&gt; and is
intended for CI servers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a report file for scons, which records the values used
to run things, this could be useful for debugging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka now registers with distutils and can be used with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bdist_wheel&lt;/span&gt;&lt;/code&gt; directly, but this lacks documentation and tests.
Many improvements in the distutils build.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Forward propagate compile time constants even if they are only
potential usages. This is actually the case where this makes the most
sense, as it might remove its use entirely from the branches that do
not use it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid extra copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; code. The cloning operation takes
time and memory, and this shaved of 0.3% of Nuitka memory usage, as
these can also become dangling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Class dictionaries are now proper dictionaries in optimization, using
some dedicated code for name lookups that are transformed to
dedicated locals dictionary or mapping (Python3) accesses. This
currently does not fully optimize, but will in coming releases, and
saves about 25% of memory compared to the old code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Treating module attributes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__package__&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__loader__&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; with dedicated nodes, that allow or
forbid optimization dependent on usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Async generator expressions were not working fully, become
more compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; inside a contraction could crash the compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, also accept &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt; as properly decorated in case it’s a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;classmethod&lt;/span&gt;&lt;/code&gt; too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, removed obsolete &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--nofreeze-stdlib&lt;/span&gt;&lt;/code&gt; which only complicated
using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-stdlib&lt;/span&gt;&lt;/code&gt; which should be used instead.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; Python package is now installed into the public
namespace and used from there. There are distinct copies to be
installed for both Python2 and Python3 on platforms where it is
supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;twine&lt;/span&gt;&lt;/code&gt; for upload to PyPI now as recommended on their site.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Running &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pylint&lt;/span&gt;&lt;/code&gt; on Windows became practical again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added RPM packages for Fedora 26 and 27, these used to fail due to
packaging issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added RPM packages for openSUSE Leap 42.2, 42.3 and 15.0 which were
simply missing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added RPM packages for SLE 15.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for PyLint 1.8 and its new warnings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The RPM packages no longer contain &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-run3&lt;/span&gt;&lt;/code&gt;, it will be
replaced by the new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka3-run&lt;/span&gt;&lt;/code&gt; which is in all packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The runners used for installation are now easy install created, but
patched to avoid overhead at run time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Ubuntu Artful (17.10) for download, removed
support for Ubuntu Yakkety, Vivid and Zesty (no more supported by
them).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed support for Debian Wheezy and Ubuntu Precise (they are too
old for modern packaging used).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a issue template for GitHub when used.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Standalone tests were referencing an old path to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;depends.exe&lt;/span&gt;&lt;/code&gt; that wasn’t populated on new installs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refinements for CPython test suites to become more stable in results.
Some tests occasionally fail to clean up, or might do
nondeterministic outputs, or are not relevant at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The tests don’t use the runners, but more often do &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; to
become executable without having to find the proper runner. This
improves usage during the RPM builds and generally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Travis: Do not test development versions of CPython, even for stable
release, they break too often.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release consolidates a lot of what we already had, adding hopeful
stuff for distutils integration. This will need tests and documentation
though, but should make Nuitka really easy to use. A few features are
still missing to make it generally reliable in that mode, but they are
going to come.&lt;/p&gt;
&lt;p&gt;Also the locals dictionary work is kind of incomplete without a proper
generic tracing of not only local variables, but also dictionary keys.
With that work in place, a lot of improvements will happen.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0529.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2018-03-28T00:45:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0528.html</id>
    <title>Nuitka Release 0.5.28</title>
    <updated>2017-10-18T11:00:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-28"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has a focus on compatibility work and contains bug fixes
and work to enhance the usability of Nuitka by integrating with
distutils. The major improvement is that contractions no longer use
pseudo functions to achieve their own local scope, but that there is now
a dedicated structure for that representing an in-lined function.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt; &lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt; was not yet implemented for async
generators.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, functions with keyword arguments where the value was determined
to be a static raise could crash the compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect using MinGW64 32 bits C compiler being used with 64 bits
Python with better error message.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, when extracting side effects of a static raise, extract them
more recursively to catch expressions that themselves have no code
generation being used. This fixes at least static raises in keyword
arguments of a function call.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for proper operation of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pkgutil.get_data&lt;/span&gt;&lt;/code&gt; by implementing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;get_data&lt;/span&gt;&lt;/code&gt; in our meta path
based loader.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__spec__&lt;/span&gt;&lt;/code&gt; module attribute was previously
missing, present on Python3.4 and higher.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Made &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__loader__&lt;/span&gt;&lt;/code&gt; module attribute set when the
module is loading already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Resolve the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;rpath&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;loader_path&lt;/span&gt;&lt;/code&gt; from
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;otool&lt;/span&gt;&lt;/code&gt; on macOS manually to actual paths, which adds support for
libraries compiled with that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, nested functions calling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; could crash the compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, could not use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-directory&lt;/span&gt;&lt;/code&gt; with arguments that had a
trailing slash.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-directory&lt;/span&gt;&lt;/code&gt; on packages that are not in the
search crashed the compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Python2 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; contractions were using
extra frames like Python3 does, but those are not needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, the way &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONHOME&lt;/span&gt;&lt;/code&gt; was set on Windows had no
effect, which allowed the compiled binary to access the original
installation still.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added some newly discovered missing hidden dependencies
of extension modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The name mangling of private names (e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__var&lt;/span&gt;&lt;/code&gt;) in
classes was applied to variable names, and function declarations, but
not to classes yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Fix, added support for list contractions with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;await&lt;/span&gt;&lt;/code&gt;
expressions in async generators.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.6: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt; &lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt; was not working in async generators
yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, for module tracebacks, we output the module name &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;module&lt;/span&gt;
&lt;span class="pre"&gt;name&lt;/span&gt;&lt;/code&gt;&amp;gt; instead of merely &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;module&amp;gt;&lt;/span&gt;&lt;/code&gt;, but if the module was in a
package, that was not indicated. Now it is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;module&lt;/span&gt; &lt;span class="pre"&gt;package.name&amp;gt;&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The cache directory could be unicode which then failed to
pass as an argument to scons. We now encode such names as UTF-8 and
decode in Scons afterwards, solving the problem in a generic way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Need to recursively resolve shared libraries with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ldd&lt;/span&gt;&lt;/code&gt;, otherwise not all could be included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Make sure &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; has no references to CPython
compile time paths, or else things may work on the compiling machine,
but not on another.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added various missing dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Wasn’t considering the DLLs directory for standard
library extensions for freezing, which would leave out these.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__future__&lt;/span&gt;&lt;/code&gt; imports the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; function
was called more than once.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Contractions are now all properly inlined and allow for optimization
as if they were fully local. This should give better code in some
cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Classes are now all building their locals dictionary inline to the
using scope, allowing for more compact code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The dictionary API was not used in module template code, although it
helps to generate more compact code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Experimental support for building platform dependent wheel
distribution.&lt;/p&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;setup.py&lt;span class="w"&gt; &lt;/span&gt;--command-packages&lt;span class="o"&gt;=&lt;/span&gt;nuitka.distutils&lt;span class="w"&gt; &lt;/span&gt;clean&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;bdist_nuitka
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Use with caution, this is incomplete work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Experimental support for running tests against compiled installation
with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nose&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;py.test&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When specifying what to recurse to, now patterns can be used, e.g.
like this &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-not-to=*.tests&lt;/span&gt;&lt;/code&gt; which will skip all tests in
submodules from compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;By setting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NUITKA_PACKAGE_packagename=/some/path&lt;/span&gt;&lt;/code&gt; the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt;
of packages can be extended automatically in order to allow and load
uncompiled sources from another location. This can be e.g. a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tests&lt;/span&gt;&lt;/code&gt; sub-package or other plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;By default when creating a module, now also a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;module.pyi&lt;/span&gt;&lt;/code&gt; file is
created that contains all imported modules. This should be deployed
alongside the extension module, so that standalone mode creation can
benefit from knowing the dependencies of compiled code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--plugin-list&lt;/span&gt;&lt;/code&gt; that was mentioned in the help output,
but still missing so far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The import tracing of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hints&lt;/span&gt;&lt;/code&gt; module has achieved experimental
status and can be used to test compatibility with regards to import
behavior.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Rename tree and codegen &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Helper&lt;/span&gt;&lt;/code&gt; modules to unique names, making
them easier to work with.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Share the code that decides to not warn for standard library paths
with more warnings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; enum definition of Python2 which is more elegant
than ours.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move quality tools, auto-format, isort, etc. to the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.tools.quality&lt;/span&gt;&lt;/code&gt; namespace.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move output comparison tool to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.tools.testing&lt;/span&gt;&lt;/code&gt;
namespace.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made frame code generation capable of using nested frames, allowing
the real inline of classes and contraction bodies, instead of
“direct” calls to pseudo functions being used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Proper base classes for functions that are entry points, and
functions that are merely a local expression using return statements.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The search mode with pattern, was not working anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resume hash values now consider the Python version too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test that covers using test runners like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nose&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;py.test&lt;/span&gt;&lt;/code&gt; with Nuitka compiled extension modules.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for Scons 3.0 and running Scons with Python3.5 or
higher. The option to specify the Python to use for scons has been
renamed to reflect that it may also be a Python3 now. Only for
Python3.2 to Python3.4 we now need another Python installation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made recursion the default for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-directory&lt;/span&gt;&lt;/code&gt; with packages.
Before you also had to tell it to recurse into that package or else
it would only include the top level package, but nothing below.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated the man pages, correct mentions of its C++ to C and don’t use
now deprecated options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated the help output which still said that standalone mode implies
recursion into standard library, which is no longer true and even not
recommended.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option to disable the output of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyi&lt;/span&gt;&lt;/code&gt; file when creating an
extension module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed Ubuntu Wily package download, no longer supported by Ubuntu.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release was done to get the fixes and new features out for testing.
There is work started that should make generators use an explicit extra
stack via pointer, and restore instruction state via goto dispatchers at
function entry, but that is not complete.&lt;/p&gt;
&lt;p&gt;This feature, dubbed “goto generators” will remove the need for fibers
(which is itself a lot of code), reduce the memory footprint at run time
for anything that uses a lot of generators, or coroutines.&lt;/p&gt;
&lt;p&gt;Integrating with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; is also a new thing, and once completed
will make use of Nuitka for existing projects automatic and trivial to
do. There is a lot missing for that goal, but we will get there.&lt;/p&gt;
&lt;p&gt;Also, documenting how to run tests against compiled code, if that test
code lives inside of that package, will make a huge difference, as that
will make it easier for people to torture Nuitka with their own test
cases.&lt;/p&gt;
&lt;p&gt;And then of course, nested frames now mean that every function could be
inlined, which was previously not possible due to collisions of frames.
This will pave the route for better optimization in those cases in
future releases.&lt;/p&gt;
&lt;p&gt;The experimental features will require more work, but should make it
easier to use Nuitka for existing projects. Future releases will make
integrating Nuitka dead simple, or that is the hope.&lt;/p&gt;
&lt;p&gt;And last but not least, now that Scons works with Python3, chances are
that Nuitka will more often work out the of the box. The older Python3
versions that still retain the issue are not very widespread.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0528.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2017-10-18T11:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0527.html</id>
    <title>Nuitka Release 0.5.27</title>
    <updated>2017-07-23T17:42:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-27"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release comes a lot of bug fixes and improvements.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, need to add recursed modules immediately to the working set, or
else they might first be processed in second pass, where global names
that are locally assigned, are optimized to the built-in names
although that should not happen. Fixed in 0.5.26.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the accelerated call of methods could crash for some special
types. This had been a regress of 0.5.25, but only happens with
custom extension types. Fixed in 0.5.26.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt; &lt;span class="pre"&gt;def&lt;/span&gt;&lt;/code&gt; functions parameter variables could fail
to properly work with in-place assignments to them. Fixed in 0.5.26.4
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Decorators that overload type checks didn’t pass the
checks for compiled types. Now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isinstance&lt;/span&gt;&lt;/code&gt; and as a result
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; module work fine for them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, imports from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__&lt;/span&gt;&lt;/code&gt; were crashing the
compiler. You are not supposed to do them, because they duplicate the
package code, but they work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; built-in on module level was
crashing the compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: For Linux, BSD and macOS extension modules and shared
libraries using their own &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;$ORIGIN&lt;/span&gt;&lt;/code&gt; to find loaded DLLs resulted in
those not being included in the distribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added more missing implicit dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, implicit imports now also can be optional, as e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_tkinter&lt;/span&gt;&lt;/code&gt; if not installed. Only include those if available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recompile-c-only&lt;/span&gt;&lt;/code&gt; was only working with C compiler as a
backend, but not in the C++ compatibility fallback, where files get
renamed. This prevented that edit and test debug approach with at
least MSVC.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins: The PyLint plug-in didn’t consider the symbolic name
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;import-error&lt;/span&gt;&lt;/code&gt; but only the code &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;F0401&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Implicit exception raises in conditional expressions would crash the
compiler.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for Visual Studio 2017.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python2-for-scons&lt;/span&gt;&lt;/code&gt; to specify the Python2 execute
to use for calling Scons. This should allow using Anaconda Python for
that task.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;References to known unassigned variables are now statically optimized
to exception raises and warned about if the according option is
enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Non-hashable keys in dictionaries are now statically optimized to
exception raises and warned about if the according option is enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable forward propagation for classes too, resulting in some classes
to create only static dictionaries. Currently this never happens for
Python3, but it will, once we can statically optimize &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__prepare__&lt;/span&gt;&lt;/code&gt;
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable inlining of class dictionary creations if they are mere return
statements of the created dictionary. Currently this never happens
for Python3, see above for why.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Selecting the metaclass is now visible in the tree and can
be statically optimized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For executables, we now also use a free list for traceback objects,
which also makes exception cases slightly faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generator expressions no longer require the use of a function call
with a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.0&lt;/span&gt;&lt;/code&gt; argument value to carry the iterator value, instead
their creation is directly inlined.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove “pass through” frames for Python2 list contractions, they are
no longer needed. Minimal gain for generated code, but more
lightweight at compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When compiling Windows x64 with MinGW64 a link library needs to be
created for linking against the Python DLL. This one is now cached
and re-used if already done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use common code for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NameError&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UnboundLocalError&lt;/span&gt;&lt;/code&gt; exception
code raises. In some cases it was creating the full string at compile
time, in others at run time. Since the later is more efficient in
terms of code size, we now use that everywhere, saving a bit of
binary size.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to release unused functions from a module. This saves
memory and can be decided after a full pass.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OrderedDict&lt;/span&gt;&lt;/code&gt; in a couple of places, where they are not
needed, but can be replaced with a later sorting, e.g. temporary
variables by name, to achieve deterministic output. This saves memory
at compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add specialized return nodes for the most frequent constant values,
which are &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;True&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt;. Also a general one, for
constant value return, which avoids the constant references. This
saves quite a bit of memory and makes traversal of the tree a lot
faster, due to not having any child nodes for the new forms of return
statements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Previously the empty dictionary constant reference was specialized to
save memory. Now we also specialize empty set, list, and tuple
constants to the same end. Also the hack to make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt;&lt;/code&gt; not say that
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{}&lt;/span&gt; &lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;{}&lt;/span&gt;&lt;/code&gt; was made more general, mutable constant references and
now known to never alias.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The source references can be marked internal, which means that they
should never be visible to the user, but that was tracked as a flag
to each of the many source references attached to each node in the
tree. Making a special class for internal references avoids storing
this in the object, but instead it’s now a class property.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The nodes for named variable reference, assignment, and deletion got
split into separate nodes, one to be used before the actual variable
can be determined during tree building, and one for use later on.
This makes their API clearer and saves a tiny bit of memory at
compile time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also eliminated target variable references, which were pseudo
children of assignments and deletion nodes for variable names, that
didn’t really do much, but consume processing time and memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;classmethod&lt;/span&gt;&lt;/code&gt;
built-in methods along with type shapes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;open&lt;/span&gt;&lt;/code&gt; built-in on Python3, also adding the
type shape &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;file&lt;/span&gt;&lt;/code&gt; for the result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytearray&lt;/span&gt;&lt;/code&gt; built-in and constant values.
These mutable constants can now be compile time computed as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;frozenset&lt;/span&gt;&lt;/code&gt; built-in and constant values.
These mutable constants can now be compile time computed as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;divmod&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Treat all built-in constant types, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; itself as a
constant. So far we did this only for constant values types, but of
course this applies to all types, giving slightly more compact code
for their uses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect static raises if iterating over non-iterables and warn about
them if the option is enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals&lt;/span&gt;&lt;/code&gt; node into different types, one which needs the
updated value, and one which just makes a copy. Properly track if a
functions needs an updated locals dict, and if it doesn’t, don’t use
that. This gives more efficient code for Python2 classes, and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; using functions in Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build all constant values without use of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pickle&lt;/span&gt;&lt;/code&gt; module which
has a lot more overhead than &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;marshal&lt;/span&gt;&lt;/code&gt;, instead use that for too
large &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; values, non-UTF-8 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; values, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nan&lt;/span&gt;&lt;/code&gt; float,
etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect the linker arch for all Linux platforms using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;objdump&lt;/span&gt;&lt;/code&gt;
instead of only a hand few hard coded ones.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;INCREASE_REFCOUNT&lt;/span&gt;&lt;/code&gt; got fully eliminated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use functions not vulenerable for buffer overflow. This is generally
good and avoids warnings given on OpenBSD during linking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variable closure for classes is different from all functions, don’t
handle the difference in the base class, but for class nodes only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mayBeNone&lt;/span&gt;&lt;/code&gt; doesn’t return &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; which means normally
“unclear”, but &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt; instead, since it’s always clear for those
cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comparison nodes were using the general comparison node as a base
class, but now a proper base class was added instead, allowing for
cleaner code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Valgrind test runners got changed to using proper tool namespace for
their code and share it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made construct case generation code common testing code for reuse in
the speedcenter web site. The code also has minor beauty bugs which
will then become fixable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;appdirs&lt;/span&gt;&lt;/code&gt; package to determine place to store the downloaded
copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;depends.exe&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code still mentioned C++ in a lot of places, in comments or
identifiers, which might be confusing readers of the code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code objects now carry all information necessary for their creation,
and no longer need to access their parent to determine flag values.
That parent is subject to change in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Our import sorting wrapper automatically detects imports that could
be local and makes them so, removing a few existing ones and
preventing further ones on the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleanups and annotations to become Python3 PyLint clean as well. This
found e.g. that source code references only had &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__cmp__&lt;/span&gt;&lt;/code&gt; and need
rich comparison to be fully portable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The test runner for construct tests got cleaned up and the constructs
now avoid using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; so as to not need conversion for Python3
execution as much.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The main test runner got cleaned up and uses common code making it
more versatile and robust.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not run test in debugger if CPython also segfaulted executing the
test, then it’s not a Nuitka issue, so we can ignore that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improve the way the Python to test with is found in the main test
runner, prefer the running interpreter, then &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; and registry on
Windows, this will find the interesting version more often.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for “Landscape.io” to ignore the inline copies of code,
they are not under our control.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The test runner for Valgrind got merged with the usage for constructs
and uses common code now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Construct generation is now common code, intended for sharing it with
the Speedcenter web site generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rebased Python 3.6 test suite to 3.6.1 as that is the Python
generally used now.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added inline copy of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;appdirs&lt;/span&gt;&lt;/code&gt; package from PyPI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added credits for RedBaron and isort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--experimental&lt;/span&gt;&lt;/code&gt; flag is now creating a list of indications and
more than one can be used that way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The PyLint runner can also work with Python3 pylint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Nuitka Speedcenter got more fine tuning and produces more tags to
more easily identify trends in results. This needs to become more
visible though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The MSI files are also built on AppVeyor, where their building will
not depend on me booting Windows. Getting these artifacts as
downloads will be the next step.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release improves many areas. The variable closure taking is now
fully transparent due to different node types, the memory usage dropped
again, a few obvious missing static optimizations were added, and many
built-ins were completed.&lt;/p&gt;
&lt;p&gt;This release again improves the scalability of Nuitka, which again uses
less memory than before, although not an as big jump as before.&lt;/p&gt;
&lt;p&gt;This does not extend or use special C code generation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; or
any type yet, which still needs design decisions to proceed and will
come in a later release.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0527.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2017-07-23T17:42:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0526.html</id>
    <title>Nuitka Release 0.5.26</title>
    <updated>2017-06-11T09:10:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-26"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release comes after a long time and contains large amounts of
changes in all areas. The driving goal was to prepare generating C
specific code, which is still not the case, but this is very likely
going to change soon. However this release improves all aspects.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, for star imports didn’t check the values from the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__all__&lt;/span&gt;&lt;/code&gt; iterable, if they were string values which could cause
problems at run time.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Module level&lt;/span&gt;
&lt;span class="n"&gt;__all__&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt;

&lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;span class="c1"&gt;# other module:&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, for star imports, also didn’t check for values from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__all__&lt;/span&gt;&lt;/code&gt;
if they actually exist in the original values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Corner cases of imports should work a lot more precise, as the level
of compatibility for calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; went from absurd to
insane.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fixed detection of uninstalled Python versions (not for all
users and DLL is not in system directory). This of course only
affected the accelerated mode, not standalone mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Scan directories for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pyd&lt;/span&gt;&lt;/code&gt; files for used DLLs as well.
This should make the PyQt5 wheel work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Fix, coroutines could have different code objects for the
object and the frame using by it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, slices with built-in names crashed the compiler.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the C11 via C++ compatibility uses symlinks tp C++ filenames
where possible instead of making a copy from the C source. However,
even on Linux that may not be allowed, e.g. on a DOS file system.
Added fallback to using full copy in that case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Fix coroutines to close the “yield from” where an
exception is thrown into them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, list contractions should have their own frame too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linux: Copy the “rpath” of compiling Python binary to the created
binary. This will make compiled binaries using uninstalled Python
versions transparently find the Python shared library.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Add the “rpath” of the compiling Python binary to the
search path when checking for DLL dependencies on Linux. This fixes
standalone support for Travis and Anaconda on Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons: When calling scons, also try to locate a Python2 binary to
overcome a potential Python3 virtualenv in which Nuitka is running.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Ignore more Windows only encodings on non-Windows.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Support for Python 3.6 with only few corner cases not supported yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added options &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-arch&lt;/span&gt;&lt;/code&gt; to pick 32 or 64 bits Python target
of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-version&lt;/span&gt;&lt;/code&gt; argument.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for more kinds of virtualenv configurations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uninstalled Python versions such as Anaconda will work fine in
accelerated mode, except on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The node tree children are no longer stored in a separate dictionary,
but in the instance dictionary as attributes, making the tree more
lightweight and in principle faster to access. This also saved about
6% of the memory usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The memory usage of Nuitka for the Python part has fallen by roughly
40% due to the use of new style classes, and slots where that is
possible (some classes use multiple inheritance, where they don’t
work), and generally by reducing useless members e.g. in source code
references. This of course also will make things compiled faster (the
C compilation of course is not affected by this.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code generation for frames was creating the dictionary for the
raised exception by making a dictionary and then adding all
variables, each tested to be set. This was a lot of code for each
frame specific, and has been replaced by a generic “attach” mechanism
which merely stores the values, and only takes a reference. When
asked for frame locals, it only then builds the dictionary. So this
is now only done, when that is absolutely necessary, which it
normally never is. This of course makes the C code much less verbose,
and actual handling of exceptions much more efficient.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For imports, we now detect for built-in modules, that their import
cannot fail, and if name lookups can fail. This leads to less code
generated for error handling of these. The following code now e.g.
fully detects that no &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ImportError&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AttributeError&lt;/span&gt;&lt;/code&gt; will
occur.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;__builtin__&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;ImportError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;builtins&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added more type shapes for built-in type calls. These will improve
type tracing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiled frames now have a free list mechanism that should speed up
frames that recurse and frames that exit with exceptions. In case of
an exception, the frame ownership is immediately transferred to the
exception making it easier to deal with.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The free list implementations have been merged into a new common one
that can be used via macro expansion. It is now type agnostic and be
slightly more efficient too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also optimize “true” division and “floor division”, not only the
default division of Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed the need for statement context during code generation making
it less memory intensive and faster.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Now always uses the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; built-in node for all kinds of
imports and directly optimizes and recursion into other modules based
on that kind of node, instead of a static variant. This removes
duplication and some incompatibility regarding defaults usage when
doing the actual imports at run time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split the expression node bases and mixin classes to a dedicated
module, moving methods that only belong to expressions outside of the
node base, making for a cleaner class hierarchy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleaned up the class structure of nodes, added base classes for
typical compositions, e.g. expression with and without children,
computation based on built-in, etc. while also checking proper
ordering of base classes in the metaclass.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved directory and file operations to dedicated module, making also
sure it is more generally used. This makes it easier to make more
error resilient deletions of directories on e.g. Windows, where locks
tend to live for short times beyond program ends, requiring second
attempts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code generation for existing supported types, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject&lt;/span&gt; &lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;struct&lt;/span&gt; &lt;span class="pre"&gt;Nuitka_CellObject&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; is now done via a
C type class hierarchy instead of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;elif&lt;/span&gt;&lt;/code&gt; sequences.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Closure taking is now always done immediately correctly and
references are take for closure variables still needed, making sure
the tree is correct and needs no finalization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When doing variable traces, initialize more traces immediately so it
can be more reliable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code to setup a function for local variables and clean it up has been
made common code instead of many similar copies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code was treating the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f_executing&lt;/span&gt;&lt;/code&gt; frame member as if it were
a counter with increases and decreases. Turn it into a mere boolean
value and hide its usage behind helper functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “maybe local variables” are no more. They were replaced by a new
locals dict access node with a fallback to a module or closure
variable should the dictionary not contain the name. This avoids many
ugly checks to not do certain things for that kind of variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We now detect “exec” and “unqualified exec” as well as “star import”
ahead of time as flags of the function to be created. We no longer
need to mark functions as we go.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handle “true”, “floor” and normal division properly by applying
future flags to decide which one to use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We now use symbolic identifiers in all PyLint annotations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The release scripts started to move into &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.tools.release&lt;/span&gt;&lt;/code&gt; so
they get PyLint checks, auto-format and proper code reuse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;INCREASE_REFCOUNT_X&lt;/span&gt;&lt;/code&gt; was removed, it got replaced with
proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_XINCREF&lt;/span&gt;&lt;/code&gt; usages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;INCREASE_REFCOUNT&lt;/span&gt;&lt;/code&gt; got reduced further, e.g. no
generated code uses it anymore, and only a few compiled types do. The
function was once required before “C-ish” lifted the need to do
everything in one single function call.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;More robust deletion of directories, temporary stages used by CPython
test suites, and standalone directories during test execution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved tests common code into &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.tools.testing&lt;/span&gt;&lt;/code&gt; namespace and
use it from there. The code now is allowed to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.utils&lt;/span&gt;&lt;/code&gt;
and therefore often better implementations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made standalone binaries robust against GTK theme access, checking
the Python binary (some site.py files do that),&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added repository for Ubuntu Zesty (17.04) for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for testing with Travis to complement the internal
Buildbot based infrastructure and have pull requests on GitHub
automatically tested before merge.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;factory&lt;/span&gt;&lt;/code&gt; branch is now also on GitHub.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed MSI for Python3.4 32 bits. It seems impossible to co-install
this one with the 64 bits variant. All other versions are provided
for both bit sizes still.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release marks huge progress. The node tree is now absolutely clean,
the variable closure taking is fully represented, and code generation is
prepared to add another type, e.g. for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; for which work has
already started.&lt;/p&gt;
&lt;p&gt;On a practical level, the scalability of the release will have increased
very much, as this uses so much less memory, generates simpler C code,
while at the same time getting faster for the exception cases.&lt;/p&gt;
&lt;p&gt;Coming releases will expand on the work of this release.&lt;/p&gt;
&lt;p&gt;Frame objects should be allowed to be nested inside a function for
better re-formulations of classes and contractions of all kinds, as well
as real inline of functions, even if they could raise.&lt;/p&gt;
&lt;p&gt;The memory savings could be even larger, if we stopped doing multiple
inheritance for more node types. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__slots__&lt;/span&gt;&lt;/code&gt; were and the child
API change could potentially make things not only more compact, but
faster to use too.&lt;/p&gt;
&lt;p&gt;And also once special C code generation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; is done, it will
set the stage for more types to follow (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt;, etc). Only
this will finally start to give the C type speed we are looking for.&lt;/p&gt;
&lt;p&gt;Until then, this release marks a huge cleanup and progress to what we
already had, as well as preparing the big jump in speed.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0526.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2017-06-11T09:10:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0525.html</id>
    <title>Nuitka Release 0.5.25</title>
    <updated>2017-01-25T06:27:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-25"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a huge amount of bug fixes, lots of optimization
gains, and many new features. It also presents many organizational
improvements, and many cleanups.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Coroutine methods using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; were crashing the
compiler. Fixed in 0.5.24.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.3: Generator return values were not properly transmitted in
case of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Better interoperability between compiled coroutines and
uncompiled generator coroutines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Added support to compile in Python debug mode under
Windows too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generators with arguments were using two code objects, one with, and
one without the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CO_NOFREE&lt;/span&gt;&lt;/code&gt; flag, one for the generator object
creating function, and one for the generator object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: The duplicate code objects for generators with arguments
lead to interoperability issues with between such compiled generator
coroutines and compiled coroutines. Fixed in 0.5.24.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: On some Linux variants, e.g. Debian Stretch and Gentoo,
the linker needs more flags to really compile to a binary with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RPATH&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: For set literal values, insertion order is wrong on
some versions of Python, we now detect the bug and emulate it if
necessary, previous Nuitka was always correct, but incompatible.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# the only element of the set should be 1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Make the batch files detect where they live at run time,
instead of during &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setup.py&lt;/span&gt;&lt;/code&gt;, making it possible to use them for
all cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added package paths to DLL scan for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;depends.exe&lt;/span&gt;&lt;/code&gt;, as
with wheels there now sometimes live important DLLs too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the clang mode was regressed and didn’t work anymore, breaking
the macOS support entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: For imports, we were passing for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals&lt;/span&gt;&lt;/code&gt; argument a
real dictionary with actual values. That is not what CPython does, so
stopped doing it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, for raised exceptions not passing the validity tests, they could
be used after free, causing crashes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the environment &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CC&lt;/span&gt;&lt;/code&gt; wasn’t working unless also specifying
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CXX&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The value of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; in module mode was wrong, and
didn’t point to the compiled module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Better support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-debug&lt;/span&gt;&lt;/code&gt; for installations that
have both variants, it is now possible to switch to the right
variant.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added parsing for shebang to Nuitka. When compiling an executable,
now Nuitka will check of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;#!&lt;/span&gt;&lt;/code&gt; portion indicates a different
Python version and ask the user to clarify with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-version&lt;/span&gt;&lt;/code&gt;
in case of a mismatch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Python flag &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-O&lt;/span&gt;&lt;/code&gt;, which allows to
disable assertions and remove doc strings.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Faster method calls, combining attribute lookup and method call into
one, where order of evaluation with arguments doesn’t matter. This
gives really huge relative speedups for method calls with no
arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster attribute lookup in general for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;object&lt;/span&gt;&lt;/code&gt; descendants, which
is all new style classes, and all built-in types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added dedicated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; built-in implementation for Python2 and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt; for Python3. This makes those faster while also solving
ordering problems when creating constants of these types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sum&lt;/span&gt;&lt;/code&gt; again, using quick iteration interface and specialized
quick iteration code for typical standard type containers, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiled generators were making sure &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; was set after
their iteration, although most users were only going to clear it. Now
only the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;send&lt;/span&gt;&lt;/code&gt; method, which really needs that does it. This speed
up the closing of generators quite a bit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiled generators were preparing a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw&lt;/span&gt;&lt;/code&gt; into non-started
compilers, to be checked for immediately after their start. This is
now handled in a generic way for all generators, saving code and
execution time in the normal case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiled generators were applying checks only useful for manual
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;send&lt;/span&gt;&lt;/code&gt; calls even during iteration, slowing them down.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiled generators could duplicate code objects due to handling a
flag for closure variables differently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For compiled frames, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f_trace&lt;/span&gt;&lt;/code&gt; is not writable, but was taking
and releasing references to what must be &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;, which is not
useful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Not passing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals&lt;/span&gt;&lt;/code&gt; to import calls make it less code and faster
too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;This release also prepares Python 3.6 support, it includes full
language support on the level of CPython 3.6.0 with the sole
exception of the new generator coroutines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The improved mode is now the default, and full compatibility is now
the option, used by test suites. For syntax errors, improved mode is
always used, and for test suites, now only the error message is
compared, but not call stack or caret positioning anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed long deprecated option “–no-optimization”. Code generation
too frequently depends on not seeing unoptimized code. This has been
hidden and broken long enough to finally remove it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Python3.5 numbers to Speedcenter. There are now
also tags for speedcenter, indicating how well “develop” branch fares
in comparison to the stable branch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With a new tool, source code and Developer Manual contents can be
kept in sync, so that descriptions can be quoted there. Eventually a
full Sphinx documentation might become available, but for now this
makes it workable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Ubuntu Yakkety (16.10) for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Fedora 25 for download.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved the tools to compare CPython output, to sort import statements
(isort) to auto-format the source code (Redbaron usage), and to check
with PyLint to a common new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.tools&lt;/span&gt;&lt;/code&gt; package, runnable with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt; modules and dedicated runners in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bin&lt;/span&gt;&lt;/code&gt; directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The tools now share code to find source files, or have it for the
first time, and other things, e.g. finding needed binaries on Windows
installations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No longer patch traceback objects dealloc function. Should not be
needed anymore, and most probably was only bug hiding.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved handling of ast nodes related to import handling to the proper
reformulation module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved statement generation code to helpers module, making it
accessible without cyclic dependencies that require local imports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed deprecated method for getting constant code objects in favor
of the new way of doing it. Both methods were still used, making it
harder to analyse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed useless temporary variable initializations from complex call
helper internal functions. They worked around code generation issues
that have long been solved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The ABI flags are no longer passed to Scons together with the
version.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support to detect and to switch debug Python where
available to also be able to execute reference counting tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added the CPython 3.3 test suite, after cleaning up the worst bits of
it, and added the brandnew 3.6 test suite with a minimal set of
changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the original 3.4 test suite instead of the one that comes from
Debian as it has patched quite a few issues that never made it
upstream, and might cause crashes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More construct tests, making a difference between old style classes,
which have instances and new style classes, with their objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It is now possible to run a test program with Python3 and Valgrind.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The quick iteration is a precursor to generally faster iteration over
unknown object iterables. Expanding this to general code generation, and
not just the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sum&lt;/span&gt;&lt;/code&gt; built-in, might yield significant gains for normal
code in the future, once we do code generation based on type inference.&lt;/p&gt;
&lt;p&gt;The faster method calls complete work that was already prepared in this
domain and also will be expanded to more types than compiled functions.
More work will be needed to round this up.&lt;/p&gt;
&lt;p&gt;Adding support for 3.6.0 in the early stages of its release, made sure
we pretty much have support for it ready right after release. This is
always a huge amount of work, and it’s good to catch up.&lt;/p&gt;
&lt;p&gt;This release is again a significant improvement in performance, and is
very important to clean up open ends. Now the focus of coming releases
will now be on both structural optimization, e.g. taking advantage of
the iterator tracing, and specialized code generation, e.g. for those
iterations really necessary to use quick iteration code.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0525.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2017-01-25T06:27:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0524.html</id>
    <title>Nuitka Release 0.5.24</title>
    <updated>2016-11-15T09:43:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-24"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is again focusing on optimization, this time very heavily
on the generator performance, which was found to be much slower than
CPython for some cases. Also there is the usual compatibility work and
improvements for Pure C support.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: The 3.5.2 coroutine new protocol implementation was using
the wrapper from CPython, but it’s not part of the ABI on Windows.
Have our own instead. Fixed in 0.5.23.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fixed second compilation with MSVC failing. The files
renamed to be C++ files already existed, crashing the compilation.
Fixed in 0.5.23.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mac OS: Fixed creating extension modules with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.so&lt;/span&gt;&lt;/code&gt; suffix. This is
now properly determined by looking at the importer details, leading
to correct suffix on all platforms. Fixed in 0.5.23.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian: Don’t depend on a C++ compiler primarily anymore, the C
compiler from GNU or clang will do too. Fixed in 0.5.23.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pure C: Adapted scons compiler detecting to properly consider C11
compilers from the environment, and more gracefully report things.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python2: Generators were saving and restoring exceptions, updating
the variables &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exc_type&lt;/span&gt;&lt;/code&gt; for every context switch, making it
really slow, as these are 3 dictionary updates, normally not needed.
Now it’s only doing it if it means a change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sped up creating generators, coroutines and coroutines by attaching
the closure variable storage directly to the object, using one
variable size allocation, instead of two, once of which was a
standard &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;malloc&lt;/span&gt;&lt;/code&gt;. This makes creating them easier and avoids
maintaining the closure pointer entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using dedicated compiled cell implementation similar to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyCellObject&lt;/span&gt;&lt;/code&gt; but fully under our control. This allowed for
smaller code generated, while still giving a slight performance
improvement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added free list implementation to cache generator, coroutines, and
function objects, avoiding the need to create and delete this kind of
objects in a loop.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for the built-in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sum&lt;/span&gt;&lt;/code&gt;, making slight optimizations
to be much faster when iterating over lists and tuples, as well as
fast &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; sum for Python2, and much faster &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; sums too.
This is using a prototype version of a “qiter” concept.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide type shape for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; calls that are not constant too,
allowing for better optimization related to those.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added workarounds for locks being held by Virus Scanners on Windows
to our test runner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced constructs that test generator expressions to more clearly
show the actual construct cost.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added construct tests for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sum&lt;/span&gt;&lt;/code&gt; built-in on various types of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; containers, making sure we can do all of those really fast.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release improves very heavily on generators in Nuitka. The memory
allocator is used more cleverly, and free lists all around save a lot of
interactions with it. More work lies ahead in this field, as these are
not yet as fast as they should be. However, at least Nuitka should be
faster than CPython for these kind of usages now.&lt;/p&gt;
&lt;p&gt;Also, proper pure C in the Scons is relatively important to cover more
of the rarer use cases, where the C compiler is too old.&lt;/p&gt;
&lt;p&gt;The most important part is actually how &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sum&lt;/span&gt;&lt;/code&gt; optimization is staging
a new kind of approach for code generation. This could become the
standard code for iterators in loops eventually, making &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt; loops
even faster. This will be for future releases to expand.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0524.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2016-11-15T09:43:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0523.html</id>
    <title>Nuitka Release 0.5.23</title>
    <updated>2016-10-03T16:55:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-23"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is focusing on optimization, the most significant part for
the users being enhanced scalability due to memory usage, but also break
through structural improvements for static analysis of iterators and the
debut of type shapes and value shapes, giving way to “shape tracing”.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fix support Python 3.5.2 coroutine changes. The checks got added for
improved mode for older 3.5.x, the new protocol is only supported
when run with that version or higher.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, was falsely optimizing away unused iterations for non-iterable
compile time constants.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# needs to raise.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eval&lt;/span&gt;&lt;/code&gt; must not attempt to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;strip&lt;/span&gt;&lt;/code&gt; memoryviews. The
was preventing it from working with that type.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, calling &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; without any arguments was crashing the
compiler. Also the exception raised for anything but 1 or 3 arguments
was claiming that only 3 arguments were allowed, which is not the
compatible thing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Fix, follow enhanced error checking for complex call
handling of star arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;x&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;x,&lt;/span&gt; &lt;span class="pre"&gt;y&lt;/span&gt;&lt;/code&gt; re-formulation was doing
two &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; calls instead of re-using the module value.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Uses only about 66% of the memory compared to last release, which is
very important step for scalability independent of re-loading. This
was achieved by making sure to break loop traces and their reference
cycle when they become unused.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Properly detect the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;len&lt;/span&gt;&lt;/code&gt; of multiplications at compile time from
newly introduces value shapes, so that this is e.g. statically
optimized.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10000000000&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Due to newly introduced type shapes, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;len&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iter&lt;/span&gt;&lt;/code&gt; now
properly detect more often if values will raise or not, and warn
about detected raises.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Will always raise&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Due to newly introduced “iterator tracing”, we can now properly
detect if the length of an unpacking matches its source or not. This
allows to remove the check of the generic re-formulations of
unpackings at compile time.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;  &lt;span class="c1"&gt;# Will never raise due to unpacking&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;  &lt;span class="c1"&gt;# Will always raise, 3 items cannot unpack to 2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for optimization of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; built-in for
Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; iterable constant values,
pre-building those constants ahead of time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Added support and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt; iterable constant values,
pre-building those constants ahead of time. This brings optimization
support for Python3 ranges to what was available for Python2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid having a special node variange for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt; with no arguments,
but create the exception raising node directly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specialized constant value nodes are using less generic
implementations to query e.g. their length or iteration capabilities,
which should speed up many checks on them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;format&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ascii&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The movement to pure C got the final big push. All C++ only idoms of
C++ were removed, and everything works with C11 compilers. A C++03
compiler can be used as a fallback, in case of MSVC or too old gcc
for instance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using pure C, MinGW64 6x is now working properly. The latest version
had problems with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hypot&lt;/span&gt;&lt;/code&gt; related changes in the C++ standard
library. Using C11 solves that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This release also prepares Python 3.6 support, it includes full
language support on the level of CPython 3.6.0b1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The CPython 3.6 test suite was run with Python 3.5 to ensure bug
level compatibility, and had a few findings of incompatibilities.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The last holdouts of classes in Nuitka were removed, and many idioms
of C++ were stopped using.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved range related helper functions to a dedicated include file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt; &lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; to detect Python3 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; handling or
actual &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytes&lt;/span&gt;&lt;/code&gt; type existence.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trace collections were using a mix-in that was merged with the base
class that every user of it was having.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added more static optimization tests, a lot more has become feasible
to decide at run time, and is now done. These are to detect
regressions in that domain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The CPython 3.6 test suite is now also run with CPython 3.5 which
found some incompatibilities.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release marks a huge step forward. We are having the structure for
type inference now. This will expand in coming releases to cover more
cases, and there are many low hanging fruits for optimization.
Specialized codes for variable versions of certain known shapes seems
feasible now.&lt;/p&gt;
&lt;p&gt;Then there is also the move towards pure C. This will make the backend
compilation lighter, but due to using C11, we will not suffer any loss
of convenience compared to “C-ish”. The plan is to use continue to use
C++ for compilation for compilers not capable of supporting C11.&lt;/p&gt;
&lt;p&gt;The amount of static analysis done in Nuitka is now going to quickly
expand, with more and more constructs predicted to raise errors or
simplified. This will be an ongoing activity, as many types of
expressions need to be enhanced, and only one missing will not let it
optimize as well.&lt;/p&gt;
&lt;p&gt;Also, it seems about time to add dedicated code for specific types to be
as fast as C code. This opens up vast possibilities for acceleration and
will lead us to zero overhead C bindings eventually. But initially the
drive is towards enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;import&lt;/span&gt;&lt;/code&gt; analysis, to become able to know
the precise module expected to be imported, and derive type information
from this.&lt;/p&gt;
&lt;p&gt;The coming work will attack to start whole program optimization, as well
as enhanced local value shape analysis, as well specialized type code
generation, which will make Nuitka improve speed.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0523.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2016-10-03T16:55:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0522.html</id>
    <title>Nuitka Release 0.5.22</title>
    <updated>2016-08-17T14:35:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-22"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is mostly an intermediate release on the way to the large
goal of having per module compilation that is cacheable and requires far
less memory for large programs. This is currently in progress, but
required many changes that are in this release, more will be needed.&lt;/p&gt;
&lt;p&gt;It also contains a bunch of bug fixes and enhancements that are worth to
be released, and the next changes are going to be more invasive.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Classes with decorated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt; functions could
miss out on the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; decorator that is implicit. It’s now
applied always, unless of course it’s already done manually. This
corrects an issue found with Pandas. Fixed in 0.5.22.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: For at least Python 3.4 or higher, it could happen that
the locale needed was not importable. Fixed in 0.5.22.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Do not falsely assume that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt; expressions cannot
raise on boolean expressions, since those arguments might raise
during creation. This could lead to wrong optimization. Fixed in
0.5.22.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Do not include system specific C libraries in the
distribution created. This would lead to problems for some
configurations on Linux in cases the glibc is no longer compatible
with newer or older kernels. Fixed in 0.5.22.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-directory&lt;/span&gt;&lt;/code&gt; option didn’t check with decision
mechanisms for module inclusion, making it impossible to avoid some
things.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Introduced specialized constant classes for empty dictionaries and
other special constants, e.g. “True” and “False”, so that they can
have more hard coded properties and save memory by sharing constant
values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “technical” sharing of a variable is only consider for variables
that had some sharing going in the first place, speeing things up
quite a bit for that still critical check.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory savings coming from enhanced trace storage are already visible
at about 1%. That is not as much as the reloading will mean, but
still helpful to use less overall.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The global variable registry was removed. It was in the way of
unloading and reloading modules easily. Instead variables are now
attached to their owner and referenced by other users. When they are
released, these variables are released.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Global variable traces were removed. Instead each variable has a list
of the traces attached to it. For non-shared variables, this allows
to sooner tell attributes of those variables, allowing for sooner
optimization of them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No longer trace all initial users of a variable, just merely if there
were such and if it constitutes sharing syntactically too. Not only
does this save memory, it avoids useless references of the variable
to functions that stop using it due to optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create constant nodes via a factory function to avoid non-special
instances where variants exist that would be faster to use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved the C string functions to a proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.utils.CStrings&lt;/span&gt;&lt;/code&gt;
package as we use it for better code names of functions and modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;functions&lt;/span&gt;&lt;/code&gt; and explicit child node of modules, which makes
their use more generic, esp. for re-loading modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have a dedicated function for building frame nodes, making it easier
to see where they are created.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is the result of a couple of months work, and somewhat
means that proper re-loading of cached results is becoming in sight. The
reloading of modules still fails for some things, and more changes will
be needed, but with that out of the way, Nuitka’s footprint is about to
drop and making it then absolutely scalable. Something considered very
important before starting to trace more information about values.&lt;/p&gt;
&lt;p&gt;This next thing big ought to be one thing that structurally holds Nuitka
back from generating C level performance code with say integer
operations.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0522.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2016-08-17T14:35:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0521.html</id>
    <title>Nuitka Release 0.5.21</title>
    <updated>2016-04-25T12:54:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-21"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release focused on scalability work. Making Nuitka more usable in
the common case, and covering more standalone use cases.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Support for newer MinGW64 was broken by a workaround for
older MinGW64 versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Added support for the (unofficial) C-Python API
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_GetArgcArgv&lt;/span&gt;&lt;/code&gt; that was causing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;prctl&lt;/span&gt;&lt;/code&gt; module to fail loading
on ARM platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The proper error message template for complex call
arguments is now detected as compile time. There are changes coming,
that are already in some pre-releases of CPython.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Wasn’t properly ignoring &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Tools&lt;/span&gt;&lt;/code&gt; and other directories
in the standard library.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Detect the MinGW compiler arch and compare it to the Python
arch. In case of a mismatch, the compiler is not used. Otherwise
compilation or linking gives hard to understand errors. This also
rules out MinGW32 as a compiler that can be used, as its arch doesn’t
match MinGW64 32 bits variant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compile modules in two passes with the option to specify which
modules will be considered for a second pass at all (compiled without
program optimization) or even become bytecode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The developer mode installation of Nuitka in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt; mode with
the command &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt; &lt;span class="pre"&gt;-e&lt;/span&gt; &lt;span class="pre"&gt;nuitka_git_checkout_dir&lt;/span&gt;&lt;/code&gt; is now
supported too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Popular modules known to not be performance relevant are no longer C
compiled, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy.distutils&lt;/span&gt;&lt;/code&gt; and many others frequently
imported (from some other module), but mostly not used and definitely
not performance relevant.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The progress tracing and the memory tracing and now more clearly
separate and therefore more readable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved RPM related files to new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rpm&lt;/span&gt;&lt;/code&gt; directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved documentation related files to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doc&lt;/span&gt;&lt;/code&gt; directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Converted import sorting helper script to Python and made it run
fast.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The Buildbot infrastructure for Nuitka was updated to Buildbot 0.8.12
and is now maintained up to date with Ansible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upgraded the Nuitka bug tracker to Roundup 1.5.1 to which I had
previously contributed security fixes already active.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added SSL certificates from Let’s Encrypt for the web server.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release advances the scalability of Nuitka somewhat. The two pass
approach does not yet carry all possible fruits. Caching of single pass
compiled modules should follow for it to become consistently fast.&lt;/p&gt;
&lt;p&gt;More work will be needed to achieve fast and scalable compilation, and
that is going to remain the focus for some time.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0521.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2016-04-25T12:54:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0520.html</id>
    <title>Nuitka Release 0.5.20</title>
    <updated>2016-03-21T09:34:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-20"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is mostly about catching up with issues. Most address
standalone problems with special modules, but there are also some
general compatibility corrections, as well as important fixes for
Python3.5 and coroutines and to improve compatibility with special
Python variants like Anaconda under the Windows system.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Standalone Python3.5: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_decimal&lt;/span&gt;&lt;/code&gt; module at least is using a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; that doesn’t match the name at load time, causing
programs that use it to crash.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: For Python3.3 the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__loader__&lt;/span&gt;&lt;/code&gt; attribute is now set
in all cases, and it needs to have a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__module__&lt;/span&gt;&lt;/code&gt; attribute. This
makes inspection as done by e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;flask&lt;/span&gt;&lt;/code&gt; working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing hidden dependencies for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Tkinter&lt;/span&gt;&lt;/code&gt; module,
adding support for this to work properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Detecting the Python DLL and EXE used at compile time and
preserving this information use during backend compilation. This
should make sure we use the proper ones, and avoids hacks for
specific Python variants, enhancing the support for Anaconda,
WinPython, and CPython installations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-debug&lt;/span&gt;&lt;/code&gt; flag now properly detects if the run
time is supporting things and error exits if it’s not available. For
a CPython3.5 installation, it will switch between debug and non-debug
Python binaries and DLLs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added plug-in for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Pwm&lt;/span&gt;&lt;/code&gt; package to properly combine
it into a single file, suitable for distribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Packages from standard library, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xml&lt;/span&gt;&lt;/code&gt; now have
proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt; as a list and not as a string value, which breaks
code of e.g. PyXML.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;twisted.protocols.tls&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: When finalizing coroutines that were not finished, a
corruption of its reference count could happen under some
circumstances.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing DLL dependency of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;uuid&lt;/span&gt;&lt;/code&gt; module at
run time, which uses ctypes to load it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for Anaconda Python on this Linux. Both accelerated and
standalone mode work now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for standalone mode on FreeBSD.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The plug-in framework was expanded with new features to allow
addressing some specific issues.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved memory related stuff to dedicated utils package
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.utils.MemoryUsage&lt;/span&gt;&lt;/code&gt; as part of an effort to have more
topical modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plugins how have a dedicated module through which the core accesses
the API, which was partially cleaned up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No more “early” and “late” import detections for standalone mode. We
now scan everything at the start.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release focused on expanding plugins. These were then used to
enhance the success of standalone compatibility. Eventually this should
lead to a finished and documented plug-in API, which will open up the
Nuitka core to easier hacks and more user contribution for these topics.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0520.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2016-03-21T09:34:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0519.html</id>
    <title>Nuitka Release 0.5.19</title>
    <updated>2016-02-02T09:04:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-19"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release brings optimization improvements for dictionary using code.
This is now lowering subscripts to dictionary accesses where possible
and adds new code generation for known dictionary values. Besides this
there is the usual range of bug fixes.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, attribute assignments or deletions where the assigned value or
the attribute source was statically raising crashed the compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the order of evaluation during optimization was considered in
the wrong order for attribute assignments source and value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;g++&lt;/span&gt;&lt;/code&gt; is the path, it was not used
automatically, but now it is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Detect the 32 bits variant of MinGW64 too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: The finalize of compiled generators could corrupt
reference counts for shared generator objects. Fixed in 0.5.18.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: The finalize of compiled coroutines could corrupt
reference counts for shared generator objects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When a variable is known to have dictionary shape (assigned from a
constant value, result of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; built-in, or a general dictionary
creation), or the branch merge thereof, we lower subscripts from
expecting mapping nodes to dictionary specific nodes. These generate
more efficient code, and some are then known to not raise an
exception.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;someFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The above function is not yet fully optimized (dictionary key/value
tracing is not yet finished), however it at least knows that no
exception can raise from assigning &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;value[&amp;quot;c&amp;quot;]&lt;/span&gt;&lt;/code&gt; anymore and creates
more efficient code for the typical &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;result&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;{}&lt;/span&gt;&lt;/code&gt; functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of “logical” sharing during optimization has been replaced
with checks for actual sharing. So closure variables that were
written to in dead code no longer inhibit optimization of the then no
more shared local variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Global variable traces are now faster to decide definite writes
without need to check traces for this each time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;No more using “logical sharing” allowed to remove that function
entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using “technical sharing” less often for decisions during
optimization and instead rely more often on proper variable registry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connected variables with their global variable trace statically avoid
the need to check in variable registry for it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed old and mostly unused “assume unclear locals” indications, we
use global variable traces for this now.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release aimed at dictionary tracing. As a first step, the value
assign is now traced to have a dictionary shape, and this this then used
to lower the operations which used to be normal subscript operations to
mapping, but now can be more specific.&lt;/p&gt;
&lt;p&gt;Making use of the dictionary values knowledge, tracing keys and values
is not yet inside the scope, but expected to follow. We got the first
signs of type inference here, but to really take advantage, more
specific shape tracing will be needed.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0519.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2016-02-02T09:04:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-progress-winter-2015.html</id>
    <title>Nuitka Progress in 2015</title>
    <updated>2016-01-29T08:08:54+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-progress-in-2015"&gt;

&lt;p&gt;For quite a bit, there have been no status posts, not for lack of news,
but a lot has happened indeed. I just seem to post a &lt;em&gt;lot&lt;/em&gt; more to the
mailing list than I do here. Especially about unfinished stuff, which is
essentially for a project like Nuitka everything that’s going on.&lt;/p&gt;
&lt;p&gt;Like I previously said, I am shy to make public postings about
unfinished stuff and that’s going to continue. But I am breaking it, to
keep you up to date with where Nuitka has been going lately.&lt;/p&gt;
&lt;p&gt;And with release focuses, I have been making some actual changes that I
think are worth talking about.&lt;/p&gt;
&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-progress-in-2015" id="id1"&gt;Nuitka Progress in 2015&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#ssa-single-state-assignment-form" id="id2"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#function-inlining" id="id3"&gt;Function Inlining&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#scalability" id="id4"&gt;Scalability&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#parameter-parsing" id="id5"&gt;Parameter Parsing&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#variable-error-messages" id="id6"&gt;Variable Error Messages&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#code-objects" id="id7"&gt;Code Objects&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#optimization" id="id8"&gt;Optimization&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#compatibility" id="id9"&gt;Compatibility&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#performance" id="id10"&gt;Performance&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#graphs-and-benchmarks" id="id11"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#standalone" id="id12"&gt;Standalone&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#other-stuff" id="id13"&gt;Other Stuff&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#europython-2015" id="id14"&gt;EuroPython 2015&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#funding" id="id15"&gt;Funding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#collaborators" id="id16"&gt;Collaborators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#videos" id="id17"&gt;Videos&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#twitter" id="id18"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#future" id="id19"&gt;Future&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#release-focus" id="id20"&gt;Release Focus&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#summary" id="id21"&gt;Summary&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="ssa-single-state-assignment-form"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The SSA using release has been made last summer. Recent releases have
lifted more and more restrictions on where and now it is applied and
made sure the internal status is consistent and true. And that trend is
going to continue even more.&lt;/p&gt;
&lt;p&gt;For shared variables (closure variables and module variables), Nuitka is
still too conservative to make optimization. Code does annotate value
escapes, but it’s not yet trusting it. The next releases will focus on
lifting that kind of restriction, and for quality of result, that will
mean making a huge jump ahead once that works, so module variables used
locally a lot will become even faster to use then and subject to static
optimization too.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="function-inlining"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Function Inlining&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When doing my talk to EuroPython 2015, I was demoing it that, and
indeed, what a break through. The circumstances under which it is done
are still far too limited though. Essentially that ability is there, but
will not normally be noticeable yet due to other optimization, e.g.
functions are most often module variables and not local to the using
function.&lt;/p&gt;
&lt;p&gt;More code generation improvements will be needed to be able to inline
functions that might raise an exception. Also the “cost” of inlining a
function is also very much an unsolved issue. It will become the focus
again, once the SSA use as indicated above expands to module variables,
as then inlining other things than local functions will be possible too.&lt;/p&gt;
&lt;p&gt;So there is a lot of things to do for this to really make a difference
to your programs. But it’s still great to have that part solved so far.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="scalability"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Scalability&lt;/a&gt;&lt;/h2&gt;
&lt;section id="parameter-parsing"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Parameter Parsing&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Recent releases have replaced some of the oldest code of Nuitka, the one
that generated special argument parsing for each function individually,
now replaced with generic code, that surprisingly is often even faster,
although quick entry points were tough to beat.&lt;/p&gt;
&lt;p&gt;That gives the C backend compiler a much easier time. Previously 3 C
functions were created per Python level function, two of which could get
really big with many arguments, and these are no more.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="variable-error-messages"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Variable Error Messages&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Something similar was going on with variable error messages. Each had
their exception value pre-computed and created at module load time. Most
of these are of course unused. This has been replaced with code that
generates it on the fly, resulting in a lot less constants code.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="code-objects"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Code Objects&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;And another thing was to look after code objects, of which there often
were two for each Python level function. The one used or the frame
during run time and the one used in the function object, differered
often, sometimes by small things like flags or local variable names.&lt;/p&gt;
&lt;p&gt;That of course was just the result of not passing that along, but
created cached objects with hopefully the same options, but that not
being true.&lt;/p&gt;
&lt;p&gt;Resolving that, and sharing the code object used for creation and then
the frame is gives less complex C code too.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Optimization&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The scalability of Nuitka also depends much on generated code size. With
the optimization become more clever, less code is generated, and that
trend will continue as more structural optimization are applied.&lt;/p&gt;
&lt;p&gt;Every time e.g. an exception is identified to not happen, this removes
the corresponding error exits from the C code, which then makes it
easier for the C compiler. Also more specialized code as we now have or
dictionaries, is often less complex to it.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="compatibility"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Compatibility&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Important things have happened here. Full compatibility mode is planned
to not be the default anymore in upcoming releases, but that will only
mean to not be stupid compatible, but to e.g. have more complete error
messages than CPython, more correct line numbers, or for version
differences, the best Python version behaviour.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;The stable release has full support for Python 3.5, including the new
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;await&lt;/span&gt;&lt;/code&gt; functions. So recent releases can pronounce it
as fully supported which was quite a feat.&lt;/p&gt;
&lt;p&gt;I am not sure, if you can fully appreciate the catch up game needed to
play here. CPython clearly implements a lot of features, that I have to
emulate too. That’s going to repeat for every major release.&lt;/p&gt;
&lt;p&gt;The good news is that the function type of Nuitka is now specialized to
the generators and classes, and that was a massive cleanup of its core
that was due anyway. The generators have no more their own function
creation stuff and that has been helpful with a lot of other stuff.&lt;/p&gt;
&lt;p&gt;Another focus driven from Python3, is to get ahead with type shape
tracing and type inference of dictionary, and value tracing. To fully
support Python3 classes, we need to work on something that is a
dictionary a-like, and that will only ever be efficient if we have that.
Good news is that the next release is making progress there too.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="performance"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Performance&lt;/a&gt;&lt;/h2&gt;
&lt;section id="graphs-and-benchmarks"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I also presented this weak point to EuroPython 2015 and my plan on how
to resolve it. Unfortunately, nothing really happened here. My plan is
still to use what the PyPy people have developed as vmprof.&lt;/p&gt;
&lt;p&gt;So that is not progressing, and I could need help with that definitely.
Get in contact if you think you can.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="standalone"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Standalone&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The standalone mode of Nuitka was pretty good, and continued to improve
further, but I don’t care much.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="other-stuff"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Other Stuff&lt;/a&gt;&lt;/h2&gt;
&lt;section id="europython-2015"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;EuroPython 2015&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This was a blast. Meeting people who knew Nuitka but not me was a
regular occurrence. And many people well appreciate my work. It felt
much different than the years before.&lt;/p&gt;
&lt;p&gt;I was able to present Nuitka’s function in-lining indeed there, and this
high goal that I set myself, quite impressed people.&lt;/p&gt;
&lt;p&gt;Also I made many new contacts, largely with the scientific community. I
hope to find work with data scientists in the coming years. More amd
more it looks like my day job should be closer to Nuitka and my
expertise in Python.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="funding"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Funding&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nuitka receives the occasional &lt;a class="reference external" href="/pages/donations.html"&gt;donation&lt;/a&gt; and
those make me very happy. As there is no support from organization like
the PSF, I am all on my own there.&lt;/p&gt;
&lt;p&gt;This year I want to travel to Europython 2016. It would be sweet if
aside of my free time it wouldn’t also cost me money. So please consider
donating some more, as these kind of events are really helpul to Nuitka.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="collaborators"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id16" role="doc-backlink"&gt;Collaborators&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nuitka is making more and more break through progress. And you can be a
part of it. Now.&lt;/p&gt;
&lt;p&gt;You can join and should do so now, just &lt;a class="reference external" href="/doc/user-manual.html#join-nuitka"&gt;follow this link&lt;/a&gt; or become part of the mailing list
(since closed) and help me there with request I make, e.g. review posts
of mine, test out things, pick up small jobs, answer questions of
newcomers, you know the drill probably.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="videos"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id17" role="doc-backlink"&gt;Videos&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There is a Youtube channel of mine with &lt;a class="reference external" href="https://www.youtube.com/playlist?list=PLKO58t9ADuF6o_Dcmve1DXpUkUEEVvDux"&gt;all the videos of Nuitka so far&lt;/a&gt;
and I have been preparing myself with proper equipment to make Videos of
Nuitka, but so far nothing has come out of that.&lt;/p&gt;
&lt;p&gt;I do however really want to change that. Let’s see if it happens.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="twitter"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id18" role="doc-backlink"&gt;Twitter&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I have started to use &lt;a class="reference external" href="https://twitter.com/kayhayen"&gt;my Twitter account&lt;/a&gt; on occasions. You are welcome to follow
me there. I will highlight interesting stuff there.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="future"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id19" role="doc-backlink"&gt;Future&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, there is multiple things going on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Type Inference&lt;/p&gt;
&lt;p&gt;With SSA in place, Nuitka starts to recognize types, and treat things
that work something assigned from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;{}&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; built-in with
special nodes and code.&lt;/p&gt;
&lt;p&gt;That’s going to be a lot of work. For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; there
are very important use cases, where the code can be much better. But
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; is the hardest case, and to get the structure of shape
tracing right, we are going there first.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shape Analyisis&lt;/p&gt;
&lt;p&gt;The plan for types, is not to use them, but the more general shapes,
things that will be more prevalent than actual type information in a
program. In fact the precise knowledge will be rare, but more often,
we will just have a set of operations performed on a variable, and be
able to guess from there.&lt;/p&gt;
&lt;p&gt;Shape analysis will begin though with concrete types like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt;.
The reason is that some re-formulations like Python3 classes should
not use locals, but dictionary accesses throughout for full
compatibility. Tracing that correctly to be effectively the same code
quality will allow to make that change.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plug-ins&lt;/p&gt;
&lt;p&gt;Something I wish I could have shown at EuroPython was plug-ins to
Nuitka. It has become more complete, and some demo plug-ins for say
Qt plugins or multiprocessing, are starting to work, but it’s not
progressing recently. The API will need work and of course
documentation. Hope is for this to expand Nuitka’s reach and appeal
to get more contributors.&lt;/p&gt;
&lt;p&gt;It would be sweet, if there were any takers, aiming to complete these
things.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nested frames&lt;/p&gt;
&lt;p&gt;One result of in-lining will be nested frames still present for
exceptions to be properly annotated, or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals&lt;/span&gt;&lt;/code&gt; giving different
sets of locals and so on.&lt;/p&gt;
&lt;p&gt;Some cleanup of these will be needed for code generation and SSA to
be able to attach variables to some sort of container, and for a
function to be able to reference different sets of these.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let me know, if you are willing to help. I really need that help to make
things happen faster. Nuitka will become more and more important only.
And with your help, things will be there sooner.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="release-focus"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id20" role="doc-backlink"&gt;Release Focus&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One thing I have started recently, is to make changes to Nuitka focused
to just one goal, and to only deal with the rare bug in other fields,
but not much else at all. So instead of across the board improvements in
just about everything, I have e.g. in the last release added type
inference for dictionaries and special nodes and their code generation
for dictionary operations.&lt;/p&gt;
&lt;p&gt;This progresses Nuitka in one field. And the next release then e.g. will
only focus on making the performance comparison tool, and not continue
much in other fields.&lt;/p&gt;
&lt;p&gt;That way, more “flow” is possible and more visible progress too. As an
example of this, these are the focuses of last releases.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Full Python 3.5 on a clean base with generators redone so that
coroutines fit in nicely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability of C compilation with argument parsing redone&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next release soon: Shape analysis of subscript usages and
optimization to exact dictionaries&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next release thereafter: Comparison benchmarking (vmprof, resolving C
level function identifiers easier)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other focuses will also happen, but that’s too far ahead. Mostly like
some usability improvements will be the focus of a release some day.
Focus is for things that are too complex to attack as a side project,
and therefore never happen although surely possible.&lt;/p&gt;
&lt;p&gt;Digging into Python3.5 coroutines and their semantics was hard enough,
and the structural changes needed to integrate them properly with not
too much special casing, but rather removing existing special cases
(generator functions) was just too much work to ever happen while also
doing other stuff.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id21" role="doc-backlink"&gt;Summary&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So I am very excited about Nuitka. It feels like the puzzle is coming
together finally, with type inference becoming a real thing. And should
dictionaries be sorted out, the real important types, say &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; for
scientific use cases, or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; for others, will be easy to
make.&lt;/p&gt;
&lt;p&gt;With this, and then harder import association (knowing what other
modules are), and module level SSA tracing that can be trusted, we can
finally expect Nuitka to be generally fast and deserve to be called a
compiler.&lt;/p&gt;
&lt;p&gt;That will take a while, but it’s likely to happen in 2016. Let’s see if
I will get the funding to go to EuroPython 2016, that would be great.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-progress-winter-2015.html"/>
    <summary>For quite a bit, there have been no status posts, not for lack of news,
but a lot has happened indeed. I just seem to post a lot more to the
mailing list than I do here. Especially about unfinished stuff, which is
essentially for a project like Nuitka everything that’s going on.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="europython" label="europython"/>
    <published>2016-01-29T08:08:54+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0518.html</id>
    <title>Nuitka Release 0.5.18</title>
    <updated>2016-01-16T11:41:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-18"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release mainly has a scalability focus. While there are few
compatibility improvements, the larger goal has been to make Nuitka
compilation and the final C compilation faster.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The nested arguments functions can now be called using
their keyword arguments.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;someFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;


&lt;span class="n"&gt;someFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;.1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Generators with Python3.4 or higher now also have a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__del__&lt;/span&gt;&lt;/code&gt; attribute, and therefore properly participate in
finalization. This should improve their interactions with garbage
collection reference cycles, although no issues had been observed so
far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Was outputting command line arguments debug information at
program start. Fixed in 0.5.17.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Code generated for parameter parsing is now a &lt;em&gt;lot&lt;/em&gt; less verbose.
Python level loops and conditionals to generate code for each
variable has been replaced with C level generic code. This will speed
up the backend compilation by a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Function calls with constant arguments were speed up specifically, as
their call is now fully prepared, and yet using less code. Variable
arguments are also faster, and all defaulted arguments are also much
faster. Method calls are not affected by these improvements though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nested argument functions now have a quick call entry point as well,
making them faster to call too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;slice&lt;/span&gt;&lt;/code&gt; built-in, and internal creation of slices (e.g. in
re-formulations of Python3 slices as subscripts) cannot raise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Avoid inclusion of bytecode of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest.test&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlite3.test&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils.test&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ensurepip&lt;/span&gt;&lt;/code&gt;. These are
not needed, but simply bloat the amount of bytecode used on e.g.
macOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speed up compilation with Nuitka itself by avoid to copying and
constructing variable lists as much as possible using an always
accurate variable registry.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nested argument functions of Python2 are now re-formulated into a
wrapping function that directly calls the actual function body with
the unpacking of nested arguments done in nodes explicitly. This
allows for better optimization and checks of these steps and
potential in-lining of these functions too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified slice object creation and built-in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;slice&lt;/span&gt;&lt;/code&gt; nodes, these
were two distinct nodes before.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code generation for all statement kinds is now done via
dispatching from a dictionary instead of long &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;elif&lt;/span&gt;&lt;/code&gt; chains.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Named nodes more often consistently, e.g. all loop related nodes
start with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Loop&lt;/span&gt;&lt;/code&gt; now, making them easier to group.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parameter specifications got simplified to work without variables
where it is possible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nuitka is now available on the social code platforms gitlab as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Long standing weaknesses have been addressed in this release, also quite
a few structural cleanups have been performed, e.g. strengthening the
role of the variable registry to always be accurate, is groundlaying to
further improvement of optimization.&lt;/p&gt;
&lt;p&gt;However, this release cycle was mostly dedicated to performance of the
actual compilation, and more accurate information was needed to e.g. not
search for information that should be instant.&lt;/p&gt;
&lt;p&gt;Upcoming releases will focus on usability issues and further
optimization, it was nice however to see speedups of created code even
from these scalability improvements.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0518.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2016-01-16T11:41:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0517.html</id>
    <title>Nuitka Release 0.5.17</title>
    <updated>2015-12-28T21:56:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-17"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is a major feature release, as it adds full support for
Python3.5 and its coroutines. In addition, in order to properly support
coroutines, the generator implementation got enhanced. On top of that,
there is the usual range of corrections.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: Command line arguments that are unicode strings were not
properly working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Fix, only the code object attached to exceptions
contained all variable names, but not the one of the function object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Support for virtualenv on Windows was using non-portable
code and therefore failing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The tree displayed with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--display-tree&lt;/span&gt;&lt;/code&gt; duplicated all functions
and did not resolve source lines for functions. It also displayed
unused functions, which is not helpful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generators with parameters leaked C level memory for each instance of
them leading to memory bloat for long running programs that use a lot
of generators. Fixed in 0.5.16.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t drop positional arguments when called with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--run&lt;/span&gt;&lt;/code&gt;, also make
it an error if they are present without that option.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added full support for Python3.5, coroutines work now too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Optimized frame access of generators to not use both a local frame
variable and the frame object stored in the generator object itself.
This gave about 1% speed up to setting them up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid having multiple code objects for functions that can raise and
have local variables. Previously one code object would be used to
create the function (with parameter variable names only) and when
raising an exception, another one would be used (with all local
variable names). Creating them both at start-up was wasteful and also
needed two tuples to be created, thus more constants setup code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The entry point for generators is now shared code instead of being
generated for each one over and over. This should make things more
cache local and also results in less generated C code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When creating frame codes, avoid working with strings, but use proper
emission for less memory churn during code generation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Updated the key for the Debian/Ubuntu repositories to remain valid
for 2 more years.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Fedora 23.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MinGW32 is no more supported, use MinGW64 in the 32 bits variant,
which has less issues.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Detecting function type ahead of times, allows to handle generators
different from normal functions immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Massive removal of code duplication between normal functions and
generator functions. The later are now normal functions creating
generator objects, which makes them much more lightweight.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; statement in generators is now immediately set to the
proper node as opposed to doing this in variable closure phase only.
We can now use the ahead knowledge of the function type.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nonlocal&lt;/span&gt;&lt;/code&gt; statement is now immediately checked for syntax
errors as opposed to doing that only in variable closure phase.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The name of contraction making functions is no longer skewed to
empty, but the real thing instead. The code name is solved
differently now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;local_locals&lt;/span&gt;&lt;/code&gt; mode for function node was removed, it was
always true ever since Python2 list contractions stop using pseudo
functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The outline nodes allowed to provide a body when creating them,
although creating that body required using the outline node already
to create temporary variables. Removed that argument.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed PyLint false positive annotations no more needed for PyLint
1.5 and solved some TODOs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code objects are now mostly created from specs (not yet complete)
which are attached and shared between statement frames and function
creations nodes, in order to have less guess work to do.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added the CPython3.5 test suite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated generated doctests to fix typos and use common code in all
CPython test suites.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release continues to address technical debt. Adding support for
Python3.5 was the major driving force, while at the same time removing
obstacles to the changes that were needed for coroutine support.&lt;/p&gt;
&lt;p&gt;With Python3.5 sorted out, it will be time to focus on general
optimization again, but there is more technical debt related to classes,
so the cleanup has to continue.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0517.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-12-28T21:56:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0516.html</id>
    <title>Nuitka Release 0.5.16</title>
    <updated>2015-11-11T17:39:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-16"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a maintenance release, largely intended to put out improved
support for new platforms and minor corrections. It should improve the
speed for standalone mode, and compilation in general for some use
cases, but this is mostly to clean up open ends.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;len&lt;/span&gt;&lt;/code&gt; built-in could give false values for dictionary and
set creations with the same element.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# This was falsely optimized to 2 even if &amp;quot;a is b and a == b&amp;quot; was true.&lt;/span&gt;
&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi_running&lt;/span&gt;&lt;/code&gt; attribute of generators is no longer
an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, but &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; built-in with two arguments, value and
base, raised &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UnicodeDecodeError&lt;/span&gt;&lt;/code&gt; instead of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ValueError&lt;/span&gt;&lt;/code&gt; for
illegal bytes given as value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tokenize.open&lt;/span&gt;&lt;/code&gt; to read source code, instead of
reading manually and decoding from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tokenize.detect_encoding&lt;/span&gt;&lt;/code&gt;, this
handles corner cases more compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the PyLint warnings plug-in could crash in some cases, make sure
it’s more robust.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, the combination of Anaconda Python, MinGW 64 bits and
mere acceleration was not working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Preserve not only namespace packages created by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pth&lt;/span&gt;&lt;/code&gt;
files, but also make the imports done by them. This makes it more
compatible with uses of it in Fedora 22.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The extension modules could be duplicated, turned this
into an error and cache finding them during compile time and during
early import resolution to avoid duplication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Handle “not found” from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ldd&lt;/span&gt;&lt;/code&gt; output, on some systems
not all the libraries wanted are accessible for every library.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Fixed support for namespace packages, these were not yet
working for that version yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Fixes lack of support for unpacking in normal &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt; creations.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# this has become legal in 3.5 and now works too.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now also gives compatible &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; for earlier versions.
Python2 was good already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Fix, need to reduce compiled functions to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__qualname__&lt;/span&gt;&lt;/code&gt;
value, rather than just &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; or else pickling methods doesn’t
work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.5: Fix, added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi_yieldfrom&lt;/span&gt;&lt;/code&gt; attribute to generator
objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fixed harmless warnings for Visual Studio 2015 in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; mode.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Re-formulate &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eval&lt;/span&gt;&lt;/code&gt; to default to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;globals()&lt;/span&gt;&lt;/code&gt; as the
default for the locals dictionary in modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt; node was making a description of nodes moved to the
outside when shrinking its scope, which was using a lot of time, just
to not be output, now these can be postponed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refactored how freezing of bytecode works. Uncompiled modules are now
explicit nodes too, and in the registry. We only have one or the
other of it, avoiding to compile both.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;When &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;strace&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dtruss&lt;/span&gt;&lt;/code&gt; are not found, given proper error
message, so people know what to do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The doc tests extracted and then generated for CPython3 test suites
were not printing the expressions of the doc test, leading to largely
decreased test coverage here.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The CPython 3.4 test suite is now also using common runner code, and
avoids ignoring all Nuitka warnings, instead more white listing was
added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Started to run CPython 3.5 test suite almost completely, but
coroutines are blocking some parts of that, so these tests that use
this feature are currently skipped.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed more CPython tests that access the network and are generally
useless to testing Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When comparing outputs, normalize typical temporary file names used
on posix systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Coverage tests have made some progress, and some changes were made
due to its results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover too complex code module of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;idna&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Python3.5 only test for unpacking variants.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Prepare plug-in interface to allow suppression of import warnings to
access the node doing it, making the import node is accessible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have dedicated class function body object, which is a specialization
of the function body node base class. This allowed removing class
specific code from that class.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of “win_target” as a scons parameter was useless. Make more
consistent use of it as a flag indicator in the scons file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiled types were mixing uses of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compiled_&lt;/span&gt;&lt;/code&gt; prefixes, something
with a space, sometimes with an underscore.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Improved support for Python3.5 missing compatibility with new
language features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated the Developer Manual with changes that SSA is now a fact.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Python3.5 Windows MSI downloads.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Ubuntu Wily (15.10) for download. Removed Ubuntu
Utopic package download, no longer supported by Ubuntu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository with RPM packages for Fedora 22.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;So this release is mostly to lower the technical debt incurred that
holds it back from supporting making more interesting changes. Upcoming
releases may have continue that trend for some time.&lt;/p&gt;
&lt;p&gt;This release is mostly about catching up with Python3.5, to make sure we
did not miss anything important. The new function body variants will
make it easier to implement coroutines, and help with optimization and
compatibility problems that remain for Python3 classes.&lt;/p&gt;
&lt;p&gt;Ultimately it will be nice to require a lot less checks for when
function in-line is going to be acceptable. Also code generation will
need a continued push to use the new structure in preparation for making
type specific code generation a reality.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0516.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-11-11T17:39:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-podcast-init.html</id>
    <title>Nuitka on Podcast __init__</title>
    <updated>2015-10-25T11:02:56+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-on-podcast-init"&gt;

&lt;p&gt;So, if you want to get to know Nuitka or me, there is a really good
interview from the popular podcast “__init__” online.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.pythonpodcast.com/episode-28-kay-hayen-on-nuitka/"&gt;Kay Hayen on Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think it’s very good at explaining things, putting it into
perspective, history, future, and generally getting to know what kind of
person I am.&lt;/p&gt;
&lt;p&gt;So, this is probably as good as it ever gets. So please share, like and
go ahead and spread it in this social media craziness that you use all
day.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-podcast-init.html"/>
    <summary>So, if you want to get to know Nuitka or me, there is a really good
interview from the popular podcast “__init__” online.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-10-25T11:02:56+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0515.html</id>
    <title>Nuitka Release 0.5.15</title>
    <updated>2015-10-15T08:44:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-15"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release enables SSA based optimization, the huge leap, not so much
in terms of actual performance increase, but for now making the things
possible that will allow it.&lt;/p&gt;
&lt;p&gt;This has been in the making literally for years. Over and over, there
was just “one more thing” needed. But now it’s there.&lt;/p&gt;
&lt;p&gt;The release includes much stuff, and there is a perspective on the open
tasks in the summary, but first out to the many details.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added implicit import for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;reportlab&lt;/span&gt;&lt;/code&gt; package
configuration dynamic import. Fixed in 0.5.14.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fix, compilation of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt; module could happen
for some import patterns, and then prevented the distribution to
contain all necessary libraries. Now it is made sure to not include
compiled and frozen form both. Fixed in 0.5.14.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, compilation for conditional statements where the boolean check
on the condition cannot raise, could fail compilation. Fixed in
0.5.14.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; built-in was making static optimization
assuming compile time constants to be strings, which in the error
case they are not, which was crashing the compiler.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;__import__&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;some.module&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;  &lt;span class="c1"&gt;# tuples don&amp;#39;t work&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This error became only apparent, because now in some cases, Nuitka
forward propagates values.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, when installing Python2 only for the user, the
detection of it via registry failed as it was only searching system
key. This was &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/8"&gt;a github pull request&lt;/a&gt;. Fixed in 0.5.14.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some modules have extremely complex expressions requiring too deep
recursion to work on all platforms. These modules are now included
entirely as bytecode fallback.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The standard library may contain broken code due to installation
mistakes. We have to ignore their &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, pickling compiled methods was failing with the wrong kind of
error, because they should not implement &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__reduce__&lt;/span&gt;&lt;/code&gt;, but only
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__deepcopy__&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, when running under &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wine&lt;/span&gt;&lt;/code&gt;, the check for scons binary was
fooled by existence of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;/usr/bin/scons&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Python3.5, coroutines don’t work yet,
but it works perfectly as a 3.4 replacement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental Nuitka plug-in framework, and use it for the
packaging of Qt plugins in standalone mode. The API is not yet stable
nor polished.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debugger&lt;/span&gt;&lt;/code&gt; that makes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--run&lt;/span&gt;&lt;/code&gt; execute directly in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gdb&lt;/span&gt;&lt;/code&gt; and gives a stack trace on crash.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--profile&lt;/span&gt;&lt;/code&gt; executes compiled binary and outputs
measured performance with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vmprof&lt;/span&gt;&lt;/code&gt;. This is work in progress and
not functional yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Started work on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--internal-graph&lt;/span&gt;&lt;/code&gt; to render the SSA state into
diagrams. This is work in progress and not too functional yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plug-in framework added. Not yet ready for users. Working &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt4&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyQt5&lt;/span&gt;&lt;/code&gt; plug-in support. Experimental Windows
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; support. Experimental PyLint warnings disable
support. More to come.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Anaconda accelerated mode on macOS by modifying the
rpath to the Python DLL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; on Windows, which
needs monkey patching of the module to support compiled methods.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The SSA analysis is now enabled by default, eliminating variables
that are not shared, and can be forward propagated. This is currently
limited mostly to compile time constants, but things won’t remain
that way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code generation for many constructs now takes into account if a
specific operation can raise or not. If e.g. an attribute look-up is
known to not raise, then that is now decided by the node the looked
is done to, and then more often can determine this, or even directly
the value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calls to C-API that we know cannot raise, no longer check, but merely
assert the result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For attribute look-up and other operations that might be known to not
raise, we now only assert that it succeeds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in loop-ups cannot fail, merely assert that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creation of built-in exceptions never raises, merely assert that too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More Python operation slots now have their own computations and some
of these gained overloads for more compile time constant
optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When taking an iterator cannot raise, this is now detected more
often.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; construct is now represented by duplicating
the final block into all kinds of handlers (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt;, or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt;) and optimized separately. This allows for
SSA to trace values more correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hash&lt;/span&gt;&lt;/code&gt; built-in now has dedicated node and code generation too.
This is mostly intended to represent the side effects of dictionary
look-up, but gives more compact and faster code too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; built-in cannot raise and has no side effect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speed improvement for in-place float operations for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+=&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*=&lt;/span&gt;&lt;/code&gt;, as these will be common cases.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Made the construct-based testing executable with Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed warnings using the new PyLint warnings plug-in for the
reflected test. Nuitka now uses the PyLint annotations to not warn.
Also do not go into PyQt for reflected test, not needed. Many Python3
improvements for cases where there are differences to report.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The optimization tests no longer use 2to3 anymore, made the tests
portable to all versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Checked more in-place operations for speed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Many improvements to the coverage taking. We can hope to see public
data from this, some improvements were triggered from this already,
but full runs of the test suite with coverage data collection are yet
to be done.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The release includes many important new directions. Coverage analysis
will be important to remain certain of test coverage of Nuitka itself.
This is mostly done, but needs more work to complete.&lt;/p&gt;
&lt;p&gt;Then the graphing surely will help us to debug and understand code
examples. So instead of tracing, and reading stuff, we should visualize
things, to more clearly see, how things evolve under optimization
iteration, and where exactly one thing goes wrong. This will be improved
as it proves necessary to do just that. So far, this has been rare.
Expect this to become end user capable with time. If only to allow you
to understand why Nuitka won’t optimize code of yours, and what change
of Nuitka it will need to improve.&lt;/p&gt;
&lt;p&gt;The comparative performance benchmarking is clearly the most important
thing to have for users. It deserves to be the top priority. Thanks to
the PyPy tool &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vmprof&lt;/span&gt;&lt;/code&gt;, we may already be there on the data taking
side, but the presenting and correlation part, is still open and a fair
bit of work. It will be most important to empower users to make
competent performance bug reports, now that Nuitka enters the phase,
where these things matter.&lt;/p&gt;
&lt;p&gt;As this is a lot of ground to cover. More than ever. We can make this
compiler, but only if you help, it will arrive in your life time.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0515.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-10-15T08:44:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-progress-summer-2015.html</id>
    <title>Nuitka Progress in Summer 2015</title>
    <updated>2015-10-05T08:08:54+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-progress-in-summer-2015"&gt;

&lt;p&gt;A long time has passed again without me speaking about what’s going on
with Nuitka, and that although definitely a lot has happened. I would
contend it’s even &lt;em&gt;because&lt;/em&gt; so much is going on.&lt;/p&gt;
&lt;p&gt;I also am shy to make public postings about unfinished stuff it seems,
but it’s long overdue, so much important and great stuff has happened.
We are in the middle of big things with the compiler and there is a lot
of great achievement.&lt;/p&gt;
&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-progress-in-summer-2015" id="id1"&gt;Nuitka Progress in Summer 2015&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#ssa-single-state-assignment-form" id="id2"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#function-inlining" id="id3"&gt;Function Inlining&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#scalability" id="id4"&gt;Scalability&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#compatibility" id="id5"&gt;Compatibility&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python-3-5" id="id6"&gt;Python 3.5&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#importing-enhancements" id="id7"&gt;Importing Enhancements&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#performance" id="id8"&gt;Performance&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#graphs-and-benchmarks" id="id9"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#standalone" id="id10"&gt;Standalone&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#other-stuff" id="id11"&gt;Other Stuff&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#funding" id="id12"&gt;Funding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#europython-2015" id="id13"&gt;EuroPython 2015&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#collaborators" id="id14"&gt;Collaborators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#future" id="id15"&gt;Future&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="ssa-single-state-assignment-form"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For a long, long time already, each release of Nuitka has worked towards
increasing &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Static_single_assignment_form"&gt;“SSA”&lt;/a&gt; usage in
Nuitka.&lt;/p&gt;
&lt;p&gt;Now it’s there. The current pre-release just uses it. There were many
things to consider before enabling it, and always a next thing to be
found that was needed. Often good changes to Nuitka, it was also
annoying the hell out of me at times.&lt;/p&gt;
&lt;p&gt;But basically now the forward propagation of variables is in place, with
some limitations that are going to fall later.&lt;/p&gt;
&lt;p&gt;So the current release, soon to be replaced, still doesn’t optimize this
code as well as possible:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;But starting with the next release, the value of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt; is forward
propagated (also in way more complex situations), and that’s a serious
milestone for the project.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="function-inlining"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Function Inlining&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When submitting my talk to EuroPython 2015, I was putting a lot of
pressure on me by promising to demo that. And I did. It was based on the
SSA code that only now became completely reliable, but otherwise very
few few other changes, and it just worked.&lt;/p&gt;
&lt;p&gt;The example I used is this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;g&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;

    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# can be inlined&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So, the function &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;g&lt;/span&gt;&lt;/code&gt; is forward propagated to a direct call, as are
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;y&lt;/span&gt;&lt;/code&gt; into the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; statement after making the in-line,
making this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Currently function in-lining is not yet activated by default, for this I
am waiting for a release cycle to carry the load of SSA in the wild. As
you probably know I usually tend to be conservative and to not make too
many changes at once.&lt;/p&gt;
&lt;p&gt;And as this works for local functions only yet, it’s not too important
yet either. This will generally become relevant once we have this
working across modules and their globally defined functions or methods.
This will be a while until Nuitka gets there.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="scalability"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Scalability&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Having got Nuitka’s memory usage under control, it turned out that there
are files that can trigger Python recursion &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RuntimeError&lt;/span&gt;&lt;/code&gt; exception
when using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ast&lt;/span&gt;&lt;/code&gt; module to build the Nuitka internal tree. People
really have code with many thousands of operations to a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; operation.&lt;/p&gt;
&lt;p&gt;So, Nuitka here learned to include whole modules as bytecode when it is
too complex as there is no easy way to expand the stack on Windows at
least. That is kind of a limitation of CPython itself I didn’t run into
so far, and rather very annoying too.&lt;/p&gt;
&lt;p&gt;The scalability of Nuitka also depends much on generated code size. With
the optimization become more clever, less code is generated, and that
trend will continue as more structural optimization are applied.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="compatibility"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Compatibility&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Very few things are possible here anymore. For the tests, in full
compatibility mode, even more often the less good line number is used.&lt;/p&gt;
&lt;p&gt;Also the plug-in work is leading to improved compatibility with Qt
plugins of PySide and PyQt. Or another example is the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; module that on Windows is now supposed to fork
compiled code too.&lt;/p&gt;
&lt;section id="python-3-5"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Python 3.5&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The next release has experimental support for Python 3.5, with the
notable exception that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;async&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;await&lt;/span&gt;&lt;/code&gt;, these do not yet work.
It passes the existing test suite for CPython3.4 successfully. Passing
here means, to pass or fail in the same way as does the uncompiled
Python. Failures are of course expected, as details change, and a nice
way of having coverage for exception codes.&lt;/p&gt;
&lt;p&gt;The new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;&lt;/span&gt;&lt;/code&gt; operator is now supported. As the stable release of
Python3.5 was made recently, there is now some pressure on having full
support of course.&lt;/p&gt;
&lt;p&gt;I am not sure, if you can fully appreciate the catch up game to play
here. It will take a compiled coroutine to support these things
properly. And that poses lots of puzzles to solve. As usual I am binding
these to internal cleanups so it becomes simpler.&lt;/p&gt;
&lt;p&gt;In the case of Python3.5, the single function body node type that is
used for generators, class bodies, and function, is bound to be replaced
with a base class and detailing instances, instead of one thing for them
all, then with coroutines added.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="importing-enhancements"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Importing Enhancements&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A while ago, the import logic was basically re-written with
compatibility much increased. Then quite some issues were fixed. I am
not sure, but some of the fixes have apparently also been regressions at
times, with the need for other fixes now.&lt;/p&gt;
&lt;p&gt;So it may have worked for you in the past, but you might have to report
new found issues.&lt;/p&gt;
&lt;p&gt;It’s mainly the standalone community that encounters these issues, when
just one of these imports doesn’t find the correct thing, but picking
the wrong one will of course have seriously bad impacts on compile time
analysis too. So once we do cross module optimization, this must be rock
solid.&lt;/p&gt;
&lt;p&gt;I think we have gotten a long way there, but we still need to tackle
some more fine details.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="performance"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Performance&lt;/a&gt;&lt;/h2&gt;
&lt;section id="graphs-and-benchmarks"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I also presented this weak point to EuroPython 2015 and my plan on how
to resolve it. And low and behold, turns out the PyPy people had already
developed a tool that will be usable for the task and to present to the
conference.&lt;/p&gt;
&lt;p&gt;So basically I was capable of doing kind of a prototype of comparative
benchmark during EuroPython 2015 already. I will need to complete this.
My plan was to get code names of functions sorted out in a better way,
to more easily match the Nuitka C function names with Python functions
in an automatic way. That matching is the hard part.&lt;/p&gt;
&lt;p&gt;So that is already progressing, but I could need help with that
definitely.&lt;/p&gt;
&lt;p&gt;Nuitka really has to catch up with benchmarks generally.. The work on
automated performance graphs has made more progress, and they are
supposed to show up on &lt;a class="reference external" href="https://speedcenter.nuitka.net"&gt;Nuitka Speedcenter&lt;/a&gt; each time, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;master&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt;,
or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;factory&lt;/span&gt;&lt;/code&gt; git branches change.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;There currently is no structure to these graphs. There is no
explanations or comments, and there is no trend indicators. All of
which makes it basically useless to everybody except me. And even
harder for me than necessary.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;As a glimpse of what is possible with in-lined functions, look at this:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://speedcenter.nuitka.net/constructs/construct-calllambdaexpressiondirectly.html"&gt;Lambda call construct case&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But we also need to put real programs and use cases to test. This may
need your help. Let me know if you want to. It takes work on taking the
data, and merging them into one view, linking it with the source code
ideally. That will be the tool you can just use on your own code.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="standalone"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Standalone&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The standalone mode of Nuitka was pretty good, and continued to improve
further, now largely with the help of plug-ins.&lt;/p&gt;
&lt;p&gt;I now know that PyGTK is an issue and will need a plug-in to work. Once
the plug-in interface is public, I hope for more outside contributions
here.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="other-stuff"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Other Stuff&lt;/a&gt;&lt;/h2&gt;
&lt;section id="funding"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Funding&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nuitka receives the occasional &lt;a class="reference external" href="/pages/donations.html"&gt;donation&lt;/a&gt; and
those make me very happy. As there is no support from organization like
the PSF, I am all on my own there.&lt;/p&gt;
&lt;p&gt;This year I traveled to Europython 2015, I needed a new desktop computer
after burning the old one through with CI tests, the website has running
costs, and so on. That is pretty hefty money. It would be sweet if aside
of my free time it wouldn’t also cost me money.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="europython-2015"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;EuroPython 2015&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This was a blast. Meeting people who knew Nuitka but not me was a
regular occurrence. And many people well appreciate my work. It felt
much different than the years before.&lt;/p&gt;
&lt;p&gt;I was able to present Nuitka’s function in-lining indeed there, and this
high goal that I set myself, quite impressed people. My talk went very
well, I am going to post a link separately in another post.&lt;/p&gt;
&lt;p&gt;Also I made many new contacts, largely with the scientific community. I
hope to find work with data scientists in the coming years. More amd
more it looks like my day job should be closer to Nuitka and my
expertise in Python.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="collaborators"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Collaborators&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nuitka is making break through progress. And you can be a part of it.
Now.&lt;/p&gt;
&lt;p&gt;You can join and should do so now, just &lt;a class="reference external" href="/doc/user-manual.html#join-nuitka"&gt;follow this link&lt;/a&gt; or become part of the mailing list
(since closed) and help me there with request I make, e.g. review posts
of mine, test out things, pick up small jobs, answer questions of
newcomers, you know the drill probably.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="future"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Future&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, there is multiple things going on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Function in-lining&lt;/p&gt;
&lt;p&gt;For locally declared functions, it should become possible to avoid
their creation, and make direct calls instead of ones that use
function objects and expensive parameter handling.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nested frames&lt;/p&gt;
&lt;p&gt;One result of in-lining will be nested frames still present for
exceptions to be properly annotated, or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals&lt;/span&gt;&lt;/code&gt; giving different
sets of locals and so on.&lt;/p&gt;
&lt;p&gt;Some cleanup of these will be needed for code generation and SSA to
be able to attach variables to some sort of container, and for a
function to be able to reference different sets of these.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type Inference&lt;/p&gt;
&lt;p&gt;With SSA in place, we really can start to recognize types, and treat
things that work something assigned from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;[]&lt;/span&gt;&lt;/code&gt; different, and with
code special to these.&lt;/p&gt;
&lt;p&gt;That’s going to be a lot of work. For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; there
are very important use cases, where the code can be much better.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shape Analyisis&lt;/p&gt;
&lt;p&gt;My plan for types, is not to use them, but the more general shapes,
things that will be more prevalent than actual type information in a
program. In fact the precise knowledge will be rare, but more often,
we will just have a set of operations performed on a variable, and be
able to guess from there.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python 3.5 new features&lt;/p&gt;
&lt;p&gt;The coroutines are a new type, and currently it’s unclear how deep
this is tied into the core of things, i.e. if a compile coroutine can
be a premier citizen immediately, or if that needs more work. I hope
it just takes for the code object to have the proper flag. But there
could be stupid type checks, we shall see.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plug-ins&lt;/p&gt;
&lt;p&gt;Something I wish I could have shown at EuroPython was plug-ins to
Nuitka. It is recently becoming more complete, and some demo plug-ins
for say Qt plugins, or multiprocessing, are starting to work. The API
will need work and of course documentation. Hope is for this to
expand Nuitka’s reach and appeal to get more contributors.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let me know, if you are willing to help. I really need that help to make
things happen faster. Nuitka will become more and more important only.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-progress-summer-2015.html"/>
    <summary>A long time has passed again without me speaking about what’s going on
with Nuitka, and that although definitely a lot has happened. I would
contend it’s even because so much is going on.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-10-05T08:08:54+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0514.html</id>
    <title>Nuitka Release 0.5.14</title>
    <updated>2015-08-28T07:03:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-14"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is an intermediate step towards value propagation, which is
not considered ready for stable release yet. The major point is the
elimination of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; expressions, as they are problems
to SSA. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; statement change is delayed.&lt;/p&gt;
&lt;p&gt;There are also a lot of bug fixes, and enhancements to code generation,
as well as major cleanups of code base.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3: Added support assignments trailing star assignment.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This raised &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ValueError&lt;/span&gt;&lt;/code&gt; before.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Properly detect illegal double star assignments.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Properly detect the syntax error to star assign from
non-tuple/list.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: Fixed a crash of the binary when copying dictionaries with
split tables received as star arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fixed reference loss, when using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt; &lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt; where
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt; was an exception instance. Fixed in 0.5.13.8 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Fix, the flag &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--disable-windows-console&lt;/span&gt;&lt;/code&gt; was not properly
handled for MinGW32 run time resulting in a crash.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2.7.10: Was not recognizing this as a 2.7.x variant and
therefore not applying minor version compatibility levels properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, when choosing to have frozen source references, code objects
were not use the same value as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; did for its filename.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, when re-executing itself to drop the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module, make sure
we find the same file again, and not according to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt;
changes coming from it. Fixed in 0.5.13.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced code generation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt; &lt;span class="pre"&gt;variable&lt;/span&gt;&lt;/code&gt; statements, where it’s
clear that the value must be assigned.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When pressing CTRL-C, the stack traces from both Nuitka and Scons
were given, we now avoid the one from Scons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the dump from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--xml&lt;/span&gt;&lt;/code&gt; no longer contains functions that have
become unused during analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Creating or running programs from inside Unicode paths
was not working on Windows. Fixed in 0.5.13.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Namespace package support was not yet complete, importing the parent
of a package was still failing. Fixed in 0.5.13.7 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2.6: Compatibility for exception check messages enhanced with
newest minor releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NameError&lt;/span&gt;&lt;/code&gt; in classes needs to say &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;global&lt;/span&gt;
&lt;span class="pre"&gt;name&lt;/span&gt;&lt;/code&gt; and not just &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;name&lt;/span&gt;&lt;/code&gt; too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fixed creation of XML representation, now done without
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lxml&lt;/span&gt;&lt;/code&gt; as it doesn’t support needed features on that version. Fixed
in 0.5.13.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Fix, when creating code for the largest negative constant to
still fit into &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt;, that was only working in the main module.
Fixed in 0.5.13.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt; statement raised an assertion on unicode
objects that could not be encoded with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ascii&lt;/span&gt;&lt;/code&gt; codec.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for Windows 10.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Followed changes for Python 3.5 beta 2. Still only usable as a Python
3.4 replacement, no new features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using a self compiled Python running from the source tree is now
supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Anaconda Python distribution. As it doesn’t install
the Python DLL, we copy it along for acceleration mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for Visual Studio 2015. Fixed in 0.5.13.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for self compiled Python versions running from build
tree, this is intended to help debug things on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Function in-lining is now present in the code, but still disabled,
because it needs more changes in other areas, before we can generally
do it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trivial outlines, result of re-formulations or function in-lining,
are now in-lined, in case they just return an expression.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The re-formulation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; has been giving up,
eliminating the use of a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; expression, at the cost
of dedicated boolean nodes and code generation for these.&lt;/p&gt;
&lt;p&gt;This saves around 8% of compile time memory for Nuitka, and allows
for faster and more complete optimization, and gets rid of a
complicated structure for analysis.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When a frame is used in an exception, its locals are detached. This
was done more often than necessary and even for frames that are not
necessary our own ones. This will speed up some exception cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When the default arguments, or the keyword default arguments
(Python3) or the annotations (Python3) were raising an exception, the
function definition is now replaced with the exception, saving a code
generation. This happens frequently with Python2/Python3 compatible
code guarded by version checks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The SSA analysis for loops now properly traces “break” statement
situations and merges the post-loop situation from all of them. This
significantly allows for and improves optimization of code following
the loop.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The SSA analysis of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; statements has been greatly
enhanced. The handler for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; is now optimized for exception
raise and no exception raise individually, as well as for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; in the tried code. The SSA analysis for
after the statement is now the result of merging these different
cases, should they not abort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code generation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; statements is now taking advantage
should there be definite knowledge of previous value. This speed them
up slightly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The SSA analysis of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; statements now properly decided if the
statement can raise or not, allowing for more optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For list contractions, the re-formulation was enhanced using the new
outline construct instead of a pseudo function, leading to better
analysis and code generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comparison chains are now re-formulated into outlines too, allowing
for better analysis of them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exceptions raised in function creations, e.g. in default values, are
now propagated, eliminating the function’s code. This happens most
often with Python2/Python3 in branches. On the other hand, function
creations that cannot are also annotated now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Closure variables that become unreferenced outside of the function
become normal variables leading to better tracing and code generation
for them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Function creations cannot raise except their defaults, keyword
defaults or annotations do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in references can now be converted to strings at compile time,
e.g. when printed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Removed gitorious mirror of the git repository, they shut down.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make it more clear in the documentation that Python2 is needed at
compile time to create Python3 executables.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Moved more parts of code generation to their own modules, and used
registry for code generation for more expression kinds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; into a single
construct that handles both through
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; semantics.
Finally is now solved via duplicating the handler into cases
necessary.&lt;/p&gt;
&lt;p&gt;No longer are nodes annotated with information if they need to
publish the exception or not, this is now all done with the dedicated
nodes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; expressions have been replaced with outline
function bodies, that instead of side effect statements, are more
like functions with return values, allowing for easier analysis and
dedicated code generation of much lower complexity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No more “tolerant” flag for release nodes, we now decide this fully
based on SSA information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added helper for assertions that code flow does not reach certain
positions, e.g. a function must return or raise, aborting statements
do not continue and so on.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To keep cloning of code parts as simple as possible, the limited use
of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;makeCloneAt&lt;/span&gt;&lt;/code&gt; has been changed to a new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;makeClone&lt;/span&gt;&lt;/code&gt; which
produces identical copies, which is what we always do. And a generic
cloning based on “details” has been added, requiring to make
constructor arguments and details complete and consistent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The re-formulation code helpers have been improved to be more
convenient at creating nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The old &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen&lt;/span&gt;&lt;/code&gt; module &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Generator&lt;/span&gt;&lt;/code&gt; was still used for
many things. These now all got moved to appropriate code generation
modules, and their users got updated, also moving some code generator
functions in the process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The module &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen.CodeTemplates&lt;/span&gt;&lt;/code&gt; got replaces with direct
uses of the proper topic module from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen.templates&lt;/span&gt;&lt;/code&gt;,
with some more added, and their names harmonized to be more easily
recognizable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added more assertions to the generated code, to aid bug finding.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The auto-format now sorts pylint markups for increased consistency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Releases no longer have a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tolerant&lt;/span&gt;&lt;/code&gt; flag, this was not needed
anymore as we use SSA.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handle CTRL-C in scons code preventing per job messages that are not
helpful and avoid tracebacks from scons, also remove more unused
tools like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rpm&lt;/span&gt;&lt;/code&gt; from out in-line copy.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added the CPython3.4 test suite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The CPython3.2, CPython3.3, and CPython3.4 test suite now run with
Python2 giving the same errors. Previously there were a few specific
errors, some with line numbers, some with different &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt;
be raised, due to different order of checks.&lt;/p&gt;
&lt;p&gt;This increases the coverage of the exception raising tests somewhat.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also the CPython3.x test suites now all pass with debug Python, as
does the CPython 2.6 test suite with 2.6 now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added tests to cover all forms of unpacking assignments supported in
Python3, to be sure there are no other errors unknown to us.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Started to document the reference count tests, and to make it more
robust against SSA optimization. This will take some time and is work
in progress.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made the compile library test robust against modules that raise a
syntax error, checking that Nuitka does the same.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refined more tests to be directly executable with Python3, this is an
ongoing effort.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is clearly major. It represents a huge step forward for
Nuitka as it improves nearly every aspect of code generation and
analysis. Removing the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; expression nodes proved to be
necessary in order to even have the correct SSA in their cases. Very
important optimization was blocked by it.&lt;/p&gt;
&lt;p&gt;Going forward, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; statements will be removed and
dead variable elimination will happen, which then will give function
inlining. This is expected to happen in one of the next releases.&lt;/p&gt;
&lt;p&gt;This release is a consolidation of 8 hotfix releases, and many
refactorings needed towards the next big step, which might also break
things, and for that reason is going to get its own release cycle.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0514.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-08-28T07:03:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0513.html</id>
    <title>Nuitka Release 0.5.13</title>
    <updated>2015-05-02T09:45:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-13"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains the first use of SSA for value propagation and
massive amounts of bug fixes and optimization. Some of the bugs that
were delivered as hotfixes, were only revealed when doing the value
propagation as they still could apply to real code.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix, relative imports in packages were not working with absolute
imports enabled via future flags. Fixed in 0.5.12.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Loops were not properly degrading knowledge from inside the loop at
loop exit, and therefore this could have lead missing checks and
releases in code generation for cases, for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; statements in the
loop body. Fixed in 0.5.12.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; re-formulation could trigger false assertions,
due to early releases for compatibility. Fixed in 0.5.12.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, optimizion of calls of constant objects (always an exception),
crashed the compiler.Fixed in 0.5.12.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site.py&lt;/span&gt;&lt;/code&gt; installations with a
leading &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;def&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;class&lt;/span&gt;&lt;/code&gt; statement, which is defeating our
attempt to patch &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; for it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: In full compatibility mode, the tracebacks of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; expressions are now as wrong as they are in CPython. Does
not apply to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--improved&lt;/span&gt;&lt;/code&gt; mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Added missing dependency on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;QtGui&lt;/span&gt;&lt;/code&gt; by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;QtWidgets&lt;/span&gt;&lt;/code&gt;
for PyQt5.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: Improved parsing of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;otool&lt;/span&gt;&lt;/code&gt; output to avoid duplicate
entries, which can also be entirely wrong in the case of Qt plugins
at least.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid relative paths for main program with file reference mode
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;original&lt;/span&gt;&lt;/code&gt;, as it otherwise changes as the file moves.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MinGW: The created modules depended on MinGW to be in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; for
their usage. This is no longer necessary, as we now link these
libraries statically for modules too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: For modules, the option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--run&lt;/span&gt;&lt;/code&gt; to immediately load the
modules had been broken for a while.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Ignore Windows DLLs that were attempted to be loaded, but
then failed to load. This happens e.g. when both PySide and PyQt are
installed, and could cause the dreaded conflicting DLLs message. The
DLL loaded in error is now ignored, which avoids this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MinGW: The resource file used might be empty, in which case it
doesn’t get created, avoiding an error due to that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MinGW: Modules can now be created again. The run time relative code
uses an API that is WinXP only, and MinGW failed to find it without
guidance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make direct calls out of called function creations. Initially this
applies to lambda functions only, but it’s expected to become common
place in coming releases. This is now 20x faster than CPython.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Nuitka avoids creating a function object, parsing function arguments:&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Propagate assignments from non-mutable constants forward based on SSA
information. This is the first step of using SSA for real compile
time optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specialized the creation of call nodes at creation, avoiding to have
all kinds be the most flexible form (keyword and plain arguments),
but instead only what kind of call they really are. This saves lots
of memory, and makes the tree faster to visit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for optimizing the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;slice&lt;/span&gt;&lt;/code&gt; built-in with compile time
constant arguments to constants. The re-formulation for slices in
Python3 uses these a lot. And the lack of this optimization prevented
a bunch of optimization in this area. For Python2 the built-in is
optimized too, but not as important probably.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for optimizing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isinstance&lt;/span&gt;&lt;/code&gt; calls with compile time
constant arguments. This avoids static exception raises in the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; re-formulation which tests for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;file&lt;/span&gt;&lt;/code&gt; type, and then
optimization couldn’t tell that a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; is not a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;file&lt;/span&gt;&lt;/code&gt; instance.
Now it can.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lower in-place operations on immutable types to normal operations.
This will allow to compile time compute these more accurately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The re-formulation of loops puts the loop condition as a conditional
statement with break. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt; that needs to apply was only added
in later optimization, leading to unnecessary compile time efforts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed per variable trace visit from optimization, removing useless
code and compile time overhead. We are going to optimize things by
making decision in assignment and reference nodes based on forward
looking statements using the last trace collection.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Python 3.5, which seems to be passing
the test suites just fine. The new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;&lt;/span&gt;&lt;/code&gt; matrix multiplicator
operators are not yet supported though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for patching source on the fly. This is used to work
around a (now fixed) issue with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numexpr.cpuinfo&lt;/span&gt;&lt;/code&gt; making type
checks with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt;&lt;/code&gt; operation, about the only thing we cannot
detect.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added repository for Ubuntu Vivid (15.04) for download. Removed
Ubuntu Saucy and Ubuntu Raring package downloads, these are no longer
supported by Ubuntu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added repository for Debian Stretch, after Jessie release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make it more clear in the documentation that in order to compile
Python3, a Python2 is needed to execute Scons, but that the end
result is a Python3 binary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The PyLint checker tool now can operate on directories given on the
command line, and whitelists an error that is Windows only.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Split up standalone code further, moving &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;depends.exe&lt;/span&gt;&lt;/code&gt; handling to
a separate module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduced code complexity of scons interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleaned up where trace collection is being done. It was partially
still done inside the collection itself instead in the owner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In case of conflicting DLLs for standalone mode, these are now output
with nicer formatting, that makes it easy to recognize what is going
on.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved code to fetch &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;depends.exe&lt;/span&gt;&lt;/code&gt; to dedicated module, so it’s not
as much in the way of standalone code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Made &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;BuiltinsTest&lt;/span&gt;&lt;/code&gt; directly executable with Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added construct test to demonstrate the speed up of direct lambda
calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The deletion of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;test&lt;/span&gt;&lt;/code&gt; for the CPython test suite is more robust
now, esp. on Windows, the symbolic links are now handled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; usage with in-place assignment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover local relative &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;.&lt;/span&gt;&lt;/code&gt; with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;absolute_import&lt;/span&gt;&lt;/code&gt;
future flag enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Again, more basic tests are now directly executable with Python3.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is major due to amount of ground covered. The reduction in
memory usage of Nuitka itself (the C++ compiler will still use much
memory) is very massive and an important aspect of scalability too.&lt;/p&gt;
&lt;p&gt;Then the SSA changes are truly the first sign of major improvements to
come. In their current form, without eliminating dead assignments, the
full advantage is not taken yet, but the next releases will do this, and
that’s a major milestone to Nuitka.&lt;/p&gt;
&lt;p&gt;The other optimization mostly stem from looking at things closer, and
trying to work towards function in-lining, for which we are making a lot
of progress now.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0513.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-05-02T09:45:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-progress-spring-2015.html</id>
    <title>Nuitka Progress in Spring 2015</title>
    <updated>2015-04-30T16:08:54+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-progress-in-spring-2015"&gt;

&lt;p&gt;It’s absolutely time to speak about what’s going on with Nuitka, there
have been a few releases, and big things are going to happen now. The
ones I have always talked of, it’s happening now.&lt;/p&gt;
&lt;p&gt;I absolutely prefer to talk of things when they are completed, that is
why I am shy to make these kinds of postings, but this time, I think
it’s warranted. The next couple of releases are going to be very
different.&lt;/p&gt;
&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-progress-in-spring-2015" id="id1"&gt;Nuitka Progress in Spring 2015&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#ssa-single-state-assignment-form" id="id2"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#scalability" id="id3"&gt;Scalability&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#compatibility" id="id4"&gt;Compatibility&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python-3-5" id="id5"&gt;Python 3.5&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#cells-for-closure" id="id6"&gt;Cells for Closure&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#importing-enhancements" id="id7"&gt;Importing Enhancements&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#performance" id="id8"&gt;Performance&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#graphs-and-benchmarks" id="id9"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#standalone" id="id10"&gt;Standalone&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#other-stuff" id="id11"&gt;Other Stuff&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#debian-stable" id="id12"&gt;Debian Stable&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#funding" id="id13"&gt;Funding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#europython-2015" id="id14"&gt;EuroPython 2015&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#collaborators" id="id15"&gt;Collaborators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#future" id="id16"&gt;Future&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="ssa-single-state-assignment-form"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For a long, long time already, each release of Nuitka has worked towards
increasing &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Static_single_assignment_form"&gt;“SSA”&lt;/a&gt; usage in
Nuitka.&lt;/p&gt;
&lt;p&gt;The component that works on this, is now called “trace collection”, and
does the major driving part for optimization. It collects “variable
traces” and puts them together into “global” forms as well.&lt;/p&gt;
&lt;p&gt;Based on these traces, optimizations can be made. Having SSA or not, is
(to me) the difference between Nuitka as a mere compiler, and Nuitka as
an optimizing compiler.&lt;/p&gt;
&lt;p&gt;The major news is that factory versions of Nuitka now do this in serious
ways, propagating values forward, and we also are close to eliminating
dead assignments, some of which become dead by being having been forward
propagated.&lt;/p&gt;
&lt;p&gt;So we can now finally see that big step, jump really, happening, and
Nuitka does now do some pretty good static optimization, at least
locally.&lt;/p&gt;
&lt;p&gt;Still, right now, this trivial code assigns to a local variable, then
reads from it to return. But not for much longer.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is going to instantly give performance gains, and more importantly,
will enable analysis, that leads to avoiding e.g. the creation of
function objects for local functions, becoming able to in-line, etc.&lt;/p&gt;
&lt;p&gt;This is major excitement to me. And I cannot wait to have the releases
that do this.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="scalability"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Scalability&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The focus has also been lately, to reduce Nuitka’s own memory usage. It
has gone down by a large factor, often by avoiding cyclic dependencies
in the data structures, that the garbage collector of Python failed to
deal with properly.&lt;/p&gt;
&lt;p&gt;The scalability of Nuitka also depends much on generated code size. With
the optimization become more clever, less code needs to be generated,
and that will help a lot. On some platforms, MSVC most notably, it can
be really slow, but it’s noteworthy that Nuitka works not just with 2008
edition, but with the latest MSVC, which appears to be better.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="compatibility"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Compatibility&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There was not a whole lot to gain in the compatibility domain anymore.
Nothing important certainly. But there are import changes.&lt;/p&gt;
&lt;section id="python-3-5"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Python 3.5&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The next release has changes to compile and run the Python3.4 test suite
successfully. Passing here means, to pass/fail in the same way as does
the uncompiled Python. Failures are of course expected, and a nice way
of having coverage for exception codes.&lt;/p&gt;
&lt;p&gt;The new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;#64;&lt;/span&gt;&lt;/code&gt; operator is not supported yet. I will wait with that for
things to stabilize. It’s currently only an alpha release.&lt;/p&gt;
&lt;p&gt;However, Nuitka has probably never been this close to supporting a new
Python version at release time. And since 3.4 was such a heavy drain,
and still not perfectly handled (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; still works like it’s 3.3
e.g.), I wanted to know what is coming a bit sooner.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="cells-for-closure"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Cells for Closure&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We now provide a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__closure__&lt;/span&gt;&lt;/code&gt; value for compiled functions too. These
are not writable in Python, so it’s only a view. Having moved storage
into the compiled function object, that was easy.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="importing-enhancements"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Importing Enhancements&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The the past couple of releases, the import logic was basically
re-written with compatibility much increased. The handling of file case
during import, multiple occurrences in the path, and absolute import
future flags for relative imports has been added.&lt;/p&gt;
&lt;p&gt;It’s mainly the standalone community that will have issues, when just
one of these imports doesn’t find the correct thing, but picking the
wrong one will of course have seriously bad impacts on compile time
analysis too. So once we do cross module optimization, this must be rock
solid.&lt;/p&gt;
&lt;p&gt;I think we have gotten there, tackling these finer details now too.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="performance"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Performance&lt;/a&gt;&lt;/h2&gt;
&lt;section id="graphs-and-benchmarks"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nuitka, users don’t know what to expect regarding the speed of their
code after compilation through Nuitka, neither now nor after type
inference (possibly hard to guess). Nuitka does a bunch of optimizations
for some constructs pretty heavily, but weak at others. But how much
does that affect real code?&lt;/p&gt;
&lt;p&gt;There may well be no significant gain at all for many people, while
there is a number for PyStone that suggests higher. The current and
future versions possibly do speed up but the point is that you cannot
tell if it is even worth for someone to try.&lt;/p&gt;
&lt;p&gt;Nuitka really has to catch up here. The work on automated performance
graphs has some made progress, and they are supposed to show up on
&lt;a class="reference external" href="https://speedcenter.nuitka.net"&gt;Nuitka Speedcenter&lt;/a&gt; each time,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;master&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;factory&lt;/span&gt;&lt;/code&gt; git branches change.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;There currently is no structure to these graphs. There is no
explanations or comments, and there is no trend indicators. All of
which makes it basically useless to everybody except me. And even
harder for me than necessary.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;However, as a glimpse of what will happen when we in-line functions,
take a look at the case, where we already eliminate parameter parsing
only, and make tremendous speedups:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://speedcenter.nuitka.net/constructs/construct-calllambdaexpressiondirectly.html"&gt;Lambda call construct case&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Right now (the graph gets automatic updates with each change), what you
should see, is that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt; branch is 20 times faster than CPython
for that very specific bit of code. That is where we want to be, except
that with actually in-line, this will of course be even better.&lt;/p&gt;
&lt;p&gt;It’s artificial, but once we can forward propagate local function
creations, it will apply there too. The puzzle completes.&lt;/p&gt;
&lt;p&gt;But we also need to put real programs and use cases to test. This may
need your help. Let me know if you want to.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="standalone"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Standalone&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The standalone mode of Nuitka is pretty good, and as usual it continued
to improve only.&lt;/p&gt;
&lt;p&gt;Nothing all that important going on there, except the work on a plug-in
framework, which is under development, and being used to handle e.g.
PyQt plug-ins, or known issues with certain packages.&lt;/p&gt;
&lt;p&gt;The importing improvements already mentioned, have now allowed to cover
many more libraries successfully than before.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="other-stuff"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Other Stuff&lt;/a&gt;&lt;/h2&gt;
&lt;section id="debian-stable"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Debian Stable&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nuitka is now part of Debian stable, aka Jessie. Debian and Python are
the two things closest to my heart in the tech field. You can imagine
that being an upstream worthy of inclusion into Debian stable is an
import milestone to Nuitka for me.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="funding"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Funding&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nuitka receives the occasional &lt;a class="reference external" href="/pages/donations.html"&gt;donation&lt;/a&gt; and
those make me very happy. As there is no support from organization like
the PSF, I am all on my own there.&lt;/p&gt;
&lt;p&gt;This year I likely will travel to Europython 2015, and would ask you to
support me with that, it’s going to be expensive.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="europython-2015"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;EuroPython 2015&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I have plans to present Nuitka’s function in-lining there, real stuff,
on a fully and functional compiler that works as a drop-in replacement.&lt;/p&gt;
&lt;p&gt;Not 100% sure if I can make it by the time, but things look good.
Actually so far I felt ahead of the plan, but as you know, this can
easily change at any point. But Nuitka stands on very stable grounds
code wise.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="collaborators"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Collaborators&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Things are coming along nicely. When I started out, I was fully aware
that the project is something that I can do on my own if necessary, and
that has not changed. Things are going slower than necessary though, but
that’s probably very typical.&lt;/p&gt;
&lt;p&gt;But you can join and should do so now, just &lt;a class="reference external" href="/doc/user-manual.html#join-nuitka"&gt;follow this link&lt;/a&gt; or become part of the mailing list
(since closed) and help me there with request I make, e.g. review posts
of mine, test out things, pick up small jobs, answer questions of
newcomers, you know the drill probably.&lt;/p&gt;
&lt;p&gt;Nuitka is about to make break through progress. And you can be a part of
it. Now.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="future"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id16" role="doc-backlink"&gt;Future&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, there is multiple things going on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;More SSA usage&lt;/p&gt;
&lt;p&gt;The next releases are going to be all about getting this done.&lt;/p&gt;
&lt;p&gt;Once we take it to that next level, Nuitka will be able to speed up
some things by much more than the factor it basically has provided
for 2 years now, and it’s probably going to happen long before
EuroPython 2015.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Function in-lining&lt;/p&gt;
&lt;p&gt;For locally declared functions, it should become possible to avoid
their creation, and make direct calls instead of ones that use
function objects and expensive parameter handling.&lt;/p&gt;
&lt;p&gt;The next step there of course is to not only bind the arguments to
the function signature, but then also to in-line and potentially
specialize the function code. It’s my goal to have that at EuroPython
2015 in a form ready to show off.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When these 2 things come to term, Nuitka will have made really huge
steps ahead and laid the ground for success.&lt;/p&gt;
&lt;p&gt;From then on, a boatload of work remains. The infrastructure in place,
still there is going to be plenty of work to optimize more and more
things conretely, and to e.g. do type inference, and generate different
codes for booleans, ints or float values.&lt;/p&gt;
&lt;p&gt;Let me know, if you are willing to help. I really need that help to make
things happen faster. Nuitka will become more and more important only.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-progress-spring-2015.html"/>
    <summary>It’s absolutely time to speak about what’s going on with Nuitka, there
have been a few releases, and big things are going to happen now. The
ones I have always talked of, it’s happening now.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-04-30T16:08:54+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0512.html</id>
    <title>Nuitka Release 0.5.12</title>
    <updated>2015-04-07T17:55:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-12"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains massive amounts of corrections for long standing
issues in the import recursion mechanism, as well as for standalone
issues now visible after the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt; values have
changed to become run time dependent values.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fix, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt; attribute for packages was still the original
filename’s directory, even in file reference mode was &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;runtime&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;runtime&lt;/span&gt;&lt;/code&gt; as default file reference mode for
executables, even if not in standalone mode, was making acceleration
harder than necessary. Changed to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;original&lt;/span&gt;&lt;/code&gt; for that case. Fixed
in 0.5.11.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The constant value for the smallest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; that is not yet a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; is created using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1&lt;/span&gt;&lt;/code&gt; due to C compiler limitations, but
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1&lt;/span&gt;&lt;/code&gt; was not yet initialized properly, if this was a global
constant, i.e. used in multiple modules. Fixed in 0.5.11.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Recent fixes around &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt; revealed issues with
PyWin32, where modules from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com.shell&lt;/span&gt;&lt;/code&gt; were not properly
recursed to. Fixed in 0.5.11.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The importing of modules with the same name as a built-in module
inside a package falsely assumed these were the built-ins which need
not exist, and then didn’t recurse into them. This affected
standalone mode the most, as the module was then missing entirely.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Inside &amp;quot;x.y&amp;quot; module:&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;x.y.exceptions&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Similarly, the importing of modules with the same name as standard
library modules could go wrong.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Inside &amp;quot;x.y&amp;quot; module:&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;x.y.types&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Importing modules on Windows and macOS was not properly checking the
checking the case, making it associate wrong modules from files with
mismatching case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Importing with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;__future__&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;absolute_import&lt;/span&gt;&lt;/code&gt;
would prefer relative imports still.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Code generation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt; &lt;span class="pre"&gt;expr&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt;
could loose exceptions when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;expr&lt;/span&gt;&lt;/code&gt; raised an exception, leading to
a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RuntimeError&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NULL&lt;/span&gt;&lt;/code&gt; return value. The real exception was
lost.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lambda expressions that were directly called with star arguments
caused the compiler to crash.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# was crashing Nuitka&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Focusing on compile time memory usage, cyclic dependencies of trace
merges that prevented them from being released, even when replaced
were removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More memory efficient updating of global SSA traces, reducing memory
usage during optimization by ca. 50%.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code paths that cannot and therefore must not happen are now more
clearly indicated to the backend compiler, allowing for slightly
better code to be generated by it, as it can tell that certain code
flows need not be merged.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Standalone: On systems, where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.pth&lt;/span&gt;&lt;/code&gt; files inject Python packages
at launch, these are now detected, and taking into account.
Previously Nuitka did not recognize them, due to lack of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__.py&lt;/span&gt;&lt;/code&gt; files. These are mostly pip installations of e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zope.interface&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--explain-imports&lt;/span&gt;&lt;/code&gt; to debug the import resolution
code of Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added options &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-memory&lt;/span&gt;&lt;/code&gt; to display the amount of memory used
in total and how it’s spread across the different node types during
compilation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--trace-execution&lt;/span&gt;&lt;/code&gt; now also covers early program
initialisation before any Python code runs, to ease finding bugs in
this domain as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Changed default for file reference mode to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;original&lt;/span&gt;&lt;/code&gt; unless
standalone or module mode are used. For mere acceleration, breaking
the reading of data files from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; is useless.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added check that the in-line copy of scons is not run with Python3,
which is not supported. Nuitka works fine with Python3, but a Python2
is required to execute scons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Discover more kinds of Python2 installations on Linux/macOS
installations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added instructions for macOS to the download page.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;oset&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;odict&lt;/span&gt;&lt;/code&gt; modules which provide ordered sets and
dictionaries into a new package &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.container&lt;/span&gt;&lt;/code&gt; to clean up the
top level scope.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxErrors&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.tree&lt;/span&gt;&lt;/code&gt; package, where it is used
to format error messages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.Utils&lt;/span&gt;&lt;/code&gt; package to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.utils.Utils&lt;/span&gt;&lt;/code&gt; creating a
whole package for utils, so as to better structure them for their
purpose.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is a major maintenance release. Support for namespace
modules injected by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*.pth&lt;/span&gt;&lt;/code&gt; is a major step for new compatibility. The
import logic improvements expand the ability of standalone mode widely.
Many more use cases will now work out of the box, and less errors will
be found on case insensitive systems.&lt;/p&gt;
&lt;p&gt;There is aside of memory issues, no new optimization though as many of
these improvements could not be delivered as hotfixes (too invasive code
changes), and should be out to the users as a stable release. Real
optimization changes have been postponed to be next release.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0512.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-04-07T17:55:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0511.html</id>
    <title>Nuitka Release 0.5.11</title>
    <updated>2015-03-19T20:54:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-11"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The last release represented a significant change and introduced a few
regressions, which got addressed with hot fix releases. But it also had
a focus on cleaning up open optimization issues that were postponed in
the last release.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The filenames of source files as found in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; attribute
are now made relative for all modes, not just standalone mode.&lt;/p&gt;
&lt;p&gt;This makes it possible to put data files along side compiled modules
in a deployment.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Local functions that reference themselves were not released. They now
are.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;someFunction&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# referencing &amp;#39;f&amp;#39; in &amp;#39;f&amp;#39; caused the garbage collection to fail.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Recent changes to code generation attached closure variable values to
the function object, so now they can be properly visited. Fixed in
0.5.10.1 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2.6: The complex constants with real or imaginary parts
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-0.0&lt;/span&gt;&lt;/code&gt; were collapsed with constants of value &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;0.0&lt;/span&gt;&lt;/code&gt;. This became
more evident after we started to optimize the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;complex&lt;/span&gt;&lt;/code&gt; built-in.
Fixed in 0.5.10.1 already.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;complex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;complex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Could be confused with the above.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complex call helpers could leak references to their arguments. This
was a regression. Fixed in 0.5.10.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parameter variables offered as closure variables were not properly
released, only the cell object was, but not the value. This was a
regression. Fixed in 0.5.10.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The exception type given when accessing local variable
values not initialized in a closure taking function, needs to be
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NameError&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UnboundLocalError&lt;/span&gt;&lt;/code&gt; for accesses in the providing
function. Fixed in 0.5.10.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix support for “venv” on systems, where the system Python uses
symbolic links too. This is the case on at least on Mageia Linux.
Fixed in 0.5.10.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: On systems where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_ssize_t&lt;/span&gt;&lt;/code&gt; are different
(e.g. Win64) iterators could be corrupted if used by uncompiled
Python code. Fixed in 0.5.10.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, generator objects didn’t release weak references to them
properly. Fixed in 0.5.10.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__closure__&lt;/span&gt;&lt;/code&gt; attributes of functions was so far
not supported, and rarely missing. Recent changes made it easy to
expose, so now it was added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS: A linker warning about deprecated linker option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-s&lt;/span&gt;&lt;/code&gt; was
solved by removing the option.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Nuitka was enforcing that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__doc__&lt;/span&gt;&lt;/code&gt; attribute to
be a string object, and gave a misleading error message. This check
must not be done though, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__doc__&lt;/span&gt;&lt;/code&gt; can be any type in Python.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Variables that need not be shared, because the uses in closure taking
functions were eliminated, no longer use cell objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; statements now both
have actual merging for SSA, allowing for better optimization of code
behind it.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;

    &lt;span class="c1"&gt;# Since the above exception handling cannot continue the code flow,&lt;/span&gt;
    &lt;span class="c1"&gt;# we do not have to invalidate the trace of &amp;quot;a&amp;quot;, and e.g. do not have&lt;/span&gt;
    &lt;span class="c1"&gt;# to generate code to check if it&amp;#39;s assigned.&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Since &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; is used in almost all re-formulations of
complex Python constructs this is improving SSA application widely.
The uses of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt; in user code will no longer degrade
optimization and code generation efficiency as much as they did.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt; statement now reduces the scope of tried block
if possible. When no statement raised, already the handling was
removed, but leading and trailing statements that cannot raise, were
not considered.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is now optimized to.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;

    &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The impact may on execution speed may be marginal, but it is
definitely going to improve the branch merging to be added later.
Note that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;c&lt;/span&gt;&lt;/code&gt; can only be optimized, because the exception handler
is aborting, otherwise it would change behaviour.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The creation of code objects for standalone mode and now all code
objects was creating a distinct filename object for every function in
a module, despite them being same content. This was wasteful for
module loading. Now it’s done only once.&lt;/p&gt;
&lt;p&gt;Also, when having multiple modules, the code to build the run time
filename used for code objects, was calling import logic, and doing
lookups to find &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.join&lt;/span&gt;&lt;/code&gt; again and again. These are now
cached, speeding up the use of many modules as well.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Nuitka used to have “variable usage profiles” and still used them to
decide if a global variable is written to, in which case, it stays
away from doing optimization of it to built-in lookups, and later
calls.&lt;/p&gt;
&lt;p&gt;The have been replaced by “global variable traces”, which collect the
traces to a variable across all modules and functions. While this is
now only a replacement, and getting rid of old code, and basing on
SSA, later it will also allow to become more correct and more
optimized.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The standalone now queries its hidden dependencies from a plugin
framework, which will become an interface to Nuitka internals in the
future.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="testing"&gt;
&lt;h2&gt;Testing&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The use of deep hashing of constants allows us to check if constants
become mutated during the run-time of a program. This allows to
discover corruption should we encounter it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The tests of CPython are now also run with Python in debug mode, but
only on Linux, enhancing reference leak coverage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The CPython test parts which had been disabled due to reference
cycles involving compiled functions, or usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__closure__&lt;/span&gt;&lt;/code&gt;
attribute, were reactivated.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Since Google Code has shutdown, it has been removed from the Nuitka
git mirrors.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release brings exciting new optimization with the focus on the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt; constructs, now being done more optimal. It is also a
maintenance release, bringing out compatibility improvements, and
important bug fixes, and important usability features for the deployment
of modules and packages, that further expand the use cases of Nuitka.&lt;/p&gt;
&lt;p&gt;The git flow had to be applied this time to get out fixes for regression
bug fixes, that the big change of the last release brought, so this is
also to consolidate these and the other corrections into a full release
before making more invasive changes.&lt;/p&gt;
&lt;p&gt;The cleanups are leading the way to expanded SSA applied to global
variable and shared variable values as well. Already the built-in detect
is now based on global SSA information, which was an important step
ahead.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0511.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-03-19T20:54:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0510.html</id>
    <title>Nuitka Release 0.5.10</title>
    <updated>2015-03-06T07:07:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-10"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has a focus on code generation optimization. Doing major
changes away from “C++-ish” code to “C-ish” code, many constructs are
now faster or got looked at and optimized.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The variable name in locals for the iterator provided
to the generator expression should be &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.0&lt;/span&gt;&lt;/code&gt;, now it is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generators could leak frames until program exit, these are now
properly freed immediately.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Faster exception save and restore functions that might be in-lined by
the backend C compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster error checks for many operations, where these errors are
expected, e.g. instance attribute lookups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not create traceback and locals dictionary for frame when
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;GeneratorExit&lt;/span&gt;&lt;/code&gt; are raised. These tracebacks
were wasted, as they were immediately released afterwards.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Closure variables to functions and parameters of generator functions
are now attached to the function and generator objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The creation of functions with closure taking was accelerated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The creation and destruction of generator objects was accelerated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The re-formulation for in-place assignments got simplified and got
faster doing so.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In-place operations of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; were always copying the string, even
if was not necessary.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;  &lt;span class="c1"&gt;# Was not re-using the storage of &amp;quot;a&amp;quot; in case of strings&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Additions of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; for Python2 are now even faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Access to local variable values got slightly accelerated at the
expense of closure variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for optimizing the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;complex&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removing unused temporary and local variables as a result of
optimization, these previously still allocated storage.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanup"&gt;
&lt;h2&gt;Cleanup&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The use of C++ classes for variable objects was removed. Closure
variables are now attached as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyCellObject&lt;/span&gt;&lt;/code&gt; to the function
objects owning them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of C++ context classes for closure taking and generator
parameters has been replaced with attaching values directly to
functions and generator objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The indentation of code template instantiations spanning multiple was
not in all cases proper. We were using emission objects that handle
it new lines in code and mere &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt; objects, that don’t handle
them in mixed forms. Now only the emission objects are used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some templates with C++ helper functions that had no variables got
changed to be properly formatted templates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The internal API for handling of exceptions is now more consistent
and used more efficiently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The printing helpers got cleaned up and moved to static code,
removing any need for forward declaration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;INCREASE_REFCOUNT_X&lt;/span&gt;&lt;/code&gt; was removed, it got replaced with
proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_XINCREF&lt;/span&gt;&lt;/code&gt; usages. The function was once required before
“C-ish” lifted the need to do everything in one function call.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;INCREASE_REFCOUNT&lt;/span&gt;&lt;/code&gt; got reduced. See above for why that
is any good. The idea is that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_INCREF&lt;/span&gt;&lt;/code&gt; must be good enough, and
that we want to avoid the C function it was, even if in-lined.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assertObject&lt;/span&gt;&lt;/code&gt; function that checks if an object is not
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NULL&lt;/span&gt;&lt;/code&gt; and has positive reference count, i.e. is sane, got turned
into a preprocessor macro.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deep hashes of constant values created in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; mode, which
cover also mutable values, and attempt to depend on actual content.
These are checked at program exit for corruption. This may help
uncover bugs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Speedcenter has been enhanced with better graphing and has more
benchmarks now. More work will be needed to make it useful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updates to the Developer Manual, reflecting the current near finished
state of “C-ish” code generation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;New reference count tests to cover generator expressions and their
usage got added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many new construct-based tests got added, these will be used for
performance graphing, and serve as micro benchmarks now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Again, more basic tests are directly executable with Python3.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This is the next evolution of “C-ish” coming to pass. The use of C++ has
for all practical purposes vanished. It will remain an ongoing activity
to clear that up and become real C. The C++ classes were a huge road
block to many things, that now will become simpler. One example of these
were in-place operations, which now can be dealt with easily.&lt;/p&gt;
&lt;p&gt;Also, lots of polishing and tweaking was done while adding construct
benchmarks that were made to check the impact of these changes. Here,
generators probably stand out the most, as some of the missed
optimization got revealed and then addressed.&lt;/p&gt;
&lt;p&gt;Their speed increases will be visible to some programs that depend a lot
on generators.&lt;/p&gt;
&lt;p&gt;This release is clearly major in that the most important issues got
addressed, future releases will provide more tuning and completeness,
but structurally the “C-ish” migration has succeeded, and now we can
reap the benefits in the coming releases. More work will be needed for
all in-place operations to be accelerated.&lt;/p&gt;
&lt;p&gt;More work will be needed to complete this, but it’s good that this is
coming to an end, so we can focus on SSA based optimization for the
major gains to be had.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0510.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-03-06T07:07:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-progress-2014.html</id>
    <title>Nuitka progress 2014</title>
    <updated>2015-03-02T07:08:54+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-progress-2014"&gt;

&lt;p&gt;Again, not much has happened publicly to Nuitka, except for some
releases, so it’s time to make a kind of status post, about the really
exciting news there is, also looking back at 2014 for Nuitka, and
forward of course.&lt;/p&gt;
&lt;p&gt;I meant to post this basically since last year, but never got around to
it, therefore the 2014 in the title.&lt;/p&gt;
&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-progress-2014" id="id1"&gt;Nuitka progress 2014&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#ssa-single-state-assignment-form" id="id2"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#improved-code-generation" id="id3"&gt;Improved Code Generation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#scalability" id="id4"&gt;Scalability&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#compatibility" id="id5"&gt;Compatibility&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#cells-for-closure" id="id6"&gt;Cells for Closure&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#local-variable-storage" id="id7"&gt;Local Variable Storage&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#performance" id="id8"&gt;Performance&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#graphs-and-benchmarks" id="id9"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#standalone" id="id10"&gt;Standalone&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#other-stuff" id="id11"&gt;Other Stuff&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#funding" id="id12"&gt;Funding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#collaborators" id="id13"&gt;Collaborators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#future" id="id14"&gt;Future&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="ssa-single-state-assignment-form"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For a long, long time already, each release of Nuitka has worked towards
enabling &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Static_single_assignment_form"&gt;“SSA”&lt;/a&gt; usage in
Nuitka. There is a component called “constraint collection”, which is
tasked with driving the optimization, and collecting variable traces.&lt;/p&gt;
&lt;p&gt;Based on these traces, optimizations can be made. Having SSA or not, is
(to me) the difference between Nuitka as a compiler, and Nuitka as an
optimizing compiler.&lt;/p&gt;
&lt;p&gt;The news is, SSA has carried the day, and is used throughout code
generation for some time now, and gave minor improvements. It has been
applied to the temporary and local variable values.&lt;/p&gt;
&lt;p&gt;And currently, work is on the way to expand it to module and shared
variables, which can get invalidated quite easily, as soon as unknown
code is executed. An issue there is to identify all those spots
reliably.&lt;/p&gt;
&lt;p&gt;And this spring, we are finally going to see the big jump that is
happening, once Nuitka starts to use that information to propagate
things.&lt;/p&gt;
&lt;p&gt;Still, right now, this code assigns to a local variable, then reads from
it to return. But not much longer.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is going to instantly give gains, and more importantly, will enable
analysis, that leads to avoiding e.g. the creation of function objects
for local functions, being able to in-line, etc.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="improved-code-generation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Improved Code Generation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Previously, under the title “C-ish”, Nuitka moved away from C++ based
code generation to less C++ based code generated, and more C-ish code.
This trend continues, and has lead to removing more code generation
improvements.&lt;/p&gt;
&lt;p&gt;The important change recently was to remove the usage of the blocking
holdouts, the C++ classes used for local variables are closure taking,
and release, and move those to be done manually.&lt;/p&gt;
&lt;p&gt;This enabled special code generation for in-place operations, which are
the most significant improvements of the upcoming release. These were
held back on, as with C++ destructors doing the release, it’s
practically impossible to deal with values suddenly becoming illegal.
Transfer of object ownership needs to be more fluid than could be
presented to C++ objects.&lt;/p&gt;
&lt;p&gt;Currently, this allows to speed up string in-place operations, which
very importantly then, can avoid to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;memcpy&lt;/span&gt;&lt;/code&gt; large values potentially.
And this is about catching up to CPython in this regard. After that, we
will likely be able to expand it to cases where CPython could never do
it, e.g. also &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; objects&lt;/p&gt;
&lt;/section&gt;
&lt;section id="scalability"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Scalability&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The scalability of Nuitka depends much on generated code size. With it
being less stupid, the generated code is now not only faster, but
definitely smaller, and with more optimization, it will only become more
practical.&lt;/p&gt;
&lt;p&gt;Removing the many C++ classes already gave the backend compiler an
easier time. But we need to do more, to e.g. have generic parameter
parsing, instead of specialized per function, and module exclusive
constants should not be pre-created, but in the module body, when they
are used.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="compatibility"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Compatibility&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is not a whole lot to gain in the compatibility domain anymore.
Nothing important certainly. But there are these minor things.&lt;/p&gt;
&lt;section id="cells-for-closure"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Cells for Closure&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;However, since we now use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyCell&lt;/span&gt;&lt;/code&gt; objects for closure, we could start
and provide a real &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__closure__&lt;/span&gt;&lt;/code&gt; value, that could even be writable.
We could start supporting that easily.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="local-variable-storage"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Local Variable Storage&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Currently, local variables use stack storage. Were we to use function
object or frame object attached storage, we could provide frame locals
that actually work. This may be as simple as to put those in an array on
the stack and use the pointer to it.&lt;/p&gt;
&lt;p&gt;Suddenly locals would become writable. I am not saying this is useful,
just that it’s possible to do this.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="performance"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Performance&lt;/a&gt;&lt;/h2&gt;
&lt;section id="graphs-and-benchmarks"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The work on automated performance graphs has made progress, and they are
supposed to show up on &lt;a class="reference external" href="https://speedcenter.nuitka.net"&gt;Nuitka Speedcenter&lt;/a&gt; each time, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;master&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;factory&lt;/span&gt;&lt;/code&gt; git branches change.&lt;/p&gt;
&lt;p&gt;There currently is no structure to these graphs. There is no
explanations or comments, and there is no trend indicators. All of which
makes it basically useless to everybody except me. And even harder for
me than necessary.&lt;/p&gt;
&lt;p&gt;At least it’s updated to latest Nikola, and uses PyGal for the graphics
now, so it’s easier to expand. The plan here, is to integrate with
special pages from a Wiki, making it easy to provide comments.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="standalone"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Standalone&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The standalone mode of Nuitka is pretty good, and as usual it continued
to improve only.&lt;/p&gt;
&lt;p&gt;The major improvements came from handling case collisions between
modules and packages. One can have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Module.py&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;module/__init__.py&lt;/span&gt;&lt;/code&gt; and they both are expected to be different, even
on Windows, where filenames are case insensitive.&lt;/p&gt;
&lt;p&gt;So, giving up on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;implib&lt;/span&gt;&lt;/code&gt; and similar, we finally have our own code to
scan in a compatible way the file system, and make these determinations,
whereas library code exposing functionality, doesn’t handling all things
in really the proper way.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="other-stuff"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Other Stuff&lt;/a&gt;&lt;/h2&gt;
&lt;section id="funding"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Funding&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nuitka receives some, bit not quite enough &lt;a class="reference external" href="/pages/donations.html"&gt;donations&lt;/a&gt;. There is no support from organizations like
e.g. the PSF, and it seems I better not hold my breath for it. I will
travel to Europython 2015, and would ask you to support me with that,
it’s going to be expensive.&lt;/p&gt;
&lt;p&gt;In 2014, with donations, I bought a “Cubox i4-Pro”, which is an ARM
based machine with 4 cores, and 2GB RAM. Works from flash, and with the
eSATA disk attached, it works nice for continuous integration, which
helps me a lot to deliver extremely high quality releases. It’s pretty
nice, except that when using all 4 cores, it gets too hot. So “systemd”
to the rescue and just limited the Buildbot slave’s service to use 3
cores of CPU maximum and now it runs stable.&lt;/p&gt;
&lt;p&gt;Also with donations I bought a Terrabyte SSD, which I use on the desktop
to speed up hosting the virtual machines, and my work in general.&lt;/p&gt;
&lt;p&gt;And probably more important, the host of “nuitka.net” became a real
machine with real hardware last year, and lots more RAM, so I can spare
myself of optimizing e.g. MySQL for low memory usage. The monthly fee of
that is substantial, but supported from your donations. Thanks a lot!&lt;/p&gt;
&lt;/section&gt;
&lt;section id="collaborators"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Collaborators&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Things are coming along nicely. When I started out, I was fully aware
that the project is something that I can do on my own if necessary, and
that has not changed. Things are going slower than necessary though, but
that’s probably very typical.&lt;/p&gt;
&lt;p&gt;But you can join and should do so now, just &lt;a class="reference external" href="/doc/user-manual.html#join-nuitka"&gt;follow this link&lt;/a&gt; or become part of the mailing list
(since closed) and help me there with request I make, e.g. review posts
of mine, test out things, pick up small jobs, answer questions of
newcomers, you know the drill probably.&lt;/p&gt;
&lt;p&gt;Nuitka is about to make break through progress. And you can be a part of
it. Now.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="future"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Future&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, there is multiple things going on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;More “C-ish” code generation&lt;/p&gt;
&lt;p&gt;The next release is going to be more “C-ish” than before, and we can
start to actually migrate to really “C” language. You can help out if
you want to, this is fairly standard cleanups. Just pop up on the
mailing list and say so.&lt;/p&gt;
&lt;p&gt;This prong of action is coming to a logical end. The “C-ish” project,
while not planned from the outset, turns out to be a full success.
Initially, I would not have started Nuitka, should I have faced the
full complexity of code generation that there is now. So it was good
to start with “C++”, but it’s a better Nuitka now.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More SSA usage&lt;/p&gt;
&lt;p&gt;The previous releases consolidated on SSA. A few missing
optimizations were found, because SSA didn’t realize things, which
were then highlighted by code generation being too good, e.g. not
using exception variables.&lt;/p&gt;
&lt;p&gt;We seem to have an SSA that can be fully trusted now, and while it
can be substantially improved (e.g. the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try/finally&lt;/span&gt;&lt;/code&gt; removes all
knowledge, although it only needs to do a partial removing of
knowledge for the finally block, not for afterwards at all), it will
already allow for many nice things to happen.&lt;/p&gt;
&lt;p&gt;Once we take it to that next level, Nuitka will be able to speed up
some things by much more than the factor it basically has provided
for 2 years now, and it’s probably going to happen before summer, or
so I hope.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Value propagation&lt;/p&gt;
&lt;p&gt;Starting out with simple cases, Nuitka will forward propagate
variable values, and start to eliminate variable usages entirely,
where they are not needed.&lt;/p&gt;
&lt;p&gt;That will make many things much more compact, and faster at run time.
We will then try and build “gates” for statements that they cannot
pass, so we can e.g. optimize constant things outside of loops, that
kind of thing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When these 3 things come to term, Nuitka will make a huge step ahead. I
look forward to demoing function call in-lining, or at least avoiding
the argument parsing at EuroPython 2015, making direct calls, which will
be way faster than normal calls.&lt;/p&gt;
&lt;p&gt;From then on, a boatload of work remains. The infrastructure in place,
still there is going to be plenty of work to optimize more and more
things conretely.&lt;/p&gt;
&lt;p&gt;Let me know, if you are willing to help. I really need that help to make
things happen faster.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-progress-2014.html"/>
    <summary>Again, not much has happened publicly to Nuitka, except for some
releases, so it’s time to make a kind of status post, about the really
exciting news there is, also looking back at 2014 for Nuitka, and
forward of course.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-03-02T07:08:54+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-059.html</id>
    <title>Nuitka Release 0.5.9</title>
    <updated>2015-01-30T07:37:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-9"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is mostly a maintenance release, bringing out minor
compatibility improvements, and some standalone improvements. Also new
options to control the recursion into modules are added.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Checks for iterators were using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyIter_Check&lt;/span&gt;&lt;/code&gt; which
is buggy when running outside of Python core, because it’s comparing
pointers we don’t see. Replaced with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;HAS_ITERNEXT&lt;/span&gt;&lt;/code&gt; helper which
compares against the pointer as extracting for a real non-iterator
object.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;Iterable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;consumed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;__iter__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Iterable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="nb"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Iterable&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;  &lt;span class="c1"&gt;# This is suppose to raise, but didn&amp;#39;t with Nuitka&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Errors when creating class dictionaries raised by the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__prepare__&lt;/span&gt;&lt;/code&gt; dictionary (e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;enum&lt;/span&gt;&lt;/code&gt; classes with wrong
identifiers) were not immediately raised, but only by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt;
call.&lt;/p&gt;
&lt;p&gt;This was not observable, but might have caused issues potentially.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone macOS: Shared libraries and extension modules didn’t have
their DLL load paths updated, but only the main binary. This is not
sufficient for more complex programs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone Linux: Shared libraries copied into the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.dist&lt;/span&gt;&lt;/code&gt; folder
were read-only and executing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;chrpath&lt;/span&gt;&lt;/code&gt; could potentially then fail.
This has not been observed, but is a conclusion of macOS fix.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: When freezing standard library, the path of Nuitka and
the current directory remained in the search path, which could lead
to looking at the wrong files.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getattr&lt;/span&gt;&lt;/code&gt; built-in is now optimized for compile time constants
if possible, even in the presence of a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;default&lt;/span&gt;&lt;/code&gt; argument. This is
more a cleanup than actually useful yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The calling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyCFunction&lt;/span&gt;&lt;/code&gt; from normal Python extension modules
got accelerated, especially for the no or single argument cases where
Nuitka now avoids building the tuple.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added the option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-pattern&lt;/span&gt;&lt;/code&gt; to include modules per
filename, which for Python3 is the only way to not have them in a
package automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added the option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--generate-c++-only&lt;/span&gt;&lt;/code&gt; to only generate the C++
source code without starting the compiler.&lt;/p&gt;
&lt;p&gt;Mostly used for debugging and testing coverage. In the later case we
do not want the C++ compiler to create any binary, but only to
measure what would have been used.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="id1"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/nuitka-buildslave/slave/site-main-update/build/site/posts/nuitka-release-059.rst&lt;/span&gt;, line 87); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “organizational”.&lt;/p&gt;
&lt;/aside&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Renamed the debug option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--c++-only&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recompile-c++-only&lt;/span&gt;&lt;/code&gt;
to make its purpose more clear and there now is
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--generate-c++-only&lt;/span&gt;&lt;/code&gt; too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for taking coverage of Nuitka in a test run on a given
input file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for taking coverage for all Nuitka test runners,
migrating them all to common code for searching.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added uniform way of reporting skipped tests, not generally used yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release marks progress towards having coverage testing. Recent
releases had made it clear that not all code of Nuitka is actually used
at least once in our release tests. We aim at identifying these.&lt;/p&gt;
&lt;p&gt;Another direction was to catch cases, where Nuitka leaks exceptions or
is subject to leaked exceptions, which revealed previously unnoticed
errors.&lt;/p&gt;
&lt;p&gt;Important changes have been delayed, e.g. the closure variables will not
yet use C++ objects to share storage, but proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyCellObject&lt;/span&gt;&lt;/code&gt; for
improved compatibility, and to approach a more “C-ish” status. These is
unfinished code that does this. And the forward propagation of values is
not enabled yet again either.&lt;/p&gt;
&lt;p&gt;So this is an interim step to get the bug fixes and improvements
accumulated out. Expect more actual changes in the next releases.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-059.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-01-30T07:37:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-058.html</id>
    <title>Nuitka Release 0.5.8</title>
    <updated>2015-01-16T05:04:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-8"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release has mainly a focus on cleanups and compatibility
improvements. It also advances standalone support, and a few
optimization improvements, but it mostly is a maintenance release,
attacking long standing issues.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compatibility Windows macOS: Fix importing on case insensitive
systems.&lt;/p&gt;
&lt;p&gt;It was not always working properly, if there was both a package
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Something&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;something&lt;/span&gt;&lt;/code&gt;, by merit of having files
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Something/__init__.py&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;something.py&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: The search path was preferring system directories and
therefore could have conflicting DLLs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the optimization of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getattr&lt;/span&gt;&lt;/code&gt; with predictable result was
crashing the compilation. This was a regression, fixed in 0.5.7.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The name mangling inside classes also needs to be
applied to global variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, providing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clang++&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CXX&lt;/span&gt;&lt;/code&gt; was mistakenly thinking of it
as a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;g++&lt;/span&gt;&lt;/code&gt; and making version checks on it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Declaring &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__class__&lt;/span&gt;&lt;/code&gt; global is now a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt;
before Python3.4.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone Python3: Making use of module state in extension modules
was not working properly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The filenames of source files as found in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; attribute
are now made relative in standalone mode.&lt;/p&gt;
&lt;p&gt;This should make it more apparent if things outside of the
distribution folder are used, at the cost of tracebacks. Expect the
default ability to copy the source code along in an upcoming release.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added experimental standalone mode support for PyQt5. At least
headless mode should be working, plugins (needed for anything
graphical) are not yet copied and will need more work.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanup"&gt;
&lt;h2&gt;Cleanup&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;No longer using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;imp.find_module&lt;/span&gt;&lt;/code&gt; anymore. To solve the casing
issues we needed to make our own module finding implementation
finally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The name mangling was handled during code generation only. Moved to
tree building instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More code generation cleanups. The compatible line numbers are now
attached during tree building and therefore better preserved, as well
as that code no longer polluting code generation as much.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;No more packages for openSUSE 12.1/12.2/12.3 and Fedora 17/18/19 as
requested by the openSUSE Build Service.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added RPM packages for Fedora 21 and CentOS 7 on openSUSE Build
Service.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Lots of test refinements for the CPython test suites to be run
continuously in Buildbot for both Windows and Linux.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release brings about two major changes, each with the risk to break
things.&lt;/p&gt;
&lt;p&gt;One is that we finally started to have our own import logic, which has
the risk to cause breakage, but apparently currently rather improved
compatibility. The case issues were not fixable with standard library
code.&lt;/p&gt;
&lt;p&gt;The second one is that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; attributes for standalone mode
is now no longer pointing to the original install and therefore will
expose missing stuff sooner. This will have to be followed up with code
to scan for missing “data” files later on.&lt;/p&gt;
&lt;p&gt;For SSA based optimization, there are cleanups in here, esp. the one
removing the name mangling, allowing to remove special code for class
variables. This makes the SSA tree more reliable. Hope is that the big
step (forward propagation through variables) can be made in one of the
next releases.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-058.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-01-16T05:04:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/article-over-nuitka-standalone.html</id>
    <title>Article about Nuitka Standalone Mode</title>
    <updated>2015-01-06T12:46:50+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="article-about-nuitka-standalone-mode"&gt;

&lt;p&gt;There is a really well written article about Nuitka written by Tom
Sheffler.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;The article has since become unavailable unfortunately.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;It inspired me to finally become clean with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; attributes in
standalone mode. Currently it points to where your source was when
things were compiled. In the future (in standalone mode, for accelerated
mode that continues to be good), it will point into the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.dist&lt;/span&gt;&lt;/code&gt;
folder, so that the SWIG workaround may become no longer necessary.&lt;/p&gt;
&lt;p&gt;Thanks Tom for sharing your information, and good article.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/article-over-nuitka-standalone.html"/>
    <summary>There is a really well written article about Nuitka written by Tom
Sheffler.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-01-06T12:46:50+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-057.html</id>
    <title>Nuitka Release 0.5.7</title>
    <updated>2015-01-02T09:49:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-7"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is brings a newly supported platform, bug fixes, and again
lots of cleanups.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fix, creation of dictionary and set literals with non-hashable
indexes did not raise an exception.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{[]:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# This is now a TypeError&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Calls to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; built-in with only keyword arguments are now
optimized to mere dictionary creations. This is new for the case of
non-constant arguments only of course.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# equivalent to&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Slice &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; with indexable arguments are now using optimized code
that avoids Python objects too. This was already done for slice
look-ups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bytearray&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for OpenBSD with fiber implementation from library, as
it has no context support.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved slicing solutions for Python3 to the re-formulation stage. So
far the slice nodes were used, but only at code generation time,
there was made a distinction between Python2 and Python3 for them.
Now these nodes are purely Python2 and slice objects are used
universally for Python3.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The test runners now have common code to scan for the first file to
compile, an implementation of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;search&lt;/span&gt;&lt;/code&gt; mode. This will allow to
introduce the ability to search for pattern matches, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More tests are directly executable with Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;recurse_none&lt;/span&gt;&lt;/code&gt; mode to test comparison, making using extra
options for that purpose unnecessary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This solves long standing issues with slicing and subscript not being
properly distinguished in the Nuitka code. It also contains major bug
fixes that really problematic. Due to the involved nature of these fixes
they are made in this new release.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-057.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2015-01-02T09:49:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-056.html</id>
    <title>Nuitka Release 0.5.6</title>
    <updated>2014-12-19T07:54:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-6"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release brings bug fixes, important new optimization, newly
supported platforms, and important compatibility improvements. Progress
on all fronts.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Closure taking of global variables in member functions of classes
that had a class variable of the same name was binding to the class
variable as opposed to the module variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Overwriting compiled function’s &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__doc__&lt;/span&gt;&lt;/code&gt; attribute more than once
could corrupt the old value, leading to crashes. Fixed in 0.5.5.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility Python2: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statement &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;execfile&lt;/span&gt;&lt;/code&gt; were
changing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals()&lt;/span&gt;&lt;/code&gt; was given as an argument.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;function&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;exec&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;locals&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# Cannot change local &amp;quot;a&amp;quot;.&lt;/span&gt;
    &lt;span class="n"&gt;exec&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;  &lt;span class="c1"&gt;# Can change local &amp;quot;a&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;exec&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Previously Nuitka treated all 3 variants the same.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Empty branches with a condition were reduced to only
the condition, but they need in fact to also check the truth value:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;span class="c1"&gt;# must be treated as&lt;/span&gt;
&lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# and not (bug)&lt;/span&gt;
&lt;span class="n"&gt;condition&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detection of Windows virtualenv was not working properly. Fixed in
0.5.5.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Large enough constants structures are now unstreamed via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;marshal&lt;/span&gt;&lt;/code&gt;
module, avoiding large codes being generated with no point. Fixed in
0.5.5.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Pressing CTRL-C gave two stack traces, one from the
re-execution of Nuitka which was rather pointless. Fixed in 0.5.5.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Searching for virtualenv environments didn’t terminate in
all cases. Fixed in 0.5.5.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;During installation from PyPI with Python3 versions, there were
errors given for the Python2 only scons files. Fixed in 0.5.5.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the arguments of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; expressions could be leaked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, closure taking of a class variable could have in a sub class
where the module variable was meant.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;

    &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;D&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="c1"&gt;# was C.var, now correctly addressed top level var&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, setting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CXX&lt;/span&gt;&lt;/code&gt; environment variable because the installed gcc
has too low version, wasn’t affecting the version check at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, on Debian/Ubuntu with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hardening-wrapper&lt;/span&gt;&lt;/code&gt; installed the
version check was always failing, because these report a shortened
version number to Scons.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Local variables that must be assigned also have no side effects,
making use of SSA. This allows for a host of optimization to be
applied to them as well, often yielding simpler access/assign code,
and discovering in more cases that frames are not necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Micro optimization to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt; built-in for simpler code generation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for ARM “hard float” architecture.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added package for Ubuntu 14.10 for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added package for openSUSE 13.2 for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Donations were used to buy a Cubox-i4 Pro. It got Debian Jessie
installed on it, and will be used to run an even larger amount of
tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made it more clear in the user documentation that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.exe&lt;/span&gt;&lt;/code&gt; suffix
is used for all platforms, and why.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generally updated information in User Manual and Developer Manual
about the optimization status.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using Nikola 7.1 with external filters instead of our own, outdated
branch for the web site.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;PyLint clean for the first time ever. We now have a Buildbot driven
test that this stays that way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Massive indentation cleanup of keyword argument calls. We have a rule
to align the keywords, but as this was done manually, it could easily
get out of touch. Now with a auto-format tool based on RedBaron, it’s
correct. Also, spacing around arguments is now automatically
corrected. More to come.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statements, the coping back to local variables is now an
explicit node in the tree, leader to cleaner code generation, as it
now uses normal variable assignment code generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MaybeLocalVariables&lt;/span&gt;&lt;/code&gt; became explicit about which variable they
might be, and contribute to its SSA trace as well, which was
incomplete before.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed some cases of code duplication that were marked as TODO
items. This often resulted in cleanups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;replaceWith&lt;/span&gt;&lt;/code&gt; on child nodes, that potentially were
re-used during their computation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The release is mainly the result of consolidation work. While the
previous release contained many important enhancements, this is another
important step towards full SSA, closing one loop whole (class variables
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; functions), as well as applying it to local variables,
largely extending its use.&lt;/p&gt;
&lt;p&gt;The amount of cleanups is tremendous, in huge part due to infrastructure
problems that prevented release repeatedly. This reduces the
technological debt very much.&lt;/p&gt;
&lt;p&gt;More importantly, it would appear that now eliminating local and
temporary variables that are not necessary is only a small step away.
But as usual, while this may be easy to implement now, it will uncover
more bugs in existing code, that we need to address before we continue.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-056.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2014-12-19T07:54:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-055.html</id>
    <title>Nuitka Release 0.5.5</title>
    <updated>2014-10-05T23:15:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-5"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is finally making full use of SSA analysis knowledge for
code generation, leading to many enhancements over previous releases.&lt;/p&gt;
&lt;p&gt;It also adds support for Python3.4, which has been longer in the making,
due to many rather subtle issues. In fact, even more work will be needed
to fully solve remaining minor issues, but these should affect no real
code.&lt;/p&gt;
&lt;p&gt;And then there is much improved support for using standalone mode
together with virtualenv. This combination was not previously supported,
but should work now.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added support for Python3.4&lt;/p&gt;
&lt;p&gt;This means support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clear&lt;/span&gt;&lt;/code&gt; method of frames to close
generators, dynamic &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__qualname__&lt;/span&gt;&lt;/code&gt;, affected by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;global&lt;/span&gt;&lt;/code&gt;
statements, tuples as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; arguments, improved error
messages, additional checks, and many more detail changes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Using SSA knowledge, local variable assignments now no longer need to
check if they need to release previous values, they know definitely
for the most cases.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c1"&gt;# This used to check if old value of &amp;quot;a&amp;quot; needs a release&lt;/span&gt;
    &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using SSA knowledge, local variable references now no longer need to
check for raising exceptions, let alone produce exceptions for cases,
where that cannot be.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;  &lt;span class="c1"&gt;# This used to check if &amp;quot;a&amp;quot; is assigned&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using SSA knowledge, local variable references now are known if they
can raise the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UnboundLocalError&lt;/span&gt;&lt;/code&gt; exception or not. This allows to
eliminate frame usages for many cases. Including the above example.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using less memory for keeping variable information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also using less memory for constant nodes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The standalone freezing code was reading Python source as UTF-8 and
not using the code that handles the Python encoding properly. On some
platforms there are files in standard library that are not encoded
like that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The fiber implementation for Linux amd64 was not working with glibc
from RHEL 5. Fixed to use now multiple &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; to pass pointers as
necessary. Also use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;uintptr_t&lt;/span&gt;&lt;/code&gt; instead of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;intprt_t&lt;/span&gt;&lt;/code&gt; to
transport pointers, which may be more optimal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Line numbers for exceptions were corrupted by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; statements due
to setting line numbers even for statements marked as internal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Partial support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com&lt;/span&gt;&lt;/code&gt; by adding support for its hidden
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__path__&lt;/span&gt;&lt;/code&gt; change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Finally figured out proper chaining of exceptions, given
proper context messages for exception raised during the handling of
exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Corrected C++ memory leak for each closure variable taken, each time
a function object was created.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Raising exceptions with tracebacks already attached, wasn’t
using always them, but producing new ones instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some constants could cause errors, as they cannot be handled with the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;marshal&lt;/span&gt;&lt;/code&gt; module as expected, e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;(int,)&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Make sure to propagate &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.path&lt;/span&gt;&lt;/code&gt; to the Python
instance used to check for standard library import dependencies. This
is important for virtualenv environments, which need &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site.py&lt;/span&gt;&lt;/code&gt; to
set the path, which is not executed in that mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added support for different path layout there, so using
virtualenv should work there too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code object flag “optimized” (fast locals as opposed to locals
dictionary) for functions was set wrongly to value for the parent,
but for frames inside it, one with the correct value. This lead to
more code objects than necessary and false &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;co_flags&lt;/span&gt;&lt;/code&gt; values
attached to the function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Options passed to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-python&lt;/span&gt;&lt;/code&gt; could get lost.&lt;/p&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;nuitka-python&lt;span class="w"&gt; &lt;/span&gt;program.py&lt;span class="w"&gt; &lt;/span&gt;argument1&lt;span class="w"&gt; &lt;/span&gt;argument2&lt;span class="w"&gt; &lt;/span&gt;...
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The above is supposed to compile program.py, execute it immediately
and pass the arguments to it. But when Nuitka decides to restart
itself, it would forget these options. It does so to e.g. disable
hash randomization as it would affect code generation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Raising tuples exception as exceptions was not compatible (Python2)
or reference leaking (Python3).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Running &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; is now avoided for tests that are already running on
both Python2 and Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made XML based optimization tests work with Python3 too. Previously
these were only working on Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for ignoring messages that come from linking against
self compiled Pythons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test case for threaded generators that tortures the fiber layer
a bit and exposed issues on RHEL 5.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made reference count test of compiled functions generic. No more code
duplication, and automatic detection of shared stuff. Also a more
clear interface for disabling test cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Python2 specific reference counting tests, so the other cases
can be executed with Python3 directly, making debugging them less
tedious.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Really important removal of “variable references”. They didn’t solve
any problem anymore, but their complexity was not helpful either.
This allowed to make SSA usable finally, and removed a lot of code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed special code generation for parameter variables, and their
dedicated classes, no more needed, as every variable access code is
now optimized like this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stop using C++ class methods at all. Now only the destructor of local
variables is actually supposed to do anything, and their are no
methods anymore. The unused &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;var_name&lt;/span&gt;&lt;/code&gt; got removed,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setVariableValue&lt;/span&gt;&lt;/code&gt; is now done manually.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved assertions for the fiber layer to a common place in the header,
so they are executed on all platforms in debug mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As usual, also a bunch of cleanups for PyLint were applied.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals&lt;/span&gt;&lt;/code&gt; built-in code now uses code generation for accessing
local variable values instead having its own stuff.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The Python version 3.4 is now officially supported. There are a few
problems open, that will be addressed in future releases, none of
which will affect normal people though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Major cleanup of Nuitka options.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Windows specific stuff is now in a dedicated option group. This
includes options for icon, disabling console, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a dedicated group for controlling backend compiler
choices and options.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also pickup &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;g++44&lt;/span&gt;&lt;/code&gt; automatically, which makes using Nuitka on
CentOS5 more automatic.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release represents a very important step ahead. Using SSA for real
stuff will allow us to build the trust necessary to take the next steps.
Using the SSA information, we could start implementing more
optimizations.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-055.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2014-10-05T23:15:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-shaping-up.html</id>
    <title>Nuitka shaping up</title>
    <updated>2014-10-02T07:08:54+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-shaping-up"&gt;

&lt;p&gt;Not much has happened publicly to Nuitka, so it’s time to make a kind of
status post, about the exciting news there is.&lt;/p&gt;
&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#nuitka-shaping-up" id="id1"&gt;Nuitka shaping up&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#ssa-single-state-assignment-form" id="id2"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#improved-code-generation" id="id3"&gt;Improved Code Generation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#scalability" id="id4"&gt;Scalability&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#compatibility" id="id5"&gt;Compatibility&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python2-exec-statements" id="id6"&gt;Python2 exec statements&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python3-classes" id="id7"&gt;Python3 classes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#python3-4" id="id8"&gt;Python3.4&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#performance" id="id9"&gt;Performance&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#graphs-and-benchmarks" id="id10"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#incremental-assignments" id="id11"&gt;Incremental Assignments&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#standalone" id="id12"&gt;Standalone&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#other-stuff" id="id13"&gt;Other Stuff&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#funding" id="id14"&gt;Funding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#collaborators" id="id15"&gt;Collaborators&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#future" id="id16"&gt;Future&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="ssa-single-state-assignment-form"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;SSA (Single State Assignment Form)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For a long, long time already, each release of Nuitka has worked towards
enabling &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Static_single_assignment_form"&gt;“SSA”&lt;/a&gt; usage in
Nuitka. There is a component called “constraint collection”, which is
tasked with driving the optimization, and collecting variable traces.&lt;/p&gt;
&lt;p&gt;Based on these traces, optimizations could be made. Having SSA or not,
is (to me) the difference between Nuitka as a compiler, and Nuitka as an
optimizing compiler.&lt;/p&gt;
&lt;p&gt;The news is, SSA is shaping up, and will be used in the next release.
Not yet to drive variable based optimization (reserved for a release
after it), but to aid the code generation to avoid useless checks.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="improved-code-generation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Improved Code Generation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Previously, under the title “C-ish”, Nuitka moved away from C++ based
code generation to less C++ based code generated, and more C-ish code.
This trend continues, and has lead to removing even more code cleanups.&lt;/p&gt;
&lt;p&gt;The more important change is from the SSA derived knowledge. Now Nuitka
knows that a variable must be assigned, cannot be assigned, may be
assigned, based on its SSA traces.&lt;/p&gt;
&lt;p&gt;Lets check out an example:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nevermind, that &lt;em&gt;obviously&lt;/em&gt; the variable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt; can be removed, and this
could be transformed to statically return &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1&lt;/span&gt;&lt;/code&gt;. That is the next step
(and easy if SSA is working properly), now we are looking at what
changed now.&lt;/p&gt;
&lt;p&gt;This is code as generated now, with current 0.5.5pre5:&lt;/p&gt;
&lt;div class="highlight-c++ notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;tmp_assign_source_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;const_int_pos_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;var_a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;var_a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INCREASE_REFCOUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp_assign_source_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;tmp_return_value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;var_a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;Py_INCREF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp_return_value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;function_return_exit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There are some things, wrong with it still. For one, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;var_a&lt;/span&gt;&lt;/code&gt; is still
a C++ object, which we directly access. But the good thing is, we can
assert that it starts out uninitialized, before we overwrite it. The
stable release as of now, 0.5.4, generates code like this:&lt;/p&gt;
&lt;div class="highlight-c++ notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;tmp_assign_source_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;const_int_pos_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var_a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;var_a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INCREASE_REFCOUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp_assign_source_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PyObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;var_a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;var_a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INCREASE_REFCOUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp_assign_source_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Py_DECREF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PyFrameObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;cache_frame_function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;MAKE_OR_REUSE_FRAME&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cache_frame_function&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codeobj_4e03e5698a52dd694c5c263550d71551&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;module___main__&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;PyFrameObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;frame_function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cache_frame_function&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Push the new frame as the currently active one.&lt;/span&gt;
&lt;span class="n"&gt;pushFrameStack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frame_function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Mark the frame object as in use, ref count 1 will be up for reuse.&lt;/span&gt;
&lt;span class="n"&gt;Py_INCREF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frame_function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Py_REFCNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frame_function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Frame stack&lt;/span&gt;

&lt;span class="c1"&gt;// Framed code:&lt;/span&gt;
&lt;span class="n"&gt;tmp_return_value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;var_a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp_return_value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;exception_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INCREASE_REFCOUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PyExc_UnboundLocalError&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;exception_value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNSTREAM_STRING&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;constant_bin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;exception_tb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;frame_function&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_lineno&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frame_exception_exit_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;Py_INCREF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp_return_value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frame_return_exit_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;As you can see, the assignment to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;var_a.object&lt;/span&gt;&lt;/code&gt; was checking if it
were &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NULL&lt;/span&gt;&lt;/code&gt;, and if were not (which we now statically know), would
release the old value. Next up, before returning, the value of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;var_a.object&lt;/span&gt;&lt;/code&gt; needed to be checked, if it were &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NULL&lt;/span&gt;&lt;/code&gt;, in which
case, we would need to create a Python exception, and in order to do so,
we need to create a frame object, that even if cached, consumes time,
and code size.&lt;/p&gt;
&lt;p&gt;So, that is the major change to code generation. The SSA information is
now used in it, and doing so, has found a bunch of issues, in how it is
built, in e.g. nested branches, that kind of stuff.&lt;/p&gt;
&lt;p&gt;The removal of local variables as C++ classes, and them managed as
temporary variables, is going to happen in a future release, reducing
code complexity further. Were &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt; a temporary variable, already, the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_INCREF&lt;/span&gt;&lt;/code&gt; which implies a later &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_DECREF&lt;/span&gt;&lt;/code&gt; on the constant &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;1&lt;/span&gt;&lt;/code&gt;
could be totally avoided.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="scalability"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Scalability&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The scalability of Nuitka hinges much of generated code size. With it
being less stupid, the generated code is now not only faster, but
definitely smaller, and with more optimization, it will only become more
practical.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="compatibility"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Compatibility&lt;/a&gt;&lt;/h2&gt;
&lt;section id="python2-exec-statements"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Python2 exec statements&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A recent change in CPython 2.7.8+ which is supposed to become 2.7.9 one
day, highlighted an issue with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statements in Nuitka. These were
considered to be fully compatible, but apparently are not totally.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;exec&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
    &lt;span class="n"&gt;exec&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The above two are supposed to be identical. So far this was rectified at
run time of CPython, but apparently the parser is now tasked with it, so
Nuitka now sees &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt; &lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt; &lt;span class="pre"&gt;b,&lt;/span&gt; &lt;span class="pre"&gt;c&lt;/span&gt;&lt;/code&gt; for both lines. Which is good.&lt;/p&gt;
&lt;p&gt;However, as it stands, Nuitka handles &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals()&lt;/span&gt;&lt;/code&gt; the same
as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; for plain functions (OK to classes and modules),
which is totally a bug.&lt;/p&gt;
&lt;p&gt;I have been working on an enhanced re-formulation (it needs to be
tracked if the value was &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;, and then the sync back to locals from
the provided dictionary ought to be done. But the change breaks
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;execfile&lt;/span&gt;&lt;/code&gt; in classes, which was implemented piggy-backing on
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt;, and now requires locals to be a dictionary, and immediately
written to.&lt;/p&gt;
&lt;p&gt;Anyway, consider &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; as well working already. The non-working cases
are really corner cases, obviously nobody came across so far.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python3-classes"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Python3 classes&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Incidentally, that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;execfile&lt;/span&gt;&lt;/code&gt; issue will be solved as soon as a bug is
fixed, that was exposed by new abilities of Python3 metaclasses. They
were first observed in Python3.4 enum classes.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;MyEnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;red&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="n"&gt;blue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;red&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;  &lt;span class="c1"&gt;# error&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Currently, Nuitka is delaying the building of the dictionary (absent
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;execfile&lt;/span&gt;&lt;/code&gt; built-in), and that is not allowed, in fact, immediate
writes to the mapping giving by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__prepare__&lt;/span&gt;&lt;/code&gt; of the metaclass will be
required, in which case, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;enum&lt;/span&gt;&lt;/code&gt; class can raise an error for the
second assignment to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;red&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So that area now hinges on code generation to learn different local
variable codes for classes, centered around the notion of using the
locals dictionary immediately.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python3-4"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Python3.4&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The next release is no longer warning you if you use Python3.4, as many
of the remaining problems have been sorted out. Many small things were
found, and in some cases these highlighted general Python3 problems.&lt;/p&gt;
&lt;p&gt;Nuitka for Python3 is not yet all that much in the focus in terms of
performance, but correctness will have become much better, with most
prominently, exception context being now correct most often.&lt;/p&gt;
&lt;p&gt;The main focus of Nuitka is Python2, but to Nuitka the incompatibility
of Python3 is largely not all that much an issue. The re-formulations to
lower level operations for just about everything means that for the
largest part there is not much trouble in supporting a mostly only
slightly different version of Python.&lt;/p&gt;
&lt;p&gt;The gain is mostly in that new tests are added in new releases, and
these sometimes find things that affect Nuitka in all versions, or at
least some others. And this could be a mere reference leak.&lt;/p&gt;
&lt;p&gt;Consider this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ne"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So, that is working with Python2, but comes from a Python3 test. Python2
is supposed to unwrap the tuple and take the first argument and raise
that. It didn’t do that so far. Granted, obscure feature, but still an
incompatibility. For Python3, a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TypeError&lt;/span&gt;&lt;/code&gt; should be raised
complaining that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt; is not derived from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;BaseException&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Turned out, that also, in that case, a reference leak occurs, in that
the wrong exception was not released, and therefore memory leaked.
Should that happen a lot during a programs live, it will potentially
become an issue, as it keeps frames on the traceback also alive.&lt;/p&gt;
&lt;p&gt;So this lead to a compatibility fix and a reference leak fix. And it was
found by the Python3.4 suite, checking that exception objects are
properly released, and that the proper kind of exception is raised in
the no longer supported case.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="performance"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Performance&lt;/a&gt;&lt;/h2&gt;
&lt;section id="graphs-and-benchmarks"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Graphs and Benchmarks&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I had been working on automated performance graphs, and they are
supposed to show up on &lt;a class="reference external" href="https://speedcenter.nuitka.net"&gt;Nuitka Speedcenter&lt;/a&gt; already, but currently it’s broken
and outdated.&lt;/p&gt;
&lt;p&gt;Sad state of affairs. Reasons include that I found it too ugly to
publish unless updated to latest Nikola, for which I didn’t take the
time. I intend to fix it, potentially before the release though.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="incremental-assignments"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Incremental Assignments&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Consider the following code:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;bbb&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt; is a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;, and if (and only if), it’s the only reference
being held, then CPython, reuses the object, instead of creating a new
object and copying &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt; over. Well, Nuitka doesn’t do this. This is
despite the problem being known for quite some time.&lt;/p&gt;
&lt;p&gt;With SSA in place, and “C-ish” code generation complete, this will be
solved, but I am not going to solve this before.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="standalone"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;Standalone&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The standalone mode of Nuitka is pretty good, and in the pre-release it
was again improved. For instance, virtualenv and standalone should work
now, and more modules are supported.&lt;/p&gt;
&lt;p&gt;However, there are known issues with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;win32com&lt;/span&gt;&lt;/code&gt; and a few other
packages, which need to be debugged. Mostly these are modules doing
nasty things that make Nuitka not automatically detect imports.&lt;/p&gt;
&lt;p&gt;This has as usual only so much priority from me. I am working on this on
some occasions, as kind of interesting puzzles to solve. Most of the
time, it just works though, with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wxpython&lt;/span&gt;&lt;/code&gt; being the most notable
exception. I am going to work on that though.&lt;/p&gt;
&lt;p&gt;The standalone compilation exhibits scalability problems of Nuitka the
most, and while it has been getting better, the recent and future
improvements will lead to smaller code, which in turn means not only
smaller executables, but also faster compilation. Again, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wxpython&lt;/span&gt;&lt;/code&gt; is
a major offender there, due to its many constants, global variables,
etc. in the bindings, while Qt, PySide, and GTK are apparently already
good.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="other-stuff"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Other Stuff&lt;/a&gt;&lt;/h2&gt;
&lt;section id="funding"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Funding&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nuitka doesn’t receive enough &lt;a class="reference external" href="/pages/donations.html"&gt;donations&lt;/a&gt;.
There is no support from organizations like e.g. the PSF, which recently
backed several projects by doubling donations given to them.&lt;/p&gt;
&lt;p&gt;I remember talking to a PSF board member during Europython 2013 about
this, and the reaction was fully in line with the Europython 2012
feedback towards me from the dictator. They wouldn’t help Nuitka in any
way before it is successful.&lt;/p&gt;
&lt;p&gt;I have never officially applied for help with funding though with them.
I am going to choose to take pride in that, I suppose.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="collaborators"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Collaborators&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;My quest to find collaborators to Nuitka is largely failing. Aside from
the standalone mode, there have been too little contributions. Hope is
that it will change in the future, once the significant speed gains
arrive. And it might be my fault for not asking for help more, and to
arrange myself with that state of things.&lt;/p&gt;
&lt;p&gt;Not being endorsed by the Python establishment is clearly limiting the
visibility of the project.&lt;/p&gt;
&lt;p&gt;Anyway, things are coming along nicely. When I started out, I was fully
aware that the project is something that I can do on my own if
necessary, and that has not changed. Things are going slower than
necessary though, but that’s probably very typical.&lt;/p&gt;
&lt;p&gt;But you can join now, just &lt;a class="reference external" href="/doc/user-manual.html#join-nuitka"&gt;follow this link&lt;/a&gt; or become part of the mailing list
(since closed) and help me there with request I make, e.g. review posts
of mine, test out things, pick up small jobs, answer questions of
newcomers, you know the drill probably.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="future"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id16" role="doc-backlink"&gt;Future&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, there is multiple things going on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;More “C-ish” code generation&lt;/p&gt;
&lt;p&gt;The next release is going to be more “C-ish” than before, generating
less complex code than before, and removes the previous
optimizations, which were a lot of code, to e.g. detect parameter
variables without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; statements.&lt;/p&gt;
&lt;p&gt;This prong of action will have to continue, as it unblocks further
changes that lead to more compatibility and correctness.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More SSA usage&lt;/p&gt;
&lt;p&gt;The next release did and will find bugs in the SSA tracing of Nuitka.
It is on purpose only using it, to add &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assert&lt;/span&gt;&lt;/code&gt; statements to
things it now no longer does. These will trigger in tests or cause
crashes, which then can be fixed.&lt;/p&gt;
&lt;p&gt;We better know that SSA is flawless in its tracking, before we use it
to make optimizations, which then have no chance to assert anything
at all anymore.&lt;/p&gt;
&lt;p&gt;Once we take it to that next level, Nuitka will be able to speed up
some things by more than the factor it basically has provided for 2
years now, and it’s probably going to happen this year.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More compatibility&lt;/p&gt;
&lt;p&gt;The new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; code makes the dictionary synchronization explicit,
and e.g. now it is optimized away to even check for its need, if we
are in a module or a class, or if it can be known.&lt;/p&gt;
&lt;p&gt;That means faster &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt;, but more importantly, a better understood
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt;, with improved ability to do &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SSA&lt;/span&gt;&lt;/code&gt; traces for them. Being
able to in-line them, or to know the limit of their impact, as it
will help to know more invariants for that code.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When these 3 things come to term, Nuitka will be a huge, huge step ahead
towards being truly a static optimizing compiler (so far it is mostly
only peep hole optimization, and byte code avoidance). I still think of
this as happening this year.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-shaping-up.html"/>
    <summary>Not much has happened publicly to Nuitka, so it’s time to make a kind of
status post, about the exciting news there is.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2014-10-02T07:08:54+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-054.html</id>
    <title>Nuitka Release 0.5.4</title>
    <updated>2014-08-11T10:29:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-4"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is aiming at preparatory changes to enable optimization
based on SSA analysis, introducing a variable registry, so that
variables no longer trace their references to themselves.&lt;/p&gt;
&lt;p&gt;Otherwise, MinGW64 support has been added, and lots of bug fixes were
made to improve the compatibility.&lt;/p&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Using new variable registry, now properly detecting actual need for
sharing variables. Optimization may discover that it is unnecessary
to share a variable, and then it no longer is. This also allows
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; without it reporting unused variable warnings on Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scons startup has been accelerated, removing scans for unused tools,
and avoiding making more than one gcc version check.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Compatibility: In case of unknown encodings, Nuitka was not giving
the name of the problematic encoding in the error message. Fixed in
0.5.3.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Submodules with the same name as built-in modules were wrongly
shadowed. Fixed in 0.5.3.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Added implementations of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is_package&lt;/span&gt;&lt;/code&gt; to the meta path
based loader.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;find_spec&lt;/span&gt;&lt;/code&gt; implementation to the meta path based
loader for increased compatibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Corrections for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; to work with Python3 and MSVC
compiler more often.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed crash with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-scons&lt;/span&gt;&lt;/code&gt; when no compiler was found. Fixed
in 0.5.3.5 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Need to blacklist &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lib2to3&lt;/span&gt;&lt;/code&gt; from standard library as
well. Fixed in 0.5.3.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Adapted to changes in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; on newer Python
releases, there is now a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;msg&lt;/span&gt;&lt;/code&gt; that can override &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;reason&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone Windows: Preserve &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.executable&lt;/span&gt;&lt;/code&gt; as it might be used
to fork binaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The caching of Scons was not arch specific, and files could
be used again, even if changing the arch from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x86&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x86_64&lt;/span&gt;&lt;/code&gt;
or back.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: On 32 bit Python it can happen that with large number of
generators running concurrently (&amp;gt;1500), one cannot be started
anymore. Raising an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MemoryError&lt;/span&gt;&lt;/code&gt; now.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for MinGW64. Currently needs to be run with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt;
environment properly set up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated internal version of Scons to 2.3.2, which breaks support for
VS 2008, but adds support for VS 2013 and VS 2012. The VS 2013 is now
the recommended compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added RPM package and repository for RHEL 7.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The output of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-scons&lt;/span&gt;&lt;/code&gt; now includes the used compiler,
including the MSVC version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--msvc&lt;/span&gt;&lt;/code&gt; to select the MSVC compiler version to use,
which overrides automatic selection of the latest.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-python-flag=no_warnings&lt;/span&gt;&lt;/code&gt; to disable user and
deprecation warnings at run time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repository for Ubuntu Raring was removed, no more supported by
Ubuntu.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Made technical and logical sharing decisions separate functions and
implement them in a dedicated variable registry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Scons file has seen a major cleanup.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is mostly a maintenance release. The Scons integrations has
been heavily visited, as has been Python3 and esp. Python3.4
compatibility, and results from the now possible debug test runs.&lt;/p&gt;
&lt;p&gt;Standalone should be even more practical now, and MinGW64 is an option
for those cases, where MSVC is too slow.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-054.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2014-08-11T10:29:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-053.html</id>
    <title>Nuitka Release 0.5.3</title>
    <updated>2014-07-07T23:25:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-3"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is mostly a follow up, resolving points that have become
possible to resolve after completing the C-ish evolution of Nuitka. So
this is more of a service release.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Improved mode &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--improved&lt;/span&gt;&lt;/code&gt; now sets error lines more properly than
CPython does in many cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-python-flag=-S&lt;/span&gt;&lt;/code&gt; mode now preserves &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt; and
therefore became usable with virtualenv.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Line numbers of frames no longer get set unless an exception occurs,
speeding up the normal path of execution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For standalone mode, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag-S&lt;/span&gt;&lt;/code&gt; is now always possible
and yields less module usage, resulting in smaller binaries and
faster compilation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Corrected an issue for frames being optimized away where in fact they
are still necessary. Fixed in 0.5.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed handling of exception tests as side effects. These could be
remainders of optimization, but didn’t have code generation. Fixed in
0.5.2.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Previously Nuitka only ever used the statement line as the line
number for all the expression, even if it spawned multiple lines.
Usually nothing important, and often even more correct, but sometimes
not. Now the line number is most often the same as CPython in full
compatibility mode, or better, see above.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.4: Standalone mode for Windows is working now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Undo changes to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONHOME&lt;/span&gt;&lt;/code&gt; allowing
potentially forked CPython programs to run properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Fixed import error when using PyQt and Python3.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;For our testing approach, the improved line number handling means we
can undo lots of changes that are no more necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The compile library test has been extended to cover a third potential
location where modules may live, covering the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;matplotlib&lt;/span&gt;&lt;/code&gt; module
as a result.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In Python2, the list contractions used to be re-formulated to be
function calls that have no frame stack entry of their own right.
This required some special handling, in e.g. closure taking, and
determining variable sharing across functions.&lt;/p&gt;
&lt;p&gt;This now got cleaned up to be properly in-lined in a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; expression.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The line number handling got simplified by pushing it into error
exits only, removing the need to micro manage a line number stack
which got removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;intptr_t&lt;/span&gt;&lt;/code&gt; over &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unsigned&lt;/span&gt; &lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; to store fiber code pointers,
increasing portability.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Providing own Debian/Ubuntu repositories for all relevant
distributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows MSI files for Python 3.4 were added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hosting of the web site was moved to metal server with more RAM and
performance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release brings about structural simplification that is both a
follow-up to C-ish, as well as results from a failed attempt to remove
static “variable references” and be fully SSA based. It incorporates
changes aimed at making this next step in Nuitka evolution smaller.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-053.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2014-07-07T23:25:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-052.html</id>
    <title>Nuitka Release 0.5.2</title>
    <updated>2014-06-23T08:49:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-2"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a major release, with huge changes to code generation that
improve performance in a significant way. It is a the result of a long
development period, and therefore contains a huge jump ahead.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added experimental support for Python 3.4, which is still work in
progress.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for virtualenv on macOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for virtualenv on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for macOS X standalone mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code generation uses no header files anymore, therefore adding a
module doesn’t invalidate all compiled object files from caches
anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Constants code creation is now distributed, and constants referenced
in a module are declared locally. This means that changing a module
doesn’t affect the validity of other modules object files from caches
anymore.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;C-ish code generation uses less C++ classes and generates more C-like
code. Explicit temporary objects are now used for statement temporary
variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The constants creation code is no more in a single file, but
distributed across all modules, with only shared values created in a
single file. This means improved scalability. There are remaining bad
modules, but more often, standalone mode is now fast.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception handling no longer uses C++ exception, therefore has become
much faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Loops that only break are eliminated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dead code after loops that do not break is now removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt; constructs are now
eliminated, where that is possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; part of the re-formulation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt;
statements is now only done when printing to a file, avoiding useless
node tree bloat.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tuples and lists are now generated with faster code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Locals and global variables are now access with more direct code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for the anonymous &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;code&lt;/span&gt;&lt;/code&gt; type built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compile&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generators that statically return immediately, e.g. due to
optimization results, are no longer using frame objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The complex call helpers use no pseudo frames anymore. Previous code
generation required to have them, but with C-ish code generation that
is no more necessary, speeding up those kind of calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modules with only code that cannot raise, need not have a frame
created for them. This avoids useless code size bloat because of
them. Previously the frame stack entry was mandatory.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Windows: The resource files were cached by Scons and re-used, even if
the input changed. The could lead to corrupted incremental builds.
Fixed in 0.5.1.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: For functions with too many local variables, the MSVC failed
with an error “C1026: parser stack overflow, program too complex”.
The rewritten code generation doesn’t burden the compiler as much.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The timing deletion of nested call arguments was
different from C++. This shortcoming has been addressed in the
rewritten code generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__future__&lt;/span&gt;&lt;/code&gt; flags and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CO_FREECELL&lt;/span&gt;&lt;/code&gt; were not
present in frame flags. These were then not always properly inherited
to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eval&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; in all cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Compiled frames for Python3 had &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f_restricted&lt;/span&gt;&lt;/code&gt;
attribute, which is Python2 only. Removed it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; of having a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; in a
finally clause is now properly raised.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statement with no locals argument provided, was
preventing list contractions to take closure variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Having the ASCII encoding declared in a module wasn’t
working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Included the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;idna&lt;/span&gt;&lt;/code&gt; encoding as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: For virtualenv, the file &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;orig-prefix.txt&lt;/span&gt;&lt;/code&gt; needs to be
present, now it’s copied into the “dist” directory as well. Fixed in
0.5.1.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Handle cases, where Python and user program are installed on
different volumes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Can now finally use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;execfile&lt;/span&gt;&lt;/code&gt; as an expression. One
of our oldest issues, no 5, is finally fixed after all this time
thanks to C-ish code generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: The order or call arguments deletion is now finally
compatible. This too is thanks to C-ish code generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Code object flags are now more compatible for Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone: Removing “rpath” settings of shared libraries and
extension modules included. This makes standalone binaries more
robust on Fedora 20.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Wasn’t falsely rejecting &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; strings as values for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; variants with base argument provided.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: For Python3.2 and 64 bits, global variable accesses could
give false &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NameError&lt;/span&gt;&lt;/code&gt; exceptions. Fixed in 0.5.1.6 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Many &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eval&lt;/span&gt;&lt;/code&gt; details have become more
correctly, the argument handling is more compatible, and e.g. future
flags are now passed along properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility: Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;open&lt;/span&gt;&lt;/code&gt; with no arguments is now giving the
same error.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Replying to email from the issue tracker works now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option name alias &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--xml&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--dump-xml&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option name alias &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-dbg&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-debug&lt;/span&gt;&lt;/code&gt;,
which actually might make it a bit more clear that it is about using
the CPython debug run time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--dump-tree&lt;/span&gt;&lt;/code&gt;, it had been broken for a long time and
unused in favor of XML dumps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New digital art folder with 3D version of Nuitka logo. Thanks to Juan
Carlos for creating it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using “README.rst” instead of “README.txt” to make it look better on
web pages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More complete whitelisting of missing imports in standard library.
These should give no warnings anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updated the Nuitka GUI to the latest version, with enhanced features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The builds of releases and update of the &lt;a class="reference external" href="https://nuitka.net/doc/download.html"&gt;downloads page&lt;/a&gt; is now driven by Buildbot.
Page will be automatically updated as updated binaries arrive.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Temporary keeper variables and the nodes to handle them are now
unified with normal temporary variables, greatly simplifying variable
handling on that level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Less code is coming from templates, more is actually derived from the
node tree instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Releasing the references to temporary variables is now always
explicit in the node tree.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The publishing and preservation of exceptions in frames was turned
into explicit nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception handling is now done with a single handle that checks with
branches on the exception. This eliminates exception handler nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dir&lt;/span&gt;&lt;/code&gt; built-in with no arguments is now re-formulated to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;globals&lt;/span&gt;&lt;/code&gt; with their &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.keys()&lt;/span&gt;&lt;/code&gt; attribute taken.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dramatic amounts of cleanups to code generation specialities, that
got done right for the new C-ish code generation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Warnings from MSVC are now error exits for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; mode too,
expanding the coverage of these tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The outputs with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python-dbg&lt;/span&gt;&lt;/code&gt; can now also be compared, allowing to
expand test coverage for reference counts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many of the basic tests are now executable with Python3 directly.
This allows for easier debug.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The library compilation test is now also executed with Python3.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release would deserve more than a minor number increase. The C-ish
code generation, is a huge body of work. In many ways, it lays ground to
taking benefit of SSA results, that previously would not have been
possible. In other ways, it’s incomplete in not yet taking full
advantage yet.&lt;/p&gt;
&lt;p&gt;The release contains so many improvements, that are not yet fully
realized, but as a compiler, it also reflects a stable and improved
state.&lt;/p&gt;
&lt;p&gt;The important changes are about making SSA even more viable. Many of the
problematic cases, e.g. exception handlers, have been stream lined. A
whole class of variables, temporary keepers, has been eliminated. This
is big news in this domain.&lt;/p&gt;
&lt;p&gt;For the standalone users, there are lots of refinements. There is esp. a
lot of work to create code that doesn’t show scalability issues. While
some remain, the most important problems have been dealt with. Others
are still in the pipeline.&lt;/p&gt;
&lt;p&gt;More work will be needed to take full advantage. This has been explained
in a &lt;a class="reference external" href="https://nuitka.net/posts/state-of-nuitka.html"&gt;separate post&lt;/a&gt;
in greater detail.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-052.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2014-06-23T08:49:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/state-of-nuitka.html</id>
    <title>State of Nuitka</title>
    <updated>2014-06-17T05:35:48+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="state-of-nuitka"&gt;

&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#state-of-nuitka" id="id1"&gt;State of Nuitka&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#c-ish-vs-c-ish" id="id2"&gt;C-ish vs. C++-ish&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#rewriting-code-generation" id="id3"&gt;Rewriting Code Generation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#current-situation" id="id4"&gt;Current Situation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#open-points" id="id5"&gt;Open Points&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#other-things" id="id6"&gt;Other Things&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#call-for-help" id="id7"&gt;Call for Help&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#final-words" id="id8"&gt;Final Words&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;p&gt;For quite some time, publicly, very little has happened with my Python
compiler Nuitka. But that doesn’t mean, there hasn’t been progress. In
fact it is tremendous. I would like to have a post that kind of
summarizes, what happened.&lt;/p&gt;
&lt;p&gt;The last release, 0.5.1 was more of a maintenance release than making
real changes. It turns out, that the bigger changes got delayed by a
feature that I have described as “C-ish”. Let me outline, what this
means.&lt;/p&gt;
&lt;section id="c-ish-vs-c-ish"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;C-ish vs. C++-ish&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When I started working on Nuitka, the big question was if it is possible
to create a sufficiently compatible compiler. The use of C++11 then,
together with some templates made it easy to cover a wide, wide part of
the language, and to fully integrate with CPython for compatibility.&lt;/p&gt;
&lt;p&gt;The main goal was to get it going to work correctly. As time went on,
execution order demanded to do away with variadic templates, raw strings
were not all that perfect at all, and so C++-03 was good enough at one
point.&lt;/p&gt;
&lt;p&gt;And then, as Nuitka became less and less template based, and shoving
more things into the node tree, and re-formulations, making this where
the knowledge resided. It became more and more obvious that C++ has two
problems. One in the way I used it. One inherent in the language typical
implementations:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;C++ exceptions are god damn slow&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Everything should be a in a single statement.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The later was my choice. Initially it made it easy to pass on references
and put the releasing C++ class around every expression as necessary.
Identifier classes were allowing for code generation to avoid taking
references where necessary, and it was not all that bad. Yet limiting.&lt;/p&gt;
&lt;p&gt;This led to a couple of issues.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The order of call arguments release for e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f(g(h()))&lt;/span&gt;&lt;/code&gt; was not
completely compatible, with the way how CPython does it. C++
destructors for objects living in a single statement didn’t give
sufficient control, and make the order and timing of finalization not
compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The generated C++ code complexity became large. The compilation of
the generated C++ in some cases was huge. To the point, that e.g.
“code too complex” was giving by compilers like MSVC for some
modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cases of in-place assignments were discovered, where CPython
outperforms Nuitka by a large margin. But these don’t fit into that
style of code generation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, at some point, the pain had built up. Code generation was already
lighter than in the beginning. For example, initially &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt;
statements had dedicated code templates to them. This, and many other
things, are long gone.&lt;/p&gt;
&lt;p&gt;I took a deep dive, and &lt;strong&gt;rewrote&lt;/strong&gt; the whole code generation, to be
much more “C-ish” than “C++-ish”. A huge undertaking that would take
months.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Where previously, code didn’t have to handle return error codes (a
C++ exception was thrown), now everything needed a return value name,
and error check.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Where classes were previously conviently made sure things happened at
function or scope exit, manual handling needed to be added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The handling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; was
previously done with exceptions being thrown, if they were to pass a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; handler. Now these are done with stacks of exit
handlers, where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;goto&lt;/span&gt;&lt;/code&gt; statements are used to produce the correct
behaviour.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="rewriting-code-generation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Rewriting Code Generation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Redoing code generation, over months, while ultimately, slowly, arriving
at a point where Nuitka would be doing this, it already did before, was
kind of frustrating.&lt;/p&gt;
&lt;p&gt;Of course, the performance benefit would be there, but it would not be
all that much, except for exception raising and handling. There it would
be huge. Ultimately for PyStone, a couple of extra percents were gained.&lt;/p&gt;
&lt;p&gt;This really was a point, where I felt, that Nuitka will make it or
break. And for a long time, I honestly wasn’t so sure, that I pull
through. But I did.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="current-situation"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Current Situation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The current pre-release is release quality. You should try it out, it’s
great.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There are many changes to Standalone mode. Due to changes in how
constants are now created in the modules that uses them, instead of
everything globally, the parallel compilation now works great. What
previously took an hour with MSVC (the problem child, gcc was always
relatively good), now takes minutes only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The support for virtualenv’s of all kinds seems to work on Windows,
Linux, and macOS, which all seem to have different kinds of codes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The support for macOS is now there. Thanks to a virtual server month
donated to Jarrad Hope, I was able to iron issues out.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The final release will also work with standalone binaries created on
Fedora 20 which got hard code rpaths removed on the factory git
branch.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And yet, I am not yet releasing. In fact, I would like to ask you to
give it a roll, and integrate test feedback.&lt;/p&gt;
&lt;p&gt;Although more tests than ever are executed and pass, (e.g. the Mercurial
test suite is now run each time I make a commit, and fully identically
passes or fails the test suite with the current Mercurial code), there
can never be enough.&lt;/p&gt;
&lt;p&gt;The changes I made are the most intense ever, and definitely have
potential for regressions. I am used to providing very high quality
releases.&lt;/p&gt;
&lt;p&gt;Also, I am working on the Buildbot instances to automate the production
of &lt;a class="reference external" href="https://speedcenter.nuitka.net"&gt;performance graphs&lt;/a&gt;, which get
updated fully automatically. I am working on updating the downloads page
automatically for each release that gets made.&lt;/p&gt;
&lt;p&gt;And generally, I am trying to improve my work flow, to make it easier to
push out releases with less effort. Buildbot should drive the release
process more completely. I am using the git flow to provide hot-fixes,
and this should be even less painful in the future.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="open-points"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Open Points&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With this release, presenting great progress, many things remain in an
unfinished state.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The support for Python3.4 is not complete. Most things work, but some
need more work. Specifically the changes to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__class__&lt;/span&gt;&lt;/code&gt; variable
closure taking, need another major refactoring, this time on variable
handling.&lt;/p&gt;
&lt;p&gt;Currently there are variables, closure variables, temp variables, and
then temp variable references. The way they work is different. One
way they work different, prevents a temp variable closure reference
to carry a name, in that case &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-_class__&lt;/span&gt;&lt;/code&gt;, which would be needed
for Python3.4, where that is suddenly necessary.&lt;/p&gt;
&lt;p&gt;With this done, the SSA code will be even easier to write, as temp
variables and named variables will finally be fully unified.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of C++ classes is largely reduced now. But a few still
remain, namely for local variables, closure variables, and temp
variables that are explicit variables. They still use C++ classes,
although changing that seems quite possible now, because at least for
temporary variables, the class doesn’t do anything in terms of code
anymore.&lt;/p&gt;
&lt;p&gt;Removing these classes may well gain more performance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now that code generation can more easily make a difference, and SSA
apparently is becoming reliable, it could be used to &lt;em&gt;know&lt;/em&gt; that
values must be value and to optimize checks away.&lt;/p&gt;
&lt;p&gt;Currently every variable access checks for “NULL”, when it’s part of
an assign trace. Some optimizations exist for parameter variables
without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; on them, that do not use SSA.&lt;/p&gt;
&lt;p&gt;This could be expanded and made general, allowing for much less code
to be generated (specifically avoiding error code, and release code
for variables that cannot give an error).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The SSA has been found unreliable in some instances, due to bugs that
I believe I found. We could attempt and forward propagate variable
assignments to where they are used, eliminating variables, etc.&lt;/p&gt;
&lt;p&gt;This is a place, where a lot of performance can be gained. We really
want to be there. And “C-ish” now makes this ever more attractive,
despite the large delay in time it has caused.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The in-place assignment code for strings, where CPython can be way
faster than current Nuitka, it bears a risk of getting it wrong. It
is therefore pushed to a future release.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="other-things"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Other Things&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For the website, I am relocating the virtual machine to a dedicated
server rented for an increased price. This will allow to add a few more
dynamic features, as the virtual machine was always too limited in RAM.
It’s more expensive, but I feel a better investment of my time.&lt;/p&gt;
&lt;p&gt;As mentioned before, I am not going to conferences this year. Enjoy
Europython, and consider having a Lightning talk about Nuitka. I will be
there next year again.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="call-for-help"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Call for Help&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Please test the latest release of Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Please consider &lt;a class="reference external" href="/pages/donations.html"&gt;making a donation&lt;/a&gt; to
support my work on Nuitka. I have continuous monthly costs of it, so
it would be sweet if it’s with all my time spent working on it, at
least not a financial cost to me.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Please join the mailing list (since closed), and offer your help with
tasks. Nuitka can seriously take more people developing, testing,
reviewing, and quality checking it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="final-words"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;Final Words&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, there is this “C-ish” release 0.5.2 cooking. You are invited to
help. Big, improvements are coming to Nuitka. Even after this next huge
release, very important work is still open, but hope is to have this
complete over the summer.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/state-of-nuitka.html"/>
    <summary>State of Nuitka</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2014-06-17T05:35:48+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-051.html</id>
    <title>Nuitka Release 0.5.1</title>
    <updated>2014-03-08T04:21:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-1"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release brings corrections and major improvements to how standalone
mode performs. Much of it was contributed via patches and bug reports.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There was a crash when using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;next&lt;/span&gt;&lt;/code&gt; on a non-iterable. Fixed in
0.5.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module names with special characters not allowed in C identifiers
were not fully supported. Fixed in 0.5.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name mangling for classes with leading underscores was not removing
them from resulting attribute names. This broke at &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__slots__&lt;/span&gt;&lt;/code&gt; with
private attributes for such classes. Fixed in 0.5.0.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone on Windows might need “cp430” encoding. Fixed in 0.5.0.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone mode didn’t work with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lxml.etree&lt;/span&gt;&lt;/code&gt; due to lack of hard
coded dependencies. When a shared library imports things, Nuitka
cannot detect it easily.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wasn’t working on macOS 64 bits due to using Linux 64 bits specific
code. Fixed in 0.5.0.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On MinGW the constants blob was not properly linked on some
installations, this is now done differently (see below).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Memory usages are now traced with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--show-progress&lt;/span&gt;&lt;/code&gt; allowing us to
trace where things go wrong.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Standalone mode now includes standard library as bytecode by default.
This is workaround scalability issues with many constants from many
modules. Future releases are going to undo it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On Windows the constants blob is now stored as a resource, avoiding
compilation via C code for MSVC as well. MinGW was changed to use the
same code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Expanded test coverage for “standalone mode” demonstrating usage of
“hex” encoding, PySide, and PyGtk packages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is mostly an interim maintenance release for standalone.
Major changes that provide optimization beyond that, termed “C-ish code
generation” are delayed for future releases.&lt;/p&gt;
&lt;p&gt;This release makes standalone practical which is an important point.
Instead of hour long compilation, even for small programs, we are down
to less than a minute.&lt;/p&gt;
&lt;p&gt;The solution of the scalability issues with many constants from many
modules will be top priority going forward. Since they are about how
even single use constants are created all in one place, this will be
easy, but as large changes are happening in “C-ish code generation”, we
are waiting for these to complete.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-051.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2014-03-08T04:21:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-050.html</id>
    <title>Nuitka Release 0.5.0</title>
    <updated>2014-01-04T10:05:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-5-0"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release breaks interface compatibility, therefore the major version
number change. Also “standalone mode” has seen significant improvements
on both Windows, and Linux. Should work much better now.&lt;/p&gt;
&lt;p&gt;But consider that this part of Nuitka is still in its infancy. As it is
not the top priority of mine for Nuitka, which primarily is intended as
an super compatible accelerator of Python, it will continue to evolve
nearby.&lt;/p&gt;
&lt;p&gt;There is also many new optimization based on structural improvements in
the direction of actual SSA.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The “standalone mode” was not working on all Redhat, Fedora, and
openSUSE platforms and gave warnings with older compilers. Fixed in
0.4.7.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “standalone mode” was not including all useful encodings. Fixed
in 0.4.7.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “standalone mode” was defaulting to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-S&lt;/span&gt;&lt;/code&gt; which
disables the parsing of “site” module. That unfortunately made it
necessary to reach some modules without modifying &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt;
which conflicts with the “out-of-the-box” experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “standalone mode” is now handling packages properly and generally
working on Windows as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The syntax error of having an all catching except clause and then a
more specific one wasn’t causing a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; with Nuitka.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;somehandling&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;notallowed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A corruption bug was identified, when re-raising exceptions, the top
entry of the traceback was modified after usage. Depending on
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;malloc&lt;/span&gt;&lt;/code&gt; this was potentially causing an endless loop when using it
for output.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Windows: The “standalone” mode now properly detects used DLLs using
&lt;a class="reference external" href="http://www.dependencywalker.com/"&gt;Dependency Walker&lt;/a&gt; which it
offers to download and extra for you.&lt;/p&gt;
&lt;p&gt;It is used as a replacement to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ldd&lt;/span&gt;&lt;/code&gt; on Linux when building the
binary, and as a replacement of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;strace&lt;/span&gt;&lt;/code&gt; on Linux when running the
tests to check that nothing is loaded from the outside.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When iterating over &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt;, this is now automatically
lowered to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuples&lt;/span&gt;&lt;/code&gt; avoiding the mutable container types.&lt;/p&gt;
&lt;p&gt;So the following code is now equivalent:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="c1"&gt;# same as&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For constants, this is even more effective, because for mutable
constants, no more is it necessary to make a copy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: The iteration of large &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt; is now automatically
lowered to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; which is faster to loop over, and more memory
efficient.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xrange&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The statement only expression optimization got generalized and now is
capable of removing useless parts of operations, not only the whole
thing when it has not side effects.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# same as&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This works for all container types.&lt;/p&gt;
&lt;p&gt;Another example is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; built-in operation with single argument.
When the result is not used, it need not be called.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# same as&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And another example &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt; have no effect of their own
as well, therefore:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;

&lt;span class="c1"&gt;# same as&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added proper handling of conditional expression branches in SSA based
optimization. So far these branches were ignored, which only
acceptable for temporary variables as created by tree building, but
not other variable types. This is preparatory for introducing SSA for
local variables.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--exe&lt;/span&gt;&lt;/code&gt; is now ignored and creating an executable is the
default behavior of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt;, a new option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--module&lt;/span&gt;&lt;/code&gt; allows to
produce extension modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The binary &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-python&lt;/span&gt;&lt;/code&gt; was removed, and is replaced by
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-run&lt;/span&gt;&lt;/code&gt; with now only implies &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--execute&lt;/span&gt;&lt;/code&gt; on top of what
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using dedicated &lt;a class="reference external" href="http://buildbot.net"&gt;Buildbot&lt;/a&gt; for continuous
integration testing and release creation as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;a class="reference external" href="https://nuitka.net/doc/download.html"&gt;Downloads&lt;/a&gt; now offers
MSI files for Win64 as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Discontinued the support for cross compilation to Win32. That was too
limited and the design choice is to have a running CPython instance
of matching architecture at Nuitka compile time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Expanded test coverage for “standalone mode” demonstrating usage of
“hex” encoding, and PySide package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The “executable by default” interface change improves on the already
high ease of use. The new optimization do not give all that much in
terms of numbers, but are all signs of structural improvements, and it
is steadily approaching the point, where the really interesting stuff
will happen.&lt;/p&gt;
&lt;p&gt;The progress for standalone mode is of course significant. It is still
not quite there yet, but it is making quick progress now. This will
attract a lot of attention hopefully.&lt;/p&gt;
&lt;p&gt;As for optimization, the focus for it has shifted to making exception
handlers work optimal by default (publish the exception to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exc_info()&lt;/span&gt;&lt;/code&gt; and create traceback only when necessary) and be
based on standard branches. Removing special handling of exception
handlers, will be the next big step. This release includes some
correctness fixes stemming from that work already.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-050.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2014-01-04T10:05:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-standalone-mode-is-work-in-progress.html</id>
    <title>Nuitka Standalone Mode is Work in Progress</title>
    <updated>2013-12-27T10:48:22+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-standalone-mode-is-work-in-progress"&gt;

&lt;p&gt;Many of you who turn to my easy to use, highly compatible Python
compiler &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;, do this mostly because they
seek to solve the deployment problem that Python suffers from.&lt;/p&gt;
&lt;p&gt;Be this, because you want to use a newer Python2.7 on RHEL5 without
installing anything at all there. Or because Windows is difficult to
tackle otherwise.&lt;/p&gt;
&lt;p&gt;For the longest time, Nuitka had not offered anything in this domain,
focusing solely on being an accelerator. Lately, I have taken up the
challenge and polished initial solutions submitted by contributors.&lt;/p&gt;
&lt;p&gt;This first showed up in the 0.4.7 release, but turned out relatively
weak. While first examples were working on Linux, it was not working at
all on Windows (anymore). And basically there was a huge lack of tests.&lt;/p&gt;
&lt;p&gt;Actually I didn’t mean for it to be released with that feature, but as
parts of it seemed to work, I did so. But truth to be sad, that feature
is not nearly as polished in that release as you would like it to.&lt;/p&gt;
&lt;p&gt;In current &lt;a class="reference external" href="/doc/download.html"&gt;development releases&lt;/a&gt;, of what is
going to become 0.5.0 really soon now, it’s much better already. More
things actually work. But it appears, there will be more ground to
cover, and this is a lot of stuff to sort out.&lt;/p&gt;
&lt;p&gt;So, this is mostly about asking you two things. Give that development
release a try and report issues you have with it. And help me.&lt;/p&gt;
&lt;p&gt;And have patience. I am developing Nuitka as an accelerator on a “no
known bugs” basis. That means, once I know of a bug, I will fix it. OK,
some issues in fact take longer, but then it really is not important at
all, but difficult at the time. For standalone mode, I can’t do it that
way, or I would have to neglect the acceleration parts, which I totally
don’t want to do.&lt;/p&gt;
&lt;p&gt;Because while you maybe are only interested in a packaging solution,
many others would like to have that orders of magnitude speedup that I
have been aiming for and that feels near now. This is about making
Python a viable language for more uses than it currently is.&lt;/p&gt;
&lt;p&gt;So why do it in the first place. For one, I am hoping that it helps
people to not turn away from Python. And second, and more important, I
am hoping that by making it more useful, more people will join me. (Oh,
and thirdly, it’s also a nice puzzle to solve. I seem to enjoy that.)&lt;/p&gt;
&lt;p&gt;Ultimately both modes will be needed, standalone, and acceleration. And
it seems like I am working to provide both. For standalone, more often,
than seeking to avoid bugs as far as possible, I am going to rely on
your participation.&lt;/p&gt;
&lt;p&gt;So join Nuitka. Now. &lt;a class="reference external" href="/doc/download.html"&gt;Download from here&lt;/a&gt;. Join
the mailing list (since closed). And help if you can. And yes you can.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-standalone-mode-is-work-in-progress.html"/>
    <summary>Many of you who turn to my easy to use, highly compatible Python
compiler Nuitka, do this mostly because they
seek to solve the deployment problem that Python suffers from.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="Windows" label="Windows"/>
    <category term="compiler" label="compiler"/>
    <published>2013-12-27T10:48:22+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-047.html</id>
    <title>Nuitka Release 0.4.7</title>
    <updated>2013-12-05T01:45:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-4-7"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release includes important new features, lots of polishing
cleanups, and some important performance improvements as well.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The RPM packages didn’t build due to missing in-line copy of Scons.
Fixed in 0.4.6.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The recursion into modules and unfreezing them was not working for
packages and modules anymore. Fixed in 0.4.6.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Windows installer was not including Scons. Fixed in 0.4.6.3
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The immediate execution as performed by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt; &lt;span class="pre"&gt;--execute&lt;/span&gt;&lt;/code&gt;
was not preserving the exit code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.3: Packages without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init.py__&lt;/span&gt;&lt;/code&gt; were not properly
embedding the name-space package as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Fix, modules and packages didn’t add themselves to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.modules&lt;/span&gt;&lt;/code&gt; which they should, happened only for programs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.3: Packages should set &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__package&lt;/span&gt;&lt;/code&gt; to their own name, not
the one of their parents.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.3: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__qualname__&lt;/span&gt;&lt;/code&gt; of nested classes was corrected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For modules that recursed to other modules, an infinite loop could be
triggered when comparing types with rich comparisons.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The “standalone” mode allows to compile standalone binaries for
programs and run them without Python installation. The DLLs loaded by
extension modules on Windows need to be added manually, on Linux
these are determined automatically already.&lt;/p&gt;
&lt;p&gt;To achieve running without Python installation, Nuitka learned to
freeze bytecode as an alternative to compiling modules, as some
modules need to be present when the CPython library is initialized.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag&lt;/span&gt;&lt;/code&gt; allows to specify flags to the compiler
that the “python” binary normally would. So far &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-S&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-v&lt;/span&gt;&lt;/code&gt; are
supported, with sane aliases &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;no_site&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;trace_imports&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The recommended use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-flag=-S&lt;/span&gt;&lt;/code&gt; is to avoid dependency
creep in standalone mode compilations, because the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module
often imports many useless things that often don’t apply to target
systems.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Faster frame stack handling for functions without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt;
(or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; in Python3). This gives a speed boost to
“PyStone” of ca. 2.5% overall.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Faster attribute getting and setting, handling special cases
at compile time. This gives a minor speed boost to “PyStone” of ca.
0.5% overall.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Much quicker calls of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__getattr__&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__setattr__&lt;/span&gt;&lt;/code&gt; as
this is now using the quicker call method avoiding temporary tuples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t treat variables usages used in functions called directly by
their owner as shared. This leads to more efficient code generation
for contractions and class bodies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; constants directly from their UTF-8 string
representation for Python2 as well instead of un-streaming. So far
this was only done for Python3. Affects only program start-up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Directly create &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; constants outside of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2**31&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2**32-1&lt;/span&gt;&lt;/code&gt;, but only limited according to actual platform
values. Affects only program start-up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When creating &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt; values, no longer use a temporary &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;
value, but use a properly generated helper functions instead. This
makes creating sets much faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Directly create &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt; constants instead of un-streaming them.
Affects only program start-up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For correct line numbers in traceback, the current frame line number
must be updated during execution. This was done more often than
necessary, e.g. loops set the line number before loop entry, and at
first statement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module variables are now accessed even faster, the gain for “PyStone”
is only 0.1% and mostly the result of leaner code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The “standalone mode” code (formerly known as “portable mode” has
been redone and activated. This is a feature that a lot of people
expect from a compiler naturally. And although the overall goal for
Nuitka is of course acceleration, this kind of packaging is one of
the areas where CPython needs improvement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added package for Ubuntu 13.10 for download, removed packages for
Ubuntu 11.04 and 11.10, no more supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added package for openSUSE 13.1 for download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka is now part of Arch and can be installed with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pacman&lt;/span&gt; &lt;span class="pre"&gt;-S&lt;/span&gt;
&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using dedicated &lt;a class="reference external" href="http://buildbot.net"&gt;Buildbot&lt;/a&gt; for continuous
integration testing. Not yet public.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: In order to speed up repeated compilation on a platform
without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt;, added Scons level caching in the build directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disabled hash randomization for inside Nuitka (but not in ultimately
created binaries) for a more stable output, because dictionary
constants will not change around. This makes the build results
possible to cache for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ccache&lt;/span&gt;&lt;/code&gt; and Scons as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests"&gt;
&lt;h2&gt;Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;programs&lt;/span&gt;&lt;/code&gt; tests cases now fail if module or directory
recursion is not working, being executed in another directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test runner for packages, with initial test case for package
with recursion and sub-packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made some test cases more strict by reducing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt;
provision.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect use of extra flags in tests that don’t get consumed avoiding
ineffective flags.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--execute&lt;/span&gt;&lt;/code&gt; on Windows as well, the issue that prevented it has
been solved after all.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The generated code uses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;const_&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;var_&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;par_&lt;/span&gt;&lt;/code&gt; prefixes in
the generated code and centralized the decision about these into
single place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module variables no longer use C++ classes for their access, but
instead accessor functions, leading to much less code generated per
module variable and removing the need to trace their usage during
code generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The test runners now share common code in a dedicated module,
previously they replicated it all, but that turned out to be too
tedious.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Massive general cleanups, many of which came from new contributor
Juan Carlos Paco.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved standalone and freezer related codes to dedicated package
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.freezer&lt;/span&gt;&lt;/code&gt; to not pollute the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; package name space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code generation use variable identifiers and their accesses was
cleaned up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed several not-so-special case identifier classes because they
now behave more identical and all work the same way, so a parameters
can be used to distinguish them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved main program, function object, set related code generation to
dedicated modules.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release marks major technological progress with the introduction of
the much sought standalone mode and performance improvements from
improved code generation.&lt;/p&gt;
&lt;p&gt;The major break through for SSA optimization was not yet achieved, but
this is again making progress in the direction of it. Harmonizing
variables of different kinds was an important step ahead.&lt;/p&gt;
&lt;p&gt;Also very nice is the packaging progress, Nuitka was accepted into Arch
after being in Debian Testing for a while already. Hope is to see more
of this kind of integration in the future.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-047.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-12-05T01:45:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-in-arch-linux.html</id>
    <title>Nuitka in Arch Linux</title>
    <updated>2013-11-30T14:17:59+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-in-arch-linux"&gt;

&lt;p&gt;Got this message:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Just&lt;/span&gt; &lt;span class="n"&gt;thought&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;wanted&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;know&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;Nuitka&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="n"&gt;also&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;official&lt;/span&gt;
&lt;span class="n"&gt;Arch&lt;/span&gt; &lt;span class="n"&gt;Linux&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;installed&lt;/span&gt; &lt;span class="n"&gt;simply&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="n"&gt;pacman&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt; &lt;span class="n"&gt;nuitka&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So, that is another sign of Nuitka getting more external recognition. It
is showing that the eco system around Nuitka is indeed warming up.&lt;/p&gt;
&lt;p&gt;Many thanks to Alexander Rødseth and Panagiotis Mavrogiorgos for
maintaining the Nuitka packages inside Arch and on AUR.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-in-arch-linux.html"/>
    <summary>Got this message:</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-11-30T14:17:59+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-and-guis.html</id>
    <title>Nuitka and GUIs</title>
    <updated>2013-11-26T09:35:53+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-and-guis"&gt;

&lt;p&gt;Please see the page &lt;a class="reference external" href="/pages/overview.html"&gt;“What is Nuitka?”&lt;/a&gt; for
clarification of what it is now and what it wants to be.&lt;/p&gt;
&lt;p&gt;Nuitka is a typical compiler, just for Python, and aims to be
integrating with build tools, and as such is so much a command line
tool, it hurts.&lt;/p&gt;
&lt;p&gt;Yet, there are GUIs. Yes, &lt;em&gt;plural&lt;/em&gt;, there are even two.&lt;/p&gt;
&lt;p&gt;Many of you are maybe using Ninja IDE already. I have developed most of
early Nuitka in vim, and later, mostly because of Nuitka, switched back
to Emacs. I had switched from Emacs at one point 12 years ago, but then
went back a couple of years ago.&lt;/p&gt;
&lt;p&gt;But recently &lt;a class="reference external" href="https://plus.google.com/118074123761587415902/about"&gt;+Juan Carlos&lt;/a&gt; convinced me to
give Ninja a try. Because not only is he the creator the &lt;a class="reference external" href="https://github.com/juancarlospaco/nuitka-gui"&gt;Nuitka GUI&lt;/a&gt;, but also the creator
of the &lt;a class="reference external" href="https://github.com/juancarlospaco/nuitka-ninja"&gt;Ninja IDE plugin&lt;/a&gt; for Nuitka.&lt;/p&gt;
&lt;p&gt;So on Windows, I now use Ninja, and I like it, a lot.&lt;/p&gt;
&lt;p&gt;I must admit, I am not a heavy user of both Nuitka GUIs, rather being a
command line guy I suppose, but that is just great. I would like to
thank Juan Carlos for these contributions.&lt;/p&gt;
&lt;p&gt;They are one sign of Nuitka getting more external recognition. It is
showing that the eco system around Nuitka is indeed warming up.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-and-guis.html"/>
    <summary>Please see the page “What is Nuitka?” for
clarification of what it is now and what it wants to be.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-11-26T09:35:53+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-046.html</id>
    <title>Nuitka Release 0.4.6</title>
    <updated>2013-10-28T08:52:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-4-6"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release includes progress on all fronts. The primary focus was to
advance SSA optimization over older optimization code that was already
in place. In this domain, there are mostly cleanups.&lt;/p&gt;
&lt;p&gt;Another focus has been to enhance Scons with MSVC on Windows. Nuitka now
finds an installed MSVC compiler automatically, properly handles
architecture of Python and Windows. This improves usability a lot.&lt;/p&gt;
&lt;p&gt;Then this is also very much about bug fixes. There have been several hot
fixes for the last release, but a complicated and major issue forced a
new release, and many other small issues.&lt;/p&gt;
&lt;p&gt;And then there is performance. As can be seen in the &lt;a class="reference external" href="https://nuitka.net/pages/performance.html"&gt;performance graph&lt;/a&gt;, this release is the
fastest so far. This came mainly from examining the need for comparison
slots for compiled types.&lt;/p&gt;
&lt;p&gt;And last, but not least, this also expands the base of supported
platforms, adding Gentoo, and self compiled Python to the mix.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Support Nuitka being installed to a path that contains spaces and
handle main programs with spaces in their paths. Fixed in 0.4.5.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support Python being installed to a path that contains spaces. Fixed
in 0.4.5.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: User provided constants larger than 65k didn’t work with
MSVC. Fixed in 0.4.5.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-disable-console&lt;/span&gt;&lt;/code&gt; was not effective
with MSVC. Fixed in 0.4.5.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: For some users, Scons was detecting their MSVC installation
properly already from registry, but it didn’t honor the target
architecture. Fixed in 0.4.5.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When creating Python modules, these were marked as executable (“x”
bit), which they are of course not. Fixed in 0.4.5.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.3: On architectures where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_ssize_t&lt;/span&gt;&lt;/code&gt; is not the same as
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; this could lead to errors. Fixed in 0.4.5.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code that was using nested mutable constants and changed the nested
ones was not executing correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python2: Due to list contractions being re-formulated as functions,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; was rejected for the variables assigned in the contraction.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;iterable&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;

&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;  &lt;span class="c1"&gt;# Should work, was gave an unjustified SyntaxError.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compiled types when used in Python comparison now work. Code like
this will work:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;


&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FunctionType&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This of course also works for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; operator, and is another step
ahead in compatibility, and surprising too. And best of all, this
works even if the checking code is not compiled with Nuitka.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Detecting MSVC installation from registry, if no compiler is
already present in PATH.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: New options &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--mingw64&lt;/span&gt;&lt;/code&gt; to force compilation with MinGW.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Rich comparisons (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;==&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;&lt;/span&gt;&lt;/code&gt;, and the like) are now faster than
ever before due to a full implementation of its own in Nuitka that
eliminates a bit of the overhead. In the future, we will aim at
giving it type hints to make it even faster. This gives a minor speed
boost to PyStone of ca. 0.7% overall.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integer comparisons are now treated preferably, as they are in
CPython, which gives 1.3% speed boost to CPython.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The SSA based analysis is now used to provide variable scopes for
temporary variables as well as reference count needs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Replaced “value friend” based optimization code with SSA based
optimization, which allowed to remove complicated and old code that
was still used mainly in optimization of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt;
expressions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Delayed declaration of temp variables and their reference type is now
performed based on information from SSA, which may given more
accurate results. Not using “variable usage” profiles for this
anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Scons interface and related code got a massive overhaul, making
it more consistent and better documented. Also updated the internal
copy to 2.3.0 for the platforms that use it, mostly Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stop using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.system&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;subprocess.call(...,&lt;/span&gt; &lt;span class="pre"&gt;shell&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;True)&lt;/span&gt;&lt;/code&gt;
as it is not really portable at all, use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;subprocess.call(...,&lt;/span&gt; &lt;span class="pre"&gt;shell&lt;/span&gt;
&lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;False)&lt;/span&gt;&lt;/code&gt; instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As usual lots of cleanups related to line length issues and PyLint.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for Gentoo Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for self compiled Python versions with and without
debug enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added use of Nuitka fonts for headers in manuals.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Does not install in-line copy of Scons only on systems where it is
not going to be used, that is mostly non-Windows, and Linux where it
is not already present. This makes for cleaner RPM packages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;While the SSA stuff is not yet bearing performance fruits, it starts to
carry weight. Taking over the temporary variable handling now also means
we can apply the same stuff to local variables later.&lt;/p&gt;
&lt;p&gt;To make up for the delay in SSA driven performance improvements, there
is more traditional code acceleration for rich comparisons, making it
significant, and the bug fixes make Nuitka more compatible than ever.&lt;/p&gt;
&lt;p&gt;So give this a roll, it’s worth it. And feel free to join the mailing
list (since closed) or &lt;a class="reference external" href="https://nuitka.net/pages/donations.html"&gt;make a donation&lt;/a&gt; to support Nuitka.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-046.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-10-28T08:52:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-045.html</id>
    <title>Nuitka Release 0.4.5</title>
    <updated>2013-08-20T17:50:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-4-5"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release incorporates very many bug fixes, most of which were
already part of hot fixes, usability improvements, documentation
improvements, new logo, simpler Python3 on Windows, warnings for
recursion options, and so on. So it’s mostly a consolidation release.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;When targeting Python 3.x, Nuitka was using “python” to run Scons to
run it under Python 2.x, which is not good enough on systems, where
that is already Python3. Improved to only do the guessing where
necessary (i.e. when using the in-line copy of Scons) and then to
prefer “python2”. Fixed in 0.4.4.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When using Nuitka created binaries inside a “virtualenv”, created
programs would instantly crash. The attempt to load and patch
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; module was not making sure that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module was
already imported, but inside the “virtualenv”, it cannot be found
unless. Fixed in 0.4.4.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-directory&lt;/span&gt;&lt;/code&gt; to include plugin directories was
broken. Fixed in 0.4.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Files with “BOM” marker causes the compiler to crash. Fixed
in 0.4.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: The generated code for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; was
working with gcc (and therefore MinGW), but not with MSVC, causing
crashes. Fixed in 0.4.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-all&lt;/span&gt;&lt;/code&gt; did not recurse to package
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__.py&lt;/span&gt;&lt;/code&gt; files in case &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;x.y&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;z&lt;/span&gt;&lt;/code&gt; syntax was used.
Fixed in 0.4.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3 on macOS: Corrected link time error. Fixed in 0.4.4.2
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.3 on Windows: Fixed crash with too many arguments to a kwonly
argument using function. Fixed in 0.4.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3.3 on Windows: Using “yield from” resulted in a link time
error. Fixed in 0.4.4.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Added back XML manifest, found a case where it is needed to
prevent clashes with binary modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Generators only worked in the main Python threads. Some
unusual threading modules therefore failed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.prefix&lt;/span&gt;&lt;/code&gt; to find the Python installation instead of hard
coded paths.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Windows: Python3 finds Python2 installation to run Scons
automatically now.&lt;/p&gt;
&lt;p&gt;Nuitka itself runs under Python3 just fine, but in order to build the
generated C++ code into binaries, it uses Scons which still needs
Python2.&lt;/p&gt;
&lt;p&gt;Nuitka will now find the Python2 installation searching Windows
registry instead of requiring hard coded paths.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows: Python2 and Python3 find their headers now even if Python is
not installed to specific paths.&lt;/p&gt;
&lt;p&gt;The installation path now is passed on to Scons which then uses it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better error checking for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-to&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-not-to&lt;/span&gt;&lt;/code&gt;
arguments, tell the user not to use directory paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a warning for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-to&lt;/span&gt;&lt;/code&gt; arguments that end up having no
effect to the final result.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Import mechanism got cleaned up, stopped using
“PyImport_ExtendInittab”. It does not handle packages, and the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.meta_path&lt;/span&gt;&lt;/code&gt; based importer is now well proven.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved some of the constraint collection code mess into proper places.
It still remains a mess.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;LICENSE.txt&lt;/span&gt;&lt;/code&gt; file with Apache License 2.0 text to make it
more immediately obvious which license Nuitka is under.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added section about Nuitka license to the &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html#license"&gt;User Manual&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/blob/develop/doc/Logo/Nuitka-Logo-Symbol.svg"&gt;Nuitka Logo&lt;/a&gt;
to the distribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use Nuitka Logo as the bitmap in the Windows installer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use Nuitka Logo in the documentation (&lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User Manual&lt;/a&gt; and &lt;a class="reference external" href="https://nuitka.net/doc/developer-manual.html"&gt;Developer Manual&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced documentation to number page numbers starting after table of
contents, removed header/footer from cover pages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is mostly the result of improvements made based on the
surge of users after Europython 2013. Some people went to extents and
reported their experience very detailed, and so I could aim at making
e.g. their misconceptions about how recursion options work, more obvious
through warnings and errors.&lt;/p&gt;
&lt;p&gt;This release is not addressing performance improvements. The next
release will be able to focus on that. I am taking my claim of full
compatibility very serious, so any time it’s broken, it’s the highest
priority to restore it.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-045.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-08-20T17:50:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/my-europython-2013-report.html</id>
    <title>My Europython 2013 report</title>
    <updated>2013-08-15T08:15:17+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="my-europython-2013-report"&gt;

&lt;p&gt;Back from Europython 2013 in Florence for a while now. I had a
presentation about my &lt;a class="reference external" href="/pages/overview.html"&gt;Python compiler Nuitka&lt;/a&gt;.
You can watch the Video on Youtube. I believe it’s absolutely worth your
time. I was not doing a lot of “why” at all now, only “what”, and demo
times, and answering questions:&lt;/p&gt;
&lt;div class="video_wrapper" style=""&gt;
&lt;iframe allowfullscreen="true" src="https://www.youtube.com/embed/BDjXZY_8d58" style="border: 0; height: 345px; width: 560px"&gt;
&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;The talk went really well. I believe one can clearly see that I felt
really good and at ease. The state presented is very good and progress -
there was a lot, so that was great. The &lt;a class="reference external" href="/pr/Nuitka-Presentation-PyCON-EU-2013.pdf"&gt;slides&lt;/a&gt; of the talk may also be
interesting.&lt;/p&gt;
&lt;p&gt;And it definitely raised a lot of interest.&lt;/p&gt;
&lt;p&gt;Last years talk is also there. You can (maybe) see that I was 20kg more
weight then, and also &lt;em&gt;much&lt;/em&gt; more excited, at least initially.
Background: I was surprised then that Guido van Rossum was attending the
talk, plus I was kind of not in the state of this year, the confidence
that people should believe, that things will work after that, was not
yet there. I knew it, but standing in front of a croud and saying, look
I am attempting what you consider impossible, or even have failed at, is
not easy:&lt;/p&gt;
&lt;div class="video_wrapper" style=""&gt;
&lt;iframe allowfullscreen="true" src="https://www.youtube.com/embed/ZDHkla5rllg" style="border: 0; height: 345px; width: 560px"&gt;
&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;There are also the &lt;a class="reference external" href="/pr/Nuitka-Presentation-PyCON-EU-2012.pdf"&gt;slides&lt;/a&gt; of that talk which may
also be interesting, but of course are outdated somewhat now.&lt;/p&gt;
&lt;section id="years-make-differences"&gt;
&lt;h2&gt;Years make differences&lt;/h2&gt;
&lt;p&gt;So yeah, the progress happened since 2012 made a difference. Nuitka has
proven things. Let’s see what this year does to it. I would hope for
real type inference optimization and portable mode to be there next
year.&lt;/p&gt;
&lt;p&gt;Consider that is the a &lt;em&gt;spare time effort&lt;/em&gt;. Lots of people lauded it for
the out of the box experience, and how it just works. That’s right. I
put a lot of focus on stability, correctness, and ease of use. In fact,
since my return, I have mostly worked on the feedback I got in that
domain.&lt;/p&gt;
&lt;p&gt;But for the relatively small amount of time I can invest (outside of
holidays), it’s make very fast progress.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="out-of-the-box-thinking"&gt;
&lt;h2&gt;Out of the box thinking&lt;/h2&gt;
&lt;p&gt;The feedback during the conference was great. While Nuitka is not yet
seeing a lot of users, and not as many contributions or donations as I
would hope for, but that’s kind of expected with my out of the box
thinking there.&lt;/p&gt;
&lt;p&gt;Few people at Europython really need a Python compiler. The most
important exception are scientific people, doing number crunching. And I
made some interesting contacts there.&lt;/p&gt;
&lt;p&gt;Since my return, I have been receiving a bunch of bug reports. Some of
which were unfortunately regressions of 0.4.4, and these got fixed in
two hotfix releases. Currently 0.4.4.2 is released, and contains a huge
amount of fixes, mostly stuff found by the surge new users.&lt;/p&gt;
&lt;p&gt;But I deserved that, having said that I didn’t have to do hotfixes for a
while now.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="florence"&gt;
&lt;h2&gt;Florence&lt;/h2&gt;
&lt;p&gt;Such a lovely place, and so lovely people. It’s a tourist place, true,
but it’s very open minded. The food is extremely good. And going from
the conference hotel straight over to the river to meet up and have a
few beers was very comfortable for after-conference stuff.&lt;/p&gt;
&lt;p&gt;Now that I have been there 2 times, and the conference even 3 times,
it’s moving on, to Berlin, which I sort of regret. Knowing the place
somewhat definitely is an advantage by itself.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python-revolution"&gt;
&lt;h2&gt;Python Revolution&lt;/h2&gt;
&lt;p&gt;One thing that came to my mind during the conference, witnessing the
large amount of non-satisfaction, was that the community is fed up with
the leadership. Questioned about lack of Python3 adoption, a PSF guy in
his presentation said they were 3 years into a 5 years plan, and got
interrupted by laughter.&lt;/p&gt;
&lt;p&gt;It may be about time, somebody actually gets up, removes the GIL and has
a Python2.8 that is compatible. Obviously that’s much more useful. It
could be a Python3.x with compatibility names of modules, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt;
statement, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict.iteritems&lt;/span&gt;&lt;/code&gt; added, probably also making some of
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; mess more harmless, and providing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; built-in names.&lt;/p&gt;
&lt;p&gt;Considering that I have in fact been playing with the idea of forking
CPython top versions, to add things, that would allow Nuitka to work
better with it, that could be a staging ground, where such changes are
nurtured. On the other hand, Nuitka is too irrelevant yet to drive this,
and it would detract me away from it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="gains"&gt;
&lt;h2&gt;Gains&lt;/h2&gt;
&lt;p&gt;So Nuitka got a lot more exposure. And one guy watching the talk even
created a really &lt;a class="reference external" href="/_static/Nuitka-Logo-Symbol.svg"&gt;nice logo&lt;/a&gt; for it.
I will make it a separate announcement though, and the next release is
going to use it.&lt;/p&gt;
&lt;p&gt;And in the aftermath, there were much bug useful reports. And new ideas.
And reinforcement that what I am doing is actually useful to some people
already.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="donations"&gt;
&lt;h2&gt;Donations&lt;/h2&gt;
&lt;p&gt;My travel to Florence was in part funded by donations. Thanks a lot to
all of you who have given, and who would like to also &lt;a class="reference external" href="/pages/donations.html"&gt;make a donation&lt;/a&gt;. Should I receive sufficient donations, I
intend to go to FOSDEM 2014 as well.&lt;/p&gt;
&lt;p&gt;Going to Berlin will be a bit cheaper this time around, as I can travel
there via train.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The Europython 2012 and 2013 both are among the times of my life.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/my-europython-2013-report.html"/>
    <summary>Back from Europython 2013 in Florence for a while now. I had a
presentation about my Python compiler Nuitka.
You can watch the Video on Youtube. I believe it’s absolutely worth your
time. I was not doing a lot of “why” at all now, only “what”, and demo
times, and answering questions:</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="conference" label="conference"/>
    <category term="europython" label="europython"/>
    <category term="presentation" label="presentation"/>
    <category term="video" label="video"/>
    <published>2013-08-15T08:15:17+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-044.html</id>
    <title>Nuitka Release 0.4.4</title>
    <updated>2013-06-27T00:16:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-4-4"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release marks the point, where Nuitka for the first time supports
all major current Python versions and all major features. It adds Python
3.3 support and it adds support for threading. And then there is a
massive amount of fixes that improve compatibility even further.&lt;/p&gt;
&lt;p&gt;Aside of that, there is major performance work. One side is the
optimization of call performance (to CPython non-compiled functions) and
to compiled functions, both. This gave a serious improvement to
performance.&lt;/p&gt;
&lt;p&gt;Then of course, we are making other, long term performance progress, as
in “–experimental” mode, the SSA code starts to optimize unused code
away. That code is not yet ready for prime time yet, but the trace
structure will hold.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python3.3 support.&lt;/p&gt;
&lt;p&gt;The test suite of CPython3.3 passes now too. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; is
now supported, but the improved argument parsing error messages are
not implemented yet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tracing user provided constants, now Nuitka warns about too large
constants produced during optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Line numbers of expressions are now updates as evaluation progresses.
This almost corrects.&lt;/p&gt;
&lt;p&gt;Now only expression parts that cannot raise, do not update, which can
still cause difference, but much less often, and then definitely
useless.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Experimental support for threads.&lt;/p&gt;
&lt;p&gt;Threading appears to work just fine in the most cases. It’s not as
optimal as I wanted it to be, but that’s going to change with time.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Previous corrections for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;==&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;!=&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;=&lt;/span&gt;&lt;/code&gt;, caused a
performance regression for these operations in case of handling
identical objects.&lt;/p&gt;
&lt;p&gt;For built-in objects of sane types (not &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt;), these operations
are now accelerated again. The overreaching acceleration of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;gt;=&lt;/span&gt;&lt;/code&gt;
was still there (bug, see below) and has been adapted too.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calling non-compiled Python functions from compiled functions was
slower than in CPython. It is now just as fast.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calling compiled functions without keyword arguments has been
accelerated with a dedicated entry point that may call the
implementation directly and avoid parameter parsing almost entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Making calls to compiled and non-compiled Python functions no longer
requires to build a temporary tuple and therefore is much faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parameter parsing code is now more compact, and re-uses error raises,
or creates them on the fly, instead of hard coding it. Saves binary
size and should be more cache friendly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Corrected false optimization of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt; on C++ level.&lt;/p&gt;
&lt;p&gt;When it’s not done during Nuitka compile time optimization, the rich
comparison helper still contained short cuts for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;gt;=&lt;/span&gt;&lt;/code&gt;. This is now
the same for all the comparison operators.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calling a function with default values, not providing it, and not
providing a value for a value without default, was not properly
detecting the error, and instead causing a run time crash.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;


&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This now properly raises the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TypeError&lt;/span&gt;&lt;/code&gt; exception.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Constants created with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;+&lt;/span&gt;&lt;/code&gt; could become larger than the normally
enforced limits. Not as likely to become huge, but still potentially
an issue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vars&lt;/span&gt;&lt;/code&gt; built-in, when used on something without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__dict__&lt;/span&gt;&lt;/code&gt;
attribute, was giving &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AttributeError&lt;/span&gt;&lt;/code&gt; instead of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TypeError&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When re-cursing to modules at compile time, script directory and
current directory were used last, while at run time, it was the other
way around, which caused overloaded standard library modules to not
be embedded.&lt;/p&gt;
&lt;p&gt;Thanks for the patch to James Michael DuPont.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Super without arguments was not raising the correct &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RuntimeError&lt;/span&gt;&lt;/code&gt;
exception in functions that cannot be methods, but
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UnboundLocalError&lt;/span&gt;&lt;/code&gt; instead.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# Error, cannot refer to first argument of f&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generators no longer use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt; &lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; for return
statements, because that one is not properly handled in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt; clauses, where it’s not supposed to trigger, while
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; should be honored.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception error message when throwing non-exceptions into generators
was not compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; with value in generators is a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt;
before Python3.3, but that was not raised.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variable names of the “__var” style need to be mangled. This was only
done for classes, but not for functions contained in classes, there
they are now mangled too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Exceptions raised with causes were not properly chaining.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Specifying the file encoding corrupted line numbers, making
them all of by one.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For containers (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt;) defined on
the source code level, Nuitka immediately created constant references
from them.&lt;/p&gt;
&lt;p&gt;For function calls, class creations, slice objects, this code is now
re-used, and its dictionaries and tuples, may now become constants
immediately, reducing noise in optimization steps.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The parameter parsing code got cleaned up. There were a lot of relics
from previously explored paths. And error raises were part of the
templates, but now are external code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Global variable management moved to module objects and out of
“Variables” module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure, nodes in the tree are not shared by accident.&lt;/p&gt;
&lt;p&gt;This helped to find a case of duplicate use in the complex call
helpers functions. Code generation will now notice this kind of
duplication in debug mode.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The complex call helper functions were manually taking variable
closure, which made these functions inconsistent to other functions,
e.g. no variable version was allocated to assignments.&lt;/p&gt;
&lt;p&gt;Removing the manual setting of variables allowed a huge reduction of
code volume, as it became more generic code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Converting user provided constants to create containers into
constants immediately, to avoid noise from doing this in
optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; module is now imported explicitly in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt;
module, so it can be handled by the recursion code as well. This will
help portable mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many line length 80 changes, improved comments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The CPython3.3 test suite was added, and run with both Python3.2 and
Python3.3, finding new bugs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doctest&lt;/span&gt;&lt;/code&gt; to code generation didn’t successfully handle all
tests, most notably, “test_generators.py” was giving a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; and therefore not actually active. Correcting that
improved the coverage of generator testing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The portable code is still delayed.&lt;/p&gt;
&lt;p&gt;Support for Python3.3 was a higher priority, but the intention is to
get it into shape for Europython still.&lt;/p&gt;
&lt;p&gt;Added notes about it being disabled it in the &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User Manual&lt;/a&gt; documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is in preparation for Europython 2013. Wanted to get this
much out, as it changes the status slides quite a bit, and all of that
was mostly done in my Cyprus holiday a while ago.&lt;/p&gt;
&lt;p&gt;The portable code has not seen progress. The idea here is to get this
into a development version later.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-044.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-06-27T00:16:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-043.html</id>
    <title>Nuitka Release 0.4.3</title>
    <updated>2013-05-18T10:17:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-4-3"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release expands the reach of Nuitka substantially, as new platforms
and compilers are now supported. A lot of polish has been applied. Under
the hood there is the continued and in-progress effort to implement SSA
form in Nuitka.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Support for new compiler: Microsoft Visual C++.&lt;/p&gt;
&lt;p&gt;You can now use Visual Studio 2008 or Visual Studio 2010 for
compiling under Windows.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for NetBSD.&lt;/p&gt;
&lt;p&gt;Nuitka works for at least NetBSD 6.0, older versions may or may not
work. This required fixing bugs in the generic “fibers”
implementation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for Python3 under Windows too.&lt;/p&gt;
&lt;p&gt;Nuitka uses Scons to build the generated C++ files. Unfortunately it
requires Python2 to execute, which is not readily available to call
from Python3. It now guesses the default installation paths of
CPython 2.7 or CPython 2.6 and it will use it for running Scons
instead. You have to install it to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;C:\Python26&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;C:\Python27&lt;/span&gt;&lt;/code&gt;
for Nuitka to be able to find it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced Python 3.3 compatibility.&lt;/p&gt;
&lt;p&gt;The support the newest version of Python has been extended, improving
compatibility for many minor corner cases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added warning when a user compiles a module and executes it
immediately when that references &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Because very likely the intention was to create an executable. And
esp. if there is code like this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In module mode, Nuitka will optimize it away, and nothing will happen
on execution. This is because the command&lt;/p&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;nuitka&lt;span class="w"&gt; &lt;/span&gt;--execute&lt;span class="w"&gt; &lt;/span&gt;module
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;is behavioral more like&lt;/p&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;import module&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;and that was a trap for new users.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;All Linux architectures are now supported. Due to changes in how
evaluation order is enforced, we don’t have to implement for specific
architectures anymore.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dictionary creation was not fully compatible.&lt;/p&gt;
&lt;p&gt;As revealed by using Nuitka with CPython3.3, the order in which
dictionaries are to be populated needs to be reversed, i.e. CPython
adds the last item first. We didn’t observe this before, and it’s
likely the new dictionary implementation that finds it.&lt;/p&gt;
&lt;p&gt;Given that hash randomization makes dictionaries item order
undetermined anyway, this is more an issue of testing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Evaluation order for arguments of calls was not effectively enforced.
It is now done in a standards compliant and therefore fully portable
way. The compilers and platforms so far supported were not affected,
but the newly supported Visual Studio C++ compiler was.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__future__&lt;/span&gt;&lt;/code&gt; import inside a function was giving an
assertion, instead of the proper syntax error.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Do not set the attributes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exc_type&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exc_value&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exc_traceback&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3: Annotations of function worked only as long as their
definition was not referring to local variables.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Calls with no positional arguments are now using the faster call
methods.&lt;/p&gt;
&lt;p&gt;The generated C++ code was using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;()&lt;/span&gt;&lt;/code&gt; constant at call site,
when doing calls that use no positional arguments, which is of course
useless.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Windows now uses OS “Fibers” for Nuitka “Fibers”.&lt;/p&gt;
&lt;p&gt;Using threads for fibers was causing only overhead and with this API,
MSVC had less issues too.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Accepting &lt;a class="reference external" href="https://nuitka.net/pages/donations.html"&gt;Donations&lt;/a&gt; via
Paypal, please support funding travels, website, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User Manual&lt;/a&gt; has
been updated with new content. We now do support Visual Studio,
documented the required LLVM version for clang, Win64 and modules may
include modules too, etc. Lots of information was no longer accurate
and has been updated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Changelog has been improved for consistency, wordings, and
styles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka is now available on the social code platforms as well&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Bitbucket (since removed)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka"&gt;GitHub&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gitorious (since discontinued)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Google Code (since discontinued)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;clean-up.sh&lt;/span&gt;&lt;/code&gt;, which is practically useless, as tests now
clean up after themselves reasonably, and with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt; &lt;span class="pre"&gt;clean&lt;/span&gt; &lt;span class="pre"&gt;-dfx&lt;/span&gt;&lt;/code&gt;
working better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed “create-environment.sh” script, which was only setting the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; variable, which is not necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;check-with-pylint&lt;/span&gt; &lt;span class="pre"&gt;--emacs&lt;/span&gt;&lt;/code&gt; option to make output its work
with Emacs compilation mode, to allow easier fixing of warnings from
PyLint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Documentation is formatted for 80 columns now, source code will
gradually aim at it too. So far 90 columns were used, and up to 100
tolerated.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Removed useless manifest and resource file creation under Windows.&lt;/p&gt;
&lt;p&gt;Turns out this is no longer needed at all. Either CPython, MinGW, or
Windows improved to no longer need it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PyLint massive cleanups and annotations bringing down the number of
warnings by a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid use of strings and built-ins as run time pre-computed constants
that are not needed for specific Python versions, or Nuitka modes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not track needed tuple, list, and dict creation code variants in
context, but e.g. in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen.TupleCodes&lt;/span&gt;&lt;/code&gt; module instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Introduced an “internal” module to host the complex call helper
functions, instead of just adding it to any module that first uses
it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added basic tests for order evaluation, where there currently were
None.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for “2to3” execution under Windows too, so we can run
tests for Python3 installations too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The release is clearly major step ahead. The new platform support
triggered a whole range of improvements, and means this is truly
complete now.&lt;/p&gt;
&lt;p&gt;Also there is very much polish in this release, reducing the number of
warnings, updated documentation, the only thing really missing is
visible progress with optimization.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-043.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-05-18T10:17:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/going-to-europython-2013.html</id>
    <title>Going to Europython 2013</title>
    <updated>2013-04-16T09:58:34+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="going-to-europython-2013"&gt;

&lt;p&gt;I am going to the wonderful city of Florence, and &lt;a class="reference external" href="https://ep2013.europython.eu/"&gt;Europython 2013&lt;/a&gt; and make a presentation there. This
time, I am not introducing Nuitka anymore, I did that in 2012, this
time, I will try and dive into static optimization and try to convey the
message why I believe it is possible.&lt;/p&gt;
&lt;nav class="contents" id="contents"&gt;
&lt;p class="topic-title"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#going-to-europython-2013" id="id1"&gt;Going to Europython 2013&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#things-to-talk-about" id="id2"&gt;Things to talk about&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#status" id="id3"&gt;Status&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#last-years-questions" id="id4"&gt;Last years questions&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#builtins" id="id5"&gt;Builtins&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#debugger-pdb" id="id6"&gt;Debugger - pdb&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#threading" id="id7"&gt;Threading&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#c-to-python-gaps" id="id8"&gt;C++ to Python gaps&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#performance" id="id9"&gt;Performance&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#demos" id="id10"&gt;Demos&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#future-work" id="id11"&gt;Future Work&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#ssa" id="id12"&gt;SSA&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#compiled-modules" id="id13"&gt;Compiled Modules&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#compiled-locals" id="id14"&gt;Compiled Locals&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#whole-program-analysis" id="id15"&gt;Whole Program Analysis&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#perspective" id="id16"&gt;Perspective&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#funding" id="id17"&gt;Funding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#final-picture" id="id18"&gt;Final Picture&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="#final-words" id="id19"&gt;Final Words&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="things-to-talk-about"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id2" role="doc-backlink"&gt;Things to talk about&lt;/a&gt;&lt;/h2&gt;
&lt;section id="status"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id3" role="doc-backlink"&gt;Status&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Only briefly this time, since I will be able to say that all current
Python versions are fully supported (&lt;a class="reference external" href="nuitka-needs-you-a-call-for-help.html"&gt;surely if you help me with
Python3.3 yield from&lt;/a&gt;), all
major platforms now. One important milestone has been reached meanwhile,
and work on far reaching compile time optimizations is happening. As
this should be quite obvious stuff, I am going to keep that short.&lt;/p&gt;
&lt;p&gt;What I would like to get done until then:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Win64&lt;/p&gt;
&lt;p&gt;One remaining area of work to achieve Win64 support, which is almost
complete. I epxect one of the next releases to support it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Threading&lt;/p&gt;
&lt;p&gt;And of course there is threading, which was the one real major
weakness present last time, which appears only short of pronouncing
break-through. At least one user is using Nuitka with many threads
operationally already. I just have to re-activate the thread using
tests CPython that I disabled. Seems I only have to convince myself
of it too.&lt;/p&gt;
&lt;p&gt;Since it’s not totally a priority right now, one of the next releases
will support it, likely before the conference.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But as you see. Completion all around is there or at least in sight.
Kind of worked on this nearby.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="last-years-questions"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id4" role="doc-backlink"&gt;Last years questions&lt;/a&gt;&lt;/h3&gt;
&lt;section id="builtins"&gt;
&lt;h4&gt;&lt;a class="toc-backref" href="#id5" role="doc-backlink"&gt;Builtins&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;For instance, writing to built-ins, what will/did happen.&lt;/p&gt;
&lt;p&gt;Changing builtins can be done in two ways. One is to set the value on
the module level, which is something that has always worked. The other
is writing to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;builtins&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;
&lt;p&gt;This is something that is OK for Nuitka in some cases (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;open&lt;/span&gt;&lt;/code&gt; ) and handled by it at run time. And it’s not effective in
others (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;len&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Good news is that we got contributed a “compiled built-ins” code, where
we now will be able to see such writes. Now it’s only used to not check
every time for changes, but to know them (pull vs. push). But we will
also use it and trigger &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;RuntimeError&lt;/span&gt;&lt;/code&gt; exceptions for things we cannot
handle when we only learn of it at run time.&lt;/p&gt;
&lt;p&gt;The other element to address is, it of course whole program analysis.
When Nuitka sees the write to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;builtins.str&lt;/span&gt;&lt;/code&gt;, it may very well
consider it. The distinction between initial and current builtin values,
and the optimization of it, that will be interesting to cover.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Currently Nuitka does nothing of this, but it will.&lt;/p&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="debugger-pdb"&gt;
&lt;h4&gt;&lt;a class="toc-backref" href="#id6" role="doc-backlink"&gt;Debugger - pdb&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The compiled binaries work the same as the normal Python code. So you
will be able to simply use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pdb&lt;/span&gt;&lt;/code&gt; on it instead.&lt;/p&gt;
&lt;p&gt;Interacting with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pdb&lt;/span&gt;&lt;/code&gt; is not &lt;em&gt;totally&lt;/em&gt; out of reach, but kind of
pointless mostly, unless you need to attach to long running operational
programs. For now that use case is not supported though.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="threading"&gt;
&lt;h4&gt;&lt;a class="toc-backref" href="#id7" role="doc-backlink"&gt;Threading&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;I learned a whole lot about threading. Also thanks to the kind people of
Stackless Python, who explained things to me. I am still amazed at how
little I did know of these things, and still went so far. In my
industry, threads are considered not allowed, and I personally don’t
like them either, so my experience was non-existing.&lt;/p&gt;
&lt;p&gt;But in the mean time, I managed to come up with ideas that appear to
work, and if I implement the full design, it will even be more efficient
than anything.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="c-to-python-gaps"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id8" role="doc-backlink"&gt;C++ to Python gaps&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I consider all of these more or less solved.&lt;/p&gt;
&lt;p&gt;Well maybe except recently arose issues with MSVC for “function calls”.
It appears that compiler highlights a weakness in one of my approaches.
Nuitka so far only changed the order of declaration and call arguments
around, which is kind of transparent.&lt;/p&gt;
&lt;p&gt;But MSVC actively takes liberty to calculate function arguments as it
sees fit. The fix for it, is now totally different and should be highly
portable and even compliant to C++.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="performance"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id9" role="doc-backlink"&gt;Performance&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There are still slow exceptions. I would like to avoid raising C++
exceptions in the future, because they are so slow (Python exceptions
are much faster).&lt;/p&gt;
&lt;p&gt;And diagrams, I would like to have a whole lot more of these. Since I
dropped speedcenter, I am making actual progress there. I hope to have
enough to show at the conference, where the actual strength and weakness
currently is.&lt;/p&gt;
&lt;p&gt;Since I am getting closer to pronouncing Nuitka useful. I surely
believe, I need to answer the performance question in larger detail. And
of course, I need now a better idea, what impact measures have.&lt;/p&gt;
&lt;p&gt;But as this is a lot of work, I doubt that I will be all that perfect by
then, my goal is to have a comparison with Shedskin. No matter how
unfair it is (Shedskin does only a small subset of Python), it’s the
most useful comparison in my eyes, as where Shedskin makes static type
analysis, Nuitka also should do it, only hampered by guards at maximum.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="demos"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id10" role="doc-backlink"&gt;Demos&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The talk with start out with demonstration of Nuitka, something simple
first, and then Mercurial as a more complex example, and then its test
suite.&lt;/p&gt;
&lt;p&gt;And I will show portable binaries. It seems to work quite nicely.
Generally I expect to start out with demos, and explain from there,
instead of having a demo only at the end.&lt;/p&gt;
&lt;p&gt;If it all works out, this time, they will be prepared with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;recordmydesktop&lt;/span&gt;&lt;/code&gt; so I can publish them separately too.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="future-work"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#id11" role="doc-backlink"&gt;Future Work&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Generally the talk will be more directed at the future, although this is
kind of a dark area now. That’s its nature I guess.&lt;/p&gt;
&lt;section id="ssa"&gt;
&lt;h4&gt;&lt;a class="toc-backref" href="#id12" role="doc-backlink"&gt;SSA&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The talk will also be largely built SSA (static single assignment) and
how it applies to Python. What everybody means, when they say “Python is
too dynamic (to be statically compiled)” is that Python values may
escape to unknown code that changes them very often.&lt;/p&gt;
&lt;p&gt;I will have to talk about that, and how get out of that trap, basically
guards, much like PyPy does it too. Escaped values and strange code are
only one option of things to occur. Having code for both cases, sounds
possible. I will talk about how to decide, which branches we shall have
and which not.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="compiled-modules"&gt;
&lt;h4&gt;&lt;a class="toc-backref" href="#id13" role="doc-backlink"&gt;Compiled Modules&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;And I believe with “compiled modules” potentially already in place, we
can achieve very cheap guards in most cases. I can at least explain, why
guards can be relatively cheap, where we need them.&lt;/p&gt;
&lt;p&gt;I am kind of bugged by that idea. It kind of means to revisit an older
milestone, but now an idea has surfaced, that I previously didn’t have,
and that I am very curious to learn the benefit of. Very quick &lt;em&gt;and&lt;/em&gt;
safe module variabls, are very tempting to have, and definitely make a
difference for the Nuitka design.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="compiled-locals"&gt;
&lt;h4&gt;&lt;a class="toc-backref" href="#id14" role="doc-backlink"&gt;Compiled Locals&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Who knows, we might even have a “compiled locals” as well, which as a
side effect, also allows total interactivity with the most absurd codes.
So far, each local variable is a C++ object, and as this is compiled,
and very fast.&lt;/p&gt;
&lt;p&gt;But the frame locals is not in sync with it. Were it a special object,
it could try and interact with these when control escapes to code that
we don’t know if it might use it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="whole-program-analysis"&gt;
&lt;h4&gt;&lt;a class="toc-backref" href="#id15" role="doc-backlink"&gt;Whole Program Analysis&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Big words. Can Nuitka avoid module objects entirely. Can it inline
functions, specialize them according to the only types used (think
including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.dirname&lt;/span&gt;&lt;/code&gt; in the binary, but with the constraint
that it only need to work on string objects as input, because the
program is known to use it any different.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="perspective"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id16" role="doc-backlink"&gt;Perspective&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Last time, I spent a lot of time on justification, “why a new project?”,
“why not work with the others?”, what goals do I have that others do
not. Giving examples of how code generation works. Generally to give
people an idea of the project.&lt;/p&gt;
&lt;p&gt;With this out of the way, I can now focus on inclusion, and success.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="funding"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id17" role="doc-backlink"&gt;Funding&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And, well yes, this time I may not have to pay for it all by myself.
Last time I spent close to 1000 Euros for the trip (ticket to enter,
hotel, flight, food), because I am &lt;a class="reference external" href="/pages/donations.html"&gt;accepting donations&lt;/a&gt; for this specific reason.&lt;/p&gt;
&lt;p&gt;For a strange reason, I devote substantial amounts of time to the
project, only to put it under the most liberal license. It’s probably
fair to allow people to &lt;a class="reference external" href="/pages/donations.html"&gt;make donations&lt;/a&gt; if
they feel they want to further the project, but don’t know how. Or if
they just consider it too important for me to loose interest. That kind
of feels unlikely though. Too much fun.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="final-picture"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id18" role="doc-backlink"&gt;Final Picture&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And lets have an image I made during Europython 2012 in the city of
Florence. It shows what a vibrant place this town is.&lt;/p&gt;
&lt;img alt="https://nuitka.net/_images/europython-2012-07-img6319.jpg" src="https://nuitka.net/_images/europython-2012-07-img6319.jpg" /&gt;
&lt;p&gt;Florence is a place full of kind people. The mood not only of the
conference, but the whole city is very open minded and helpful. It was
very easy to get adopted by strangers to their party.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="final-words"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#id19" role="doc-backlink"&gt;Final Words&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I am looking forward to meeting the friends I made there last time, and
new friends. I kind of a great time there last time, one of these “times
of my life”. Even if the reception was not always as warm as I had
deserved. I remember laughing a lot, learning a lot. And making unique
experiences.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/going-to-europython-2013.html"/>
    <summary>I am going to the wonderful city of Florence, and Europython 2013 and make a presentation there. This
time, I am not introducing Nuitka anymore, I did that in 2012, this
time, I will try and dive into static optimization and try to convey the
message why I believe it is possible.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="europython" label="europython"/>
    <published>2013-04-16T09:58:34+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-needs-you-a-call-for-help.html</id>
    <title>Nuitka needs you - a call for help</title>
    <updated>2013-04-10T07:51:13+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-needs-you-a-call-for-help"&gt;

&lt;div class="admonition-update-3 admonition"&gt;
&lt;p class="admonition-title"&gt;Update 3&lt;/p&gt;
&lt;p&gt;And the first point has been done too, Python3.3 is now fully
supported, including &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; syntax.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonition-update-2 admonition"&gt;
&lt;p class="admonition-title"&gt;Update 2&lt;/p&gt;
&lt;p&gt;The third point, Windows 64 support has been done as well. Turns out,
that I do in fact own only Win64 systems, and with MSVC support in
place, only a few portability fixes were needed.&lt;/p&gt;
&lt;p&gt;Help with the other point, “re-formulation of yield”, would still be
more than welcome, and no signs of progress there yet. So stop
thinking “you could”, enter telling people “you did” mode.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonition-update admonition"&gt;
&lt;p class="admonition-title"&gt;Update&lt;/p&gt;
&lt;p&gt;The second point, Fibers implementation for Windows, has been done.
Thanks for the help you people provide. The next release will contain
it.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Hello everybody,&lt;/p&gt;
&lt;p&gt;the Python compiler Nuitka has come an ever longer way, and currently I
have quite a bunch of issues, that I believe could well need your help.
These are all issues of some important and significance, yet self
contained jobs that you may enjoy.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;You can check the page &lt;a class="reference external" href="/pages/overview.html"&gt;What is Nuitka?&lt;/a&gt; for
clarification of what it is now and what it wants to be.&lt;/p&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python 3.3 - reformulation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; needed.&lt;/p&gt;
&lt;p&gt;As you can see, covering all the CPython 2.6, 2.7, and 3.2 language
features is already something. Also CPython 3.3 is now working on a
basic level. Other projects are far, far away from that.&lt;/p&gt;
&lt;p&gt;Many language constructs, such as the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; statement are
re-formulated into other constructs. This makes it possible to work
with a simple core for optimization, and to reduce the complexity a
lot. For the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; statement case, it’s changed to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt; statements, together with
a few temporary variables. Check the Nuitka source of it:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://nuitka.net/gitweb/?p=Nuitka.git;a=blob;f=nuitka/tree/ReformulationWithStatements.py;h=2a2d5821e5a511201454e5ae8a7c979d48f04c4a;hb=HEAD"&gt;ReformulationWithStatements.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is also &lt;a class="reference external" href="/doc/developer-manual.html#language-conversions-to-make-things-simpler"&gt;descriptions of all these re-formulations in the
Developer Manual&lt;/a&gt;
so you can see how this is done.&lt;/p&gt;
&lt;p&gt;Now check &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0380/"&gt;PEP 380&lt;/a&gt; for
the details of it, and your task would be to come up with a
re-formulation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; statements to the semantically
equivalent.&lt;/p&gt;
&lt;p&gt;The benefit is, you are working on a totally self-contained level.
The re-formulation only needs to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ast&lt;/span&gt;&lt;/code&gt; node information, and
turn that into Nuitka nodes. The problem will be fully solved this
way.&lt;/p&gt;
&lt;p&gt;And once we have this, we can pronounce CPython3.3 as fully
supported. So if you would like to see this happen, please join.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows - MSVC support needs low level code help&lt;/p&gt;
&lt;div class="admonition-update admonition"&gt;
&lt;p class="admonition-title"&gt;Update&lt;/p&gt;
&lt;p&gt;This is now done.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The support for MSVC is already mostly there. If you execute the
environment setting script, and use Nuitka under Windows, it will
work. The only problem is that for the generator functions, Nuitka is
using a concept called “Fiber”, which is basically just switching C
stacks, so called co-routines.&lt;/p&gt;
&lt;p&gt;It works great for Linux and UNIX. For Windows, Fibers are currently
using threads, which wouldn’t be as much of a performance problem,
because they are very lightweight, it is slightly wasteful only.&lt;/p&gt;
&lt;p&gt;But, the bad thing, is with these threads switching and C++
exceptions used to represent Python exceptions, no combination of
MSVC options seems to carry the day and keep the exception in the
current thread. They are caught in the wrong thread, and make
generators misbehave, crash.&lt;/p&gt;
&lt;p&gt;This is the &lt;em&gt;only&lt;/em&gt; thing that holds back proper MSVC support at this
time, and it has been like this for a while. With MinGW, the issue
does not exist, but MinGW is a stranger to many, and MSVC will be
more efficient code generation, so we would like to have that.&lt;/p&gt;
&lt;p&gt;So what it takes is somebody familiar with Windows and its ABI, esp.
register usage to write code that swaps the registers around, so we
can have multiple C stacks without threads for it too. This may
involve messing around with exception jump back pointers as well.&lt;/p&gt;
&lt;p&gt;It needs somebody who can handle this and does it for Nuitka, and
then it would be well supported. It may involve writing some
assembler code. The job is also very well contained, but also
requires very specific knowledge, so please join me here. If you
think you can do this, do it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows 64 bit&lt;/p&gt;
&lt;p&gt;I have no access to Win64. I bought many Windows versions, but not
the Win64 variants so far. I understand that there are CPython builds
for it, and probably a MinGW matching it, as well as a matching newer
MSVC, that may work better for C++ exceptions than the one CPython
2.x is tied to.&lt;/p&gt;
&lt;p&gt;Doing that, you would mostly only have to play around with
&lt;a class="reference external" href="https://nuitka.net/gitweb/?p=Nuitka.git;a=blob;f=nuitka/build/SingleExe.scons;h=f32dd2f61293ee6dca3b5b828b30769ea4d00902;hb=HEAD"&gt;SingleExe.scons&lt;/a&gt;,
which abstracts the details of it all. One issue you will encounter
is that Scons needs a Python2, and other small things. This is mostly
only about porting Nuitka, and could be done by anybody with access
to Win64 and willing to fiddle around a bit.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So these are 3 different ways you can help Nuitka. Creating the Python
compiler is a huge effort. And if you help it, we will sooner arrive at
its goals. Join the Nuitka mailing list (since closed) or &lt;a class="reference external" href="mailto:kay&amp;#46;hayen&amp;#37;&amp;#52;&amp;#48;gmail&amp;#46;com"&gt;contact me&lt;/a&gt; directly if you choose to help with any
of these issues.&lt;/p&gt;
&lt;p&gt;Wait, actually there is another way you can help. Please spread this
news to people that you believe might be willing to help. And allow me
to plug this, I am doing Nuitka in my spare time. If you feel, you
cannot help, but still would like to support it, you can still &lt;a class="reference external" href="/pages/donations.html"&gt;make
donations&lt;/a&gt; to allow me to travel to conferences
and spend more time on it myself.&lt;/p&gt;
&lt;p&gt;Anyway, it would be great if these 3 things got sorted out. Come and
join me for this grand vision of the Python compiler.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-needs-you-a-call-for-help.html"/>
    <summary>And the first point has been done too, Python3.3 is now fully
supported, including yield from syntax.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-04-10T07:51:13+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/support-for-portable-standalone-programs.html</id>
    <title>Support for portable (standalone) programs</title>
    <updated>2013-04-07T13:52:44+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="support-for-portable-standalone-programs"&gt;

&lt;p&gt;This post is about a feature often requested, but so far not available
feature of Nuitka. Please see the page &lt;a class="reference external" href="/pages/overview.html"&gt;“What is Nuitka?”&lt;/a&gt; for clarification of what it is now and what it
wants to be.&lt;/p&gt;
&lt;p&gt;In forums, and in Google, people are looking at a Python compiler, also
as a way of deployment. It should offer what &lt;a class="reference external" href="http://www.py2exe.org/"&gt;py2exe&lt;/a&gt; does, allow installation independent of
Python.&lt;/p&gt;
&lt;p&gt;Well, for a long time it didn’t. But thanks to recent contributions,
it’s upcoming for the next release, Nuitka 0.4.3, and it’s in the
current pre-releases.&lt;/p&gt;
&lt;p&gt;It works by adding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--portable&lt;/span&gt;&lt;/code&gt; to the command line. So this should
work for you:&lt;/p&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;nuitka-python&lt;span class="w"&gt; &lt;/span&gt;--recurse-all&lt;span class="w"&gt; &lt;/span&gt;--portable&lt;span class="w"&gt; &lt;/span&gt;your-program.py
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Right now, it will create a folder “_python” with DLLs, and
“_python.zip” with standard library modules used along to the
“your-program.exe”. Copy these to another machine, without a Python
installation, and it will (should) work. Making that statement fully
true may need refinements, as some DLL dependencies might not be defined
yet.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;We may improve it in the future to meld everything into one
executable for even easier deployment.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;You are more than welcome to experiment with it. To do so, download
Nuitka from the &lt;a class="reference external" href="/doc/download.html"&gt;download page&lt;/a&gt; and give it a
roll.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Of course, Nuitka is not about replacing “py2exe” primarily, it’s
only a side effect of what we do. Our major goal is of course to
accelerate Python, but surely nobody minds achieving the two things
at the same time.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;And while the post is labeled “Windows”, this feature also works for
Linux at least too. It’s just that the lack of Python installations on
client systems is far more widespread on this platform.&lt;/p&gt;
&lt;p&gt;To me, as this is from a contributor, it’s another sign of Nuitka
gaining adoption for real usage. My personal “py2exe” experience is
practically not existing, I have never used it. And I will only merge
the improvements into the Nuitka project as provided by others. My focus
for the time to come is of course the compile time and run time
optimization.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/support-for-portable-standalone-programs.html"/>
    <summary>This post is about a feature often requested, but so far not available
feature of Nuitka. Please see the page “What is Nuitka?” for clarification of what it is now and what it
wants to be.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="Windows" label="Windows"/>
    <category term="compiler" label="compiler"/>
    <published>2013-04-07T13:52:44+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-042.html</id>
    <title>Nuitka Release 0.4.2</title>
    <updated>2013-03-29T14:32:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-4-2"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release comes with many bug fixes, some of which are severe. It
also contains new features, like basic Python 3.3 support. And the
&lt;a class="reference external" href="https://nuitka.net/pages/performance.html"&gt;performance diagrams&lt;/a&gt; got
expanded.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Support for FreeBSD.&lt;/p&gt;
&lt;p&gt;Nuitka works for at least FreeBSD 9.1, older versions may or may not
work. This required only fixing some “Linuxisms” in the build
process.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New option for warning about compile time detected exception raises.&lt;/p&gt;
&lt;p&gt;Nuitka can now warn about exceptions that will be raised at run time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basic Python3.3 support.&lt;/p&gt;
&lt;p&gt;The test suite of CPython3.2 passes and fails in a compatible way.
New feature &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt; &lt;span class="pre"&gt;from&lt;/span&gt;&lt;/code&gt; is not yet supported, and the improved
argument parsing error messages are not implemented yet.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Nuitka already supported compilation of “main directories”, i.e.
directories with a “__main__.py” file inside. The resulting binary
name was “__main__.exe” though, but now it is “directory.exe”&lt;/p&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# ls directory&lt;/span&gt;
__main__.py

&lt;span class="c1"&gt;# nuitka --exe directory&lt;/span&gt;
&lt;span class="c1"&gt;# ls&lt;/span&gt;
directory&lt;span class="w"&gt; &lt;/span&gt;directory.exe
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This makes this usage more obvious, and fixes an older issue for this
feature.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Evaluation order of binary operators was not enforced.&lt;/p&gt;
&lt;p&gt;Nuitka already enforces evaluation order for just about everything.
But not for binary operators it seems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Providing an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;#&lt;/span&gt; &lt;span class="pre"&gt;coding:&lt;/span&gt; &lt;span class="pre"&gt;no-exist&lt;/span&gt;&lt;/code&gt; was crashing under Python2, and
ignored under Python3, now it does the compatible thing for both.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Global statements on the compiler level are legal in Python, and were
not handled by Nuitka, they now are.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;  &lt;span class="c1"&gt;# Not in a function, but on module level. Pointless but legal!&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Effectively these statements can be ignored.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Future imports are only legal when they are at the start of the file.&lt;/p&gt;
&lt;p&gt;This was not enforced by Nuitka, making it accept code, which CPython
would reject. It now properly raises a syntax error.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Raising exceptions from context was leaking references.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Under CPython3.2 the above is not allowed (it is acceptable starting
CPython3.3), and was also leaking references to its arguments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Importing the module that became &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt; through the module
name, didn’t recurse to it.&lt;/p&gt;
&lt;p&gt;This also gives a warning. PyBench does it, and then stumbles over
the non-found “pybench” module. Of course, programmers should use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.modules[&lt;/span&gt; &lt;span class="pre"&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;]&lt;/span&gt;&lt;/code&gt; to access main module code. Not only
because the duplicated modules don’t share data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiled method &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;repr&lt;/span&gt;&lt;/code&gt; leaked references when printed.&lt;/p&gt;
&lt;p&gt;When printing them, they would not be freed, and subsequently hold
references to the object (and class) they belong to. This could
trigger bugs for code that expects &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__del__&lt;/span&gt;&lt;/code&gt; to run at some point.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; built-in leaked references to given object.&lt;/p&gt;
&lt;p&gt;This was added, because Python3 needs it. It supplies the arguments
to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; automatically, whereas for Python2 the programmer had to
do it. And now it turns out that the object lost a reference, causing
similar issues as above, preventing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__del__&lt;/span&gt;&lt;/code&gt; to run.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt;&lt;/code&gt; statement didn’t enforce type of third argument.&lt;/p&gt;
&lt;p&gt;This Python2-only form of exception raising now checks the type of
the third argument before using it. Plus, when it’s None (which is
also legal), no reference to None is leaked.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3 built-in exceptions were strings instead of exceptions.&lt;/p&gt;
&lt;p&gt;A gross mistake that went uncaught by test suites. I wonder how. Them
being strings doesn’t help their usage of course, fixed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-nan&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nan&lt;/span&gt;&lt;/code&gt; both exist and make a difference.&lt;/p&gt;
&lt;p&gt;A older story continued. There is a sign to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nan&lt;/span&gt;&lt;/code&gt;, which can be
copied away and should be present. This is now also supported by
Nuitka.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wrong optimization of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;==&lt;/span&gt; &lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;!=&lt;/span&gt; &lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt; on C++
level.&lt;/p&gt;
&lt;p&gt;While it’s not done during Nuitka optimization, the rich comparison
helpers still contained short cuts for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;==&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;!=&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;=&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.executable&lt;/span&gt;&lt;/code&gt; for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-python&lt;/span&gt; &lt;span class="pre"&gt;--python-version&lt;/span&gt; &lt;span class="pre"&gt;3.2&lt;/span&gt;&lt;/code&gt; was
still &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When determining the value for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.executable&lt;/span&gt;&lt;/code&gt; the CPython library
code looks at the name &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; had received. It was &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt;&lt;/code&gt; in
all cases, but now it depends on the running version, so it
propagates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keyword only functions with default values were losing references to
defaults.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;()):&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;


&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# Can crash, X() should already be released.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is now corrected. Of course, a Python3 only issue.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pressing CTRL-C didn’t generate &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;KeyboardInterrupt&lt;/span&gt;&lt;/code&gt; in compiled
code.&lt;/p&gt;
&lt;p&gt;Nuitka never executes “pending calls”. It now does, with the upside,
that the solution used, appears to be suitable for threading in
Nuitka too. Expect more to come out of this.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; statements with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;, or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt;
to leave their body, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__exit__&lt;/span&gt;&lt;/code&gt; was not called.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# This called a.__enter__().&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;  &lt;span class="c1"&gt;# This didn&amp;#39;t call a.__exit__(None, None, None).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is of course quite huge, and unfortunately wasn’t covered by any
test suite so far. Turns out, the re-formulation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt;
statements, was wrongly using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try/except/else&lt;/span&gt;&lt;/code&gt;, but these ignore
the problematic statements. Only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try/finally&lt;/span&gt;&lt;/code&gt; does. The enhanced
re-formulation now does the correct thing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Starting with Python3, absolute imports are now the default.&lt;/p&gt;
&lt;p&gt;This was already present for Python3.3, and it turns out that all of
Python3 does it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Constants are now much less often created with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pickle&lt;/span&gt;&lt;/code&gt; module, but
created directly.&lt;/p&gt;
&lt;p&gt;This esp. applies for nested constants, now more values become &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;is&lt;/span&gt;&lt;/code&gt;
identical instead of only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;==&lt;/span&gt;&lt;/code&gt; identical, which indicates a reduced
memory usage.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;something_special&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;something_special&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;  &lt;span class="c1"&gt;# Now true&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is not only about memory efficiency, but also about performance.
Less memory usage is more cache friendly, and the “==” operator will
be able to shortcut dramatically in cases of identical objects.&lt;/p&gt;
&lt;p&gt;Constants now created without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pickle&lt;/span&gt;&lt;/code&gt; usage, cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt;, which is enough for PyStone to not use it at
all, which has been added support for as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continue statements might be optimized away.&lt;/p&gt;
&lt;p&gt;A terminal &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; in a loop, was not optimized away:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;something&lt;/span&gt;
    &lt;span class="k"&gt;continue&lt;/span&gt;  &lt;span class="c1"&gt;# Now optimized away&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The trailing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; has no effect and can therefore be removed.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;something&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Loops with only break statements are optimized away.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;break&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A loop immediately broken has of course no effect. Loop conditions
are re-formulated to immediate “if … : break” checks. Effectively
this means that loops with conditions detected to be always false to
see the loop entirely removed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added tests for the found issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Running the programs test suite (i.e. recursion) for Python3.2 and
Python3.2 as well, after making adaptation so that the absolute
import changes are now covered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Running the “CPython3.2” test suite with Python3.3 based Nuitka works
and found a few minor issues.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &lt;a class="reference external" href="https://nuitka.net/doc/download.html"&gt;Downloads&lt;/a&gt; page now
offers RPMs for RHEL6, CentOS6, F17, F18, and openSUSE 12.1, 12.2,
12.3. This large coverage is thanks to openSUSE build service and
“ownssh” for contributing an RPM spec file.&lt;/p&gt;
&lt;p&gt;The page got improved with logos for the distributions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added “ownssh” as contributor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Revamped the &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User Manual&lt;/a&gt; in terms of layout,
structure, and content.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release is the result of much validation work. The amount of fixes
the largest of any release so far. New platforms, basic Python3.3
support, consolidation all around.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-042.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-03-29T14:32:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-rpms-rhel-centos-f17-f18-opensuse.html</id>
    <title>Nuitka RPMs (RHEL, CentOS, F17, F18, openSUSE)</title>
    <updated>2013-03-16T18:44:45+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-rpms-rhel-centos-f17-f18-opensuse"&gt;

&lt;p&gt;Thanks to a contribution, Nuitka now has a proper RPM spec file. And
using &lt;a class="reference external" href="https://build.opensuse.org/package/show/home:kayhayen/Nuitka"&gt;openSUSE Build Service&lt;/a&gt;, we
can now enjoy RPMs for all major distributions.&lt;/p&gt;
&lt;p&gt;Check out the revamped &lt;a class="reference external" href="/doc/download.html"&gt;download page&lt;/a&gt; as well.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;At the time of this writing, the “stable” Nuitka 0.4.1 link points to
a 0.4.2 pre-release. That is only until 0.4.2 final will be released.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Thanks for making this possible, very much appreciated.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-rpms-rhel-centos-f17-f18-opensuse.html"/>
    <summary>Thanks to a contribution, Nuitka now has a proper RPM spec file. And
using openSUSE Build Service, we
can now enjoy RPMs for all major distributions.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-03-16T18:44:45+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-041.html</id>
    <title>Nuitka Release 0.4.1</title>
    <updated>2013-03-05T22:13:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-4-1"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is the first follow-up with a focus on optimization. The
major highlight is progress towards SSA form in the node tree.&lt;/p&gt;
&lt;p&gt;Also a lot of cleanups have been performed, for both the tree building,
which is now considered mostly finished, and will be only reviewed. And
for the optimization part there have been large amounts of changes.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python 3.3 experimental support&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Now compiles many basic tests. Ported the dictionary quick access
and update code to a more generic and useful interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__qualname__&lt;/span&gt;&lt;/code&gt; to classes and functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Small compatibility changes. Some exceptions changed, absolute
imports are now default, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For comparison tests, the hash randomization is disabled.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python 3.2 support has been expanded.&lt;/p&gt;
&lt;p&gt;The Python 3.2 on Ubuntu is not providing a helper function that was
used by Nuitka, replaced it with out own code.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Default values were not “is” identical.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;defaultKeepsIdentity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;str_value&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;str_value&amp;quot;&lt;/span&gt;


&lt;span class="n"&gt;defaultKeepsIdentity&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This now prints “True” as it does with CPython. The solution is
actually a general code optimization, see below.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Usage of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; built-in with more than one argument could
corrupt the encoding argument string.&lt;/p&gt;
&lt;p&gt;An implementation error of the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; was releasing references
to arguments converted to default encoding, which could corrupt it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Assigning Python3 function annotations could cause a segmentation
fault.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Improved propagation of exception raise statements, eliminating more
code. They are now also propagated from all kinds of expressions.
Previously this was more limited. An assertion added will make sure
that all raises are propagated. Also finally, raise expressions are
converted into raise statements, but without any normalization.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Now optimizing:&lt;/span&gt;
&lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="c1"&gt;# into (minus normalization):&lt;/span&gt;
&lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ZeroDivisionError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;integer division or modulo by zero&amp;quot;&lt;/span&gt;

&lt;span class="c1"&gt;# Now optimizing:&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;
&lt;span class="c1"&gt;# into (minus normalization):&lt;/span&gt;
&lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ZeroDivisionError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;integer division or modulo by zero&amp;quot;&lt;/span&gt;

&lt;span class="c1"&gt;# Now optimizing:&lt;/span&gt;
&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;
&lt;span class="c1"&gt;# into (minus normalization), notice the side effects of first checking&lt;/span&gt;
&lt;span class="c1"&gt;# function and a as names to be defined, these may be removed only if&lt;/span&gt;
&lt;span class="c1"&gt;# they can be demonstrated to have no effect.&lt;/span&gt;
&lt;span class="n"&gt;function&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ZeroDivisionError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;integer division or modulo by zero&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There is more examples, where the raise propagation is new, but you
get the idea.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conditional expression nodes are now optimized according to the truth
value of the condition, and not only for compile time constants. This
covers e.g. container creations, and other things.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# This was already optimized, as it&amp;#39;s a compile time constant.&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;

&lt;span class="c1"&gt;# These are now optimized, as their truth value is known.&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is simply taking advantage of infrastructure that now exists.
Each node kind can overload “getTruthValue” and benefit from it. Help
would be welcome to review which ones can be added.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Function creations only have side effects, when their defaults or
annotations (Python3) do. This allows to remove them entirely, should
they be found to be unused.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code generation for constants now shares element values used in
tuples.&lt;/p&gt;
&lt;p&gt;The general case is currently too complex to solve, but we now make
sure constant tuples (as e.g. used in the default value for the
compiled function), and string constants share the value. This should
reduce memory usage and speed up program start-up.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Optimization was initially designed around visitors that each did one
thing, and did it well. It turns out though, that this approach is
unnecessary, and constraint collection, allows for the most
consistent results. All remaining optimization has been merged into
constraint collection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The names of modules containing node classes were harmonized to
always be plural. In the beginning, this was used to convey the
information that only a single node kind would be contained, but that
has long changed, and is unimportant information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The class names of nodes were stripped from the “CPython” prefix.
Originally the intent was to express strict correlation to CPython,
but with increasing amounts of re-formulations, this was not used at
all, and it’s also not important enough to dominate the class name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The re-formulations performed in tree building have moved out of the
“Building” module, into names “ReformulationClasses” e.g., so they
are easier to locate and review. Helpers for node building are now in
a separate module, and generally it’s much easier to find the content
of interest now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new re-formulation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt; statements. The conversion to
strings is now made explicit in the node tree.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added test to cover default value identity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The upload of &lt;a class="reference external" href="http://pypi.python.org/pypi/Nuitka/"&gt;Nuitka to PyPI&lt;/a&gt; has been repaired and now
properly displays project information again.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The quicker release is mostly a consolidation effort, without much
actual performance progress. The progress towards SSA form matter a lot
on the outlook front. Once this is finished, standard compiler
algorithms can be added to Nuitka which go beyond the current peephole
optimization.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-041.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-03-05T22:13:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-040.html</id>
    <title>Nuitka Release 0.4.0</title>
    <updated>2013-02-25T17:39:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-4-0"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release brings massive progress on all fronts. The big highlight is
of course: Full Python3.2 support. With this release, the test suite of
CPython3.2 is considered passing when compiled with Nuitka.&lt;/p&gt;
&lt;p&gt;Then lots of work on optimization and infrastructure. The major goal of
this release was to get in shape for actual optimization. This is also
why for the first time, it is tested that some things are indeed compile
time optimized to spot regressions easier. And we are having performance
diagrams, &lt;a class="reference external" href="https://nuitka.net/pages/performance.html"&gt;even if weak ones&lt;/a&gt;:&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Python3.2 is now fully supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fully correct &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metaclass&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt;&lt;/code&gt; semantics now correctly supported. It
had been working somewhat previously, but now all the corner cases
are covered too.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Keyword only parameters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Annotations of functions return value and their arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception causes, chaining, automatic deletion of exception
handlers &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;as&lt;/span&gt;&lt;/code&gt; values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for starred assigns.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unicode variable names are also supported, although it’s of course
ugly, to find a way to translate these to C++ ones.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Checking compiled code with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;instance(some_function,&lt;/span&gt;
&lt;span class="pre"&gt;types.FunctionType)&lt;/span&gt;&lt;/code&gt; as “zope.interfaces” does, was causing
compatibility problems. Now this kind of check passes for compiled
functions too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The frame of modules had an empty locals dictionary, which is not
compatible to CPython which puts the globals dictionary there too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For nested exceptions and interactions with generator objects, the
exceptions in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exc_info()&lt;/span&gt;&lt;/code&gt; were not always fully compatible.
They now are.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt; builtin was not raising exceptions if given arguments
appeared to not have side effects, but were still illegal, e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range([],&lt;/span&gt; &lt;span class="pre"&gt;1,&lt;/span&gt; &lt;span class="pre"&gt;-1)&lt;/span&gt;&lt;/code&gt; was optimized away if the value was not used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t crash on imported modules with syntax errors. Instead, the
attempted recursion is simply not done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Doing a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__defaults&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__module__&lt;/span&gt;&lt;/code&gt; of compiled
functions was crashing. This was noticed by a Python3 test for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__kwdefaults__&lt;/span&gt;&lt;/code&gt; that exposed this compiled functions weakness.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wasn’t detecting duplicate arguments, if one of them was not a plain
arguments. Star arguments could collide with normal ones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__doc__&lt;/span&gt;&lt;/code&gt; of classes is now only set, where it was in fact
specified. Otherwise it only polluted the name space of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals()&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; from the tried statements of a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try/finally&lt;/span&gt;&lt;/code&gt; block,
was overridden, by the final block, a reference was leaked. Example
code:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Raising exception instances with value, was leaking references, and
not raising the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TypeError&lt;/span&gt;&lt;/code&gt; error it is supposed to do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When raising with multiple arguments, the evaluation order of them
was not enforced, it now is. This fixes a reference leak when raising
exceptions, where building the exception was raising an exception.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Optimizing attribute access to compile time constants for the first
time. The old registry had no actual user yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimizing subscript and slices for all compile time constants beyond
constant values, made easy by using inheritance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in references now convert to strings directly, e.g. when used
in a print statement. Needed for the testing approach “compiled file
contains only prints with constant value”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimizing calls to constant nodes directly into exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimizing built-in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; for arguments with known truth value.
This would be creations of tuples, lists, and dictionaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimizing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt; based on aliasing interface,
which at this time effectively is limited to telling that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt;
is true and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;is&lt;/span&gt; &lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;a&lt;/span&gt;&lt;/code&gt; is false, but this will expand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for optimizing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hasattr&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getattr&lt;/span&gt;&lt;/code&gt;, and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setattr&lt;/span&gt;&lt;/code&gt; built-ins as well. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hasattr&lt;/span&gt;&lt;/code&gt; was needed for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;class&lt;/span&gt;&lt;/code&gt; re-formulation of Python3 anyway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimizing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getattr&lt;/span&gt;&lt;/code&gt; with string argument and no default to simple
attribute access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for optimizing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isinstance&lt;/span&gt;&lt;/code&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Was handling “BreakException” and “ContinueException” in all loops
that used &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; instead of only where necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When catching “ReturnValueException”, was raising an exception where
a normal return was sufficient. Raising them now only where needed,
which also means, function need not catch them ever.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The handling of classes for Python2 and Python3 have been
re-formulated in Python more completely.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The calling of the determined “metaclass” is now in the node tree,
so this call may possible to in-line in the future. This
eliminated some static C++ code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Passing of values into dictionary creation function is no longer
using hard coded special parameters, but temporary variables can
now have closure references, making this normal and visible to the
optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Class dictionary creation functions are therefore no longer as
special as they used to be.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is no class creation node anymore, it’s merely a call to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; or the metaclass detected.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Re-formulated complex calls through helper functions that process the
star list and dict arguments and do merges, checks, etc.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Moves much C++ code into the node tree visibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Will allow optimization to eliminate checks and to compile time
merge, once in-line functions and loop unrolling are supported.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added “return None” to function bodies without a an aborting
statement at the end, and removed the hard coded fallback from
function templates. Makes it explicit in the node tree and available
for optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Merged C++ classes for frame exception keeper with frame guards.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The exception is now saved in the compiled frame object, making it
potentially more compatible to start with.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Aligned module and function frame guard usage, now using the same
class.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a clear difference in the frame guard classes. One is
for generators and one is for functions, allowing to implement
their different exception behavior there.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The optimization registries for calls, subscripts, slices, and
attributes have been replaced with attaching them to nodes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The ensuing circular dependency has been resolved by more local
imports for created nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The package “nuitka.transform.optimization.registries” is no more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New per node methods “computeNodeCall”, “computeNodeSubscript”,
etc. dispatch the optimization process to the nodes directly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the standard frame guard code generation for modules too.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added a variant “once”, that avoids caching of frames entirely.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The variable closure taking has been cleaned up.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Stages are now properly numbered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3 only stage is not executed for Python2 anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added comments explaining things a bit better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now an early step done directly after building a tree.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The special code generation used for unpacking from iterators and
catching “StopIteration” was cleaned up.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Now uses template, Generator functions, and proper identifiers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; statements in generators are now re-formulated into
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt; &lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; for generators, because that’s what they
really are. Allowed to remove special handling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; nodes in
generators.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The specialty of CPython2.6 yielding non-None values of lambda
generators, was so far implemented in code generation. This was moved
to tree building as a re-formulation, making it subject to normal
optimization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mangling of attribute names in functions contained in classes, has
been moved into the early tree building. So far it was done during
code generation, making it invisible to the optimization stages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed tags attribute from node classes. This was once intended to
make up for non-inheritance of similar node kinds, but since we have
function references, the structure got so clean, it’s no more needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Introduced new package &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.tree&lt;/span&gt;&lt;/code&gt;, where the building of node
trees, and operations on them live, as well as recursion and variable
closure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.transform&lt;/span&gt;&lt;/code&gt; and move its former children
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.optimization&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.finalization&lt;/span&gt;&lt;/code&gt; one level up. The
deeply nested structure turned out to have no advantage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Checks for Python version was sometimes “&amp;gt; 300”, where of course “&amp;gt;=
300” is the only thing that makes sense.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split out helper code for exception raising from the handling of
exception objects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The complete CPython3.2 test suite was adapted (no &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__code__&lt;/span&gt;&lt;/code&gt;, no
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__closure__&lt;/span&gt;&lt;/code&gt;, etc.) and is now passing, but only without
“–debug”, because otherwise some of the generated C++ triggers
(harmless) warnings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new test suite designed to prove that expressions that are
known to be compile time constant are indeed so. This works using the
XML output done with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--dump-xml&lt;/span&gt;&lt;/code&gt; and then searching it to only
have print statements with constant values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new basic CPython3.2 test “Functions32” and “ParameterErrors32”
to cover keyword only parameter handling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added tests to cover generator object and exception interactions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added tests to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try/finally&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; in one or both
branches correctly handling the references.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added tests to cover evaluation order of arguments when raising
exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Changed my email from GMX over to Gmail, the old one will still
continue to work. Updated the copyright notices accordingly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uploaded &lt;a class="reference external" href="http://pypi.python.org/pypi/Nuitka/"&gt;Nuitka to PyPI&lt;/a&gt; as
well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release marks a milestone. The support of Python3 is here. The
re-formulation of complex calls, and the code generation improvements
are quite huge. More re-formulation could be done for argument parsing,
but generally this is now mostly complete.&lt;/p&gt;
&lt;p&gt;The 0.3.x series had a lot releases. Many of which brought progress with
re-formulations that aimed at making optimization easier or possible.
Sometimes small things like making “return None” explicit. Sometimes
bigger things, like making class creations normal functions, or getting
rid of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt;. All of this was important ground work, to
make sure, that optimization doesn’t deal with complex stuff.&lt;/p&gt;
&lt;p&gt;So, the 0.4.x series begins with this. The focus from now on can be
almost purely optimization. This release contains already some of it,
with frames being optimized away, with the assignment keepers from the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; re-formulation being optimized away. This will be
about achieving goals from the “ctypes” plan as discussed in the
Developer Manual.&lt;/p&gt;
&lt;p&gt;Also the performance page will be expanded with more benchmarks and
diagrams as I go forward. I have finally given up on “codespeed”, and do
my own diagrams.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-040.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2013-02-25T17:39:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/static-compilation-that-is-the-point.html</id>
    <title>Static Compilation - That is the point</title>
    <updated>2012-12-02T12:23:32+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="static-compilation-that-is-the-point"&gt;

&lt;p&gt;In a recent post, Stefan Behnel questioned the point of static
compilation and suggests that in order to be useful, a static compiler
&lt;strong&gt;needs&lt;/strong&gt; to add something on top.&lt;/p&gt;
&lt;p&gt;This is going to be a rebuttal.&lt;/p&gt;
&lt;section id="compatibility-i-mean-it"&gt;
&lt;h2&gt;Compatibility, I mean it&lt;/h2&gt;
&lt;p&gt;First of all, let me start out, by saying that Nuitka is intended to be
the fully optimizing compiler of Python. The optimizing part is not yet
true. Right now, it’s probably a correct compiler of Python. Correct in
the sense that it’s compatible to CPython as far as possible.&lt;/p&gt;
&lt;p&gt;As examples of what I mean with compatibility:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nuitka will hold references to local variables of frames, when an
exception is raised, and will release them only once the next
exception is raised.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka will give the same error messages for all kinds of errors. For
example, the parameter parsing of functions will be the same.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka provides all language constructs no matter how absurd or
unused they are.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="compatibility-slower"&gt;
&lt;h2&gt;Compatibility != Slower&lt;/h2&gt;
&lt;p&gt;While generally Nuitka will have a hard time to be faster &lt;em&gt;and&lt;/em&gt;
compatible to CPython, I don’t have much concern about that. Using
guards between optimistic, and less optimistic variants of code, there
is no doubt in my head, that for programs, lots of code will only need
very minimal type annotation and still receive respectable speedups.&lt;/p&gt;
&lt;p&gt;Of course, at this point, this is only speculation. But I somehow gather
that the sentiment is that incompatible and fast &lt;em&gt;need&lt;/em&gt; to go along. I
totally dispute that.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="language-extensions"&gt;
&lt;h2&gt;Language Extensions&lt;/h2&gt;
&lt;p&gt;Now, the “in addition” stuff, that Stefan is talking about. I don’t see
the point at all. It is quite obvious that everything you can say with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cdef&lt;/span&gt;&lt;/code&gt; syntax, could also be said with a more Pythonic syntax. And if
it were missing, it could be added. And where it’s a semantic change, it
should be frowned upon.&lt;/p&gt;
&lt;p&gt;For the Nuitka project, I never considered an own parser of Python. No
matter how easy it would be, to roll your own, and I understand that
Cython did that, it’s always going to be wrong and it’s work. Work that
has no point. The CPython implementation exhibits and maintains the
module &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ast&lt;/span&gt;&lt;/code&gt; that works just fine.&lt;/p&gt;
&lt;p&gt;For Python, if this were so really useful, such language extensions
should be added to Python itself. If there were missing meaningful
things, I contend they would best be added there, not in a fork of it.
Note how &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cffi&lt;/span&gt;&lt;/code&gt; &lt;strong&gt;have&lt;/strong&gt; been added. When I created
bindings for Ada code (C exports) to Python, it was so easy to do that
in pure Python with ctypes. I so much enjoyed that.&lt;/p&gt;
&lt;p&gt;So, slow bindings are in my view really easy to create with plain Python
now. Somebody ought to make a “.h” to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cffi&lt;/span&gt;&lt;/code&gt; declarations
converter, once they are really faster to use (possibly due to Nuitka).
For Nuitka it should be possible to accelerate these into direct calls
and accesses. At which point, mixing generated C code and C include
statements, will just be what it is, a source of bugs that Nuitka won’t
have.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Further down, I will give examples of why I think that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cdef&lt;/span&gt;&lt;/code&gt; is
inferior to plain Python, even from a practical point of view.&lt;/p&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="lack-of-interpreter-is-bad"&gt;
&lt;h2&gt;Lack of Interpreter is bad&lt;/h2&gt;
&lt;p&gt;Static compilation vs. interpretation as a discussion has little merits
to me. I find it totally obvious that you don’t need static compilation,
but 2 other things:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;You may need interpretation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And may need speed.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To me static code analysis and compilation are means to achieve that
speed, but not intended to remove interpretation, e.g. plugins need to
still work, no matter how deep the go.&lt;/p&gt;
&lt;p&gt;For Cython syntax there is no interpreter, is there? That makes it loose
an important point. So it has to have another reason for using it, and
that would be speed and probably convenience. Now suppose Nuitka takes
over with these benefits, what would it be left with? Right. Nothing. At
all. Well, of course legacy users.&lt;/p&gt;
&lt;p&gt;The orinal sin fall of PyRex - that is now Cython - is nothing that
Nuitka should repeat.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="no-lock-in"&gt;
&lt;h2&gt;No Lock-in&lt;/h2&gt;
&lt;p&gt;The Cython language is so underspecified, I doubt anybody could make a
compatible implementation. Should you choose to use it, you will become
locked in. That means, if Cython breaks or won’t work to begin with, you
are stuck.&lt;/p&gt;
&lt;p&gt;That situation I totally despise. It seems an unnecessary risk to take.
Not only, if your program does not work, you can’t just try another
compiler. You also will never really know, if it’s either your fault or
Cython’s fault until you do know, whose fault it is. Find yourself
playing with removing, adding, or re-phrasing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cdef&lt;/span&gt;&lt;/code&gt; statements, until
things work.&lt;/p&gt;
&lt;p&gt;Common. I would rather use PyPy or anything else, that can be checked
with CPython. Should I ever encounter a bug with it, I can try CPython,
and narrow down with it. Or I can try Jython, IronPython, or low and
behold, Nuitka.&lt;/p&gt;
&lt;p&gt;I think, this totally makes it obvious, that static compilation of a
non-Python language has no point to people with Python code.&lt;/p&gt;
&lt;p&gt;What I will always admit, is that Cython is (currently) the best way to
create fast bindings, because Nuitka is not ready yet. But from my point
of view, Cython has no point long term if a viable replacement that is
Pythonic exists.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="python-alone-is-a-point"&gt;
&lt;h2&gt;Python alone is a point&lt;/h2&gt;
&lt;p&gt;So, if you leave out static compilation vs. interpretation and JIT
compilation, what would be the difference between PyPy and Nuitka? Well,
obviously PyPy people are a lot cooler and cleverer. Their design is
really inspiring and impressive. My design and whole approach to Nuitka
is totally boring in comparison.&lt;/p&gt;
&lt;p&gt;But from a practical standpoint, is there any difference? What is the
difference between Jython and PyPy? The target VM it is. PyPy’s or
Java’s. And performance it is, of course.&lt;/p&gt;
&lt;p&gt;So, with Python implementations all being similar, and just differing in
targets, and performances, do they all have no point? I believe taken to
the logical conclusion, that is what Stefan suggests. I of course think
that PyPy, Nuitka, and Jython have have as much of a point, as CPython
does.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="type-annotations-done-right"&gt;
&lt;h2&gt;Type Annotations done right&lt;/h2&gt;
&lt;p&gt;And just for fun. This is making up a use cases of type annotations:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;plong&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;long&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;python_version&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;


&lt;span class="nd"&gt;@hints&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plong&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;plong&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;some_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Notice how &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;plong&lt;/span&gt;&lt;/code&gt; depends on an expression, that may become known
during compile time or not. Should that turn out to be not possible,
Nuitka can always generate code for both branches and branch when
called.&lt;/p&gt;
&lt;p&gt;Or more complex and useful like this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;guess_signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;types&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;emit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getargnames&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;l&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;f&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;i&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;hints&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Unknown type &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;hints&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;many_hints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Won&amp;#39;t raise exception.&lt;/span&gt;
    &lt;span class="n"&gt;hints&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;doesnot_raise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Signature to be inferred by conventions&lt;/span&gt;
    &lt;span class="n"&gt;guess_signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# No side effects&lt;/span&gt;
    &lt;span class="n"&gt;hints&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nd"&gt;@many_hints&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;some_func1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;


&lt;span class="nd"&gt;@many_hints&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;some_func2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;


&lt;span class="nd"&gt;@many_hints&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;some_func3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is just a rough sketch, but hopefully you get the idea. Do this
with Cython, can you?&lt;/p&gt;
&lt;p&gt;The hints can be put into decorators, which may be discovered as
inlinable, which then see more inlines. For this to work best, the loop
over the compile time constant code object, needs to be unrolled, but
that appears quite possible.&lt;/p&gt;
&lt;p&gt;The signatures can therefore be done fully automatic. One could use
prefix notation to indicate types.&lt;/p&gt;
&lt;p&gt;Another way would put fixed types for certain variable names. In Nuitka
code, “node”, “code”, “context”, etc. have always the same types. I
suspect many programs are the same, and it would be sweet, if you could
plug something in and check such types throughout all of the package.&lt;/p&gt;
&lt;p&gt;And then, what do you do then? Well, you can inspect these hints at run
time as well, they work with CPython as well (though they won’t make
things faster, only will that find errors in your program), they will
even work with PyPy, or at least not harm it. It will nicely JIT them
away I suppose.&lt;/p&gt;
&lt;p&gt;Your IDE will like the code. syntax highlighting, auto indent will work.
With every Python IDE. PyLint will find the bugs I made in that code up
there. And Nuitka will compile it and benefit from the hints.&lt;/p&gt;
&lt;p&gt;My point here really is, that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cdef&lt;/span&gt;&lt;/code&gt; is not flexible, not standard,
not portable. It should die. It totally is anti-Pythonic to me.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="elsewhere"&gt;
&lt;h2&gt;Elsewhere&lt;/h2&gt;
&lt;p&gt;In Java land, people compile to machine code as well. They probably also
- like stupid me - didn’t understand that static compilation would have
no point. Why do they do it? Why am I using compiled binaries done with
their compiler then?&lt;/p&gt;
&lt;p&gt;And why didn’t they take the chance to introduce ubercool &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cdef&lt;/span&gt;&lt;/code&gt;
a-likes while doing it? They probably just didn’t know better, did they?&lt;/p&gt;
&lt;p&gt;No seriously. A compiler is just a compiler. It takes a source code in a
language and turns it into a package to execute. That may be a required
or an optional step. I prefer optional for development turn around. It
should try and make code execute as fast as it can. But it should not
change the language. With Cython I have to compile. With Nuitka I could.&lt;/p&gt;
&lt;p&gt;In fact, I would be hard pressed to find another example of a compiler
that extends the interpreted language compiled, just so there is a point
in having it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Nuitka has a point. On top of that I enjoy doing it. It’s great to have
the time to do this thing in the correct way.&lt;/p&gt;
&lt;p&gt;So far, things worked out pretty well. My earlier experimentations with
type inference had shown some promise. The “value friends” thing, and
the whole plan, appears relatively sound, but likely is in need of an
update. I will work on it in december. Up to now, and even right now I
worked on re-formulations, that should have made it possible to get more
release ready effects from this.&lt;/p&gt;
&lt;p&gt;When I say correct way, I mean this. When I noticed that type inference
was harder than it should be, I could take the time and re-architecture
things so that it will be simpler. To me that is fun. This being my
spare time allows me to do things this efficiently. That’s not an
excuse, it’s a fact that explains my approach. It doesn’t mean it makes
less sense, not at all.&lt;/p&gt;
&lt;p&gt;As for language compatibility, there is more progress with Python3. I am
currently changing the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;class&lt;/span&gt;&lt;/code&gt; re-formulations for Python2 and Python3
(they need totally different ones due to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metaclass&lt;/span&gt;&lt;/code&gt; changes) and then
“test_desc.py” should pass with it too, which will be a huge achievement
in that domain. I will do a post on that later.&lt;/p&gt;
&lt;p&gt;Then infrastructure, should complete the valgrind based benchmark
automatism. Numbers will become more important from now on. It starts to
make sense to observe them. This is not entirely as fun. But with
improving numbers, it will be good to show off.&lt;/p&gt;
&lt;p&gt;And of course, I am going to document some more. The testing strategy of
Nuitka is worth a look, because it’s totally different from everything
else people normally do.&lt;/p&gt;
&lt;p&gt;Anyway. I am not a big fan of controversy. I respect Cython for all it
achieved. I do want to go where it fails to achieve. I should not have
to justify that, it’s actually quite obvious, isn’t it?&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/static-compilation-that-is-the-point.html"/>
    <summary>In a recent post, Stefan Behnel questioned the point of static
compilation and suggests that in order to be useful, a static compiler
needs to add something on top.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-12-02T12:23:32+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0325.html</id>
    <title>Nuitka Release 0.3.25</title>
    <updated>2012-11-11T16:29:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-25"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release brings about changes on all fronts, bug fixes, new
features. Also very importantly Nuitka no longer uses C++11 for its
code, but mere C++03. There is new re-formulation work, and re-factoring
of functions.&lt;/p&gt;
&lt;p&gt;But the most important part is this: Mercurial unit tests are working.
Nearly. With the usual disclaimer of me being wrong, all remaining
errors are errors of the test, or minor things. Hope is that these unit
tests can be added as release tests to Nuitka. And once that is done,
the next big Python application can come.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Local variables were released when an exception was raised that
escaped the local function. They should only be released, after
another exception was raised somewhere.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Identifiers of nested tuples and lists could collide.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,),&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Both tuples had the same name previously, not the end of the tuple is
marked too. Fixed in 0.3.24.1 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; when used read-only in modules in packages was
optimized to a string value that didn’t contain the package name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exceptions set when entering compiled functions were unset at
function exit.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compiled frames support. Before, Nuitka was creating frames with the
standard CPython C/API functions, and tried its best to cache them.
This involved some difficulties, but as it turns out, it is actually
possible to instead provide a compatible type of our own, that we
have full control over.&lt;/p&gt;
&lt;p&gt;This will become the base of enhanced compatibility. Keeping
references to local variables attached to exception tracebacks is
something we may be able to solve now.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced Python3 support, added support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nonlocal&lt;/span&gt;&lt;/code&gt; declarations
and many small corrections for it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Writable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__defaults__&lt;/span&gt;&lt;/code&gt; attribute for compiled functions, actually
changes the default value used at call time. Not supported is
changing the amount of default parameters.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Keep the functions along with the module and added “FunctionRef” node
kind to point to them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reformulated &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; operators with the conditional
expression construct which makes the “short-circuit” branch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Access &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;self&lt;/span&gt;&lt;/code&gt; in methods from the compiled function object instead
of pointer to context object, making it possible to access the
function object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed “OverflowCheck” module and its usage, avoids one useless scan
per function to determine the need for “locals dictionary”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make “compileTree” of “MainControl” module to only do what the name
says and moved the rest out, making the top level control clearer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t export module entry points when building executable and not
modules. These exports cause MinGW and MSVC compilers to create
export libraries.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;More efficient code for conditional expressions in conditions:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;See above, this code is now the typical pattern for each &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt;, so this was much needed now.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The remaining uses of C++11 have been removed. Code generated with
Nuitka and complementary C++ code now compile with standard C++03
compilers. This lowers the Nuitka requirements and enables at least
g++ 4.4 to work with Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The usages of the GNU extension operation &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;?:&lt;/span&gt; &lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt; have replaced
with standard C++ constructs. This is needed to support MSVC which
doesn’t have this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added examples for the typical use cases to the &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User Manual&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “compare_with_cpython” script has gained an option to immediately
remove the Nuitka outputs (build directory and binary) if successful.
Also the temporary files are now put under “/var/tmp” if available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debian package improvements, registering with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doc-base&lt;/span&gt;&lt;/code&gt; the &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User
Manual&lt;/a&gt; so it is easier
to discover. Also suggest &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;mingw32&lt;/span&gt;&lt;/code&gt; package which provides the
cross compiler to Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Partial support for MSVC (Visual Studio 2008 to be exact, the version
that works with CPython2.6 and CPython2.7).&lt;/p&gt;
&lt;p&gt;All basic tests that do not use generators are working now, but those
will currently cause crashes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renamed the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--g++-only&lt;/span&gt;&lt;/code&gt; option to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--c++-only&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The old name is no longer correct after clang and MSVC have gained
support, and it could be misunderstood to influence compiler
selection, rather than causing the C++ source code to not be updated,
so manual changes will the used.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Catch exceptions for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; only
where needed for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; and loop constructs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added CPython3.2 test suite as “tests/CPython32” from 3.2.3 and run
it with CPython2.7 to check that Nuitka gives compatible error
messages. It is not expected to pass yet on Python3.2, but work will
be done towards this goal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make CPython2.7 test suite runner also execute the generated
“doctest” modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enabled tests for default parameters and their reference counts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release marks an important point. The compiled frames are exciting
new technology, that will allow even better integration with CPython,
while improving speed. Lowering the requirements to C++03 means, we will
become usable on Android and with MSVC, which will make adoption of
Nuitka on Windows easier for many.&lt;/p&gt;
&lt;p&gt;Structurally the outstanding part is the function as references cleanup.
This was a blocker for value propagation, because now functions
references can be copied, whereas previously this was duplicating the
whole function body, which didn’t work, and wasn’t acceptable. Now, work
can resume in this domain.&lt;/p&gt;
&lt;p&gt;Also very exciting when it comes to optimization is the remove of
special code for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; operators, as these are now only
mere conditional expressions. Again, this will make value propagation
easier with two special cases less.&lt;/p&gt;
&lt;p&gt;And then of course, with Mercurial unit tests running compiled with
Nuitka, an important milestone has been hit.&lt;/p&gt;
&lt;p&gt;For a while now, the focus will be on completing Python3 support, XML
based optimization regression tests, benchmarks, and other open ends.
Once that is done, and more certainty about Mercurial tests support, I
may call it a 0.4 and start with local type inference for actual speed
gains.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0325.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-11-11T16:29:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/letting-go-of-c11.html</id>
    <title>Letting go of C++11</title>
    <updated>2012-10-27T08:59:07+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;p&gt;How Nuitka came to use C++11 and then stop it.&lt;/p&gt;
&lt;section id="letting-go-of-c-11"&gt;

&lt;p&gt;This post is about Nuitka the Python compiler started out using C++0x
which is now C++11, and then chose to stop it.&lt;/p&gt;
&lt;section id="in-the-beginning"&gt;
&lt;h2&gt;In the Beginning&lt;/h2&gt;
&lt;p&gt;Very early on, when I considered how to generate code from the node
tree, in a way, that mistakes should practically be impossible to make,
I made the fundamental decision, that every Python expression, which
produces temporary variables, should become an expression in the
generated code too.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;That is my choice, I think it keeps code generation more simple, and
easier to understand. There may come a separate post about how that
played out.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;That decision meant some trouble. Certain things were not easy, but
generally, it was achievable for g++ relatively quickly, and then lots
of helper functions would be needed. Think of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MAKE_TUPLE&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MAKE_DICT&lt;/span&gt;&lt;/code&gt;, but also other stuff needed that. Calling a Python
built-in with variable number of parameters e.g. could be implemented
that way easily.&lt;/p&gt;
&lt;p&gt;Other nice things were &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;enum&lt;/span&gt;&lt;/code&gt; classes, and generally good stuff. It
was really quick to get Nuitka code generation off the ground this way.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="reality-strikes"&gt;
&lt;h2&gt;Reality Strikes&lt;/h2&gt;
&lt;p&gt;But then, as time went on, I found that the order of evaluation was
becoming an issue. It became apparent that for more and more things, I
needed to reverse it, so it works. Porting to ARM, it then became clear,
that it needs to be the other way around for that platform. And checking
out clang, which is also a C++11 compiler, I noticed, this one yet uses
a different one.&lt;/p&gt;
&lt;p&gt;So, for normal functions, I found a solution that involves the
pre-processor to reverse or not, &lt;em&gt;both&lt;/em&gt; function definition and call
sites, and then it is already correct.&lt;/p&gt;
&lt;p&gt;This of course, doesn’t work for C++11 variadic functions. So, there
came a point, where I had to realize, that each of its uses was more or
less causing evaluation order bugs. So that most of their uses were
already removed. And so I basically knew they couldn’t stay that way.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="other-features"&gt;
&lt;h2&gt;Other Features&lt;/h2&gt;
&lt;p&gt;Also, things I initially assumed, e.g. that lambda functions of C++11
may prove useful, or even “auto”, didn’t turn out to be true. There
seemingly is a wealth of new features, besides variadic templates that I
didn’t see how Nuitka would benefit from it at all.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="new-wishes"&gt;
&lt;h2&gt;New Wishes&lt;/h2&gt;
&lt;p&gt;Then, at Europython, I realized, that Android is still stuck with
g++-4.4 and as such, that an important target platform will be
unavailable to me. This platform will become even more important, as I
intend to buy an device now.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="biting-it"&gt;
&lt;h2&gt;Biting it&lt;/h2&gt;
&lt;p&gt;So what I did, was to remove all variadic functions and instead generate
code for them as necessary. I just need to trace the used argument
counts, and then provide those, simple enough.&lt;/p&gt;
&lt;p&gt;Also, other things like deleted copy constructors, and so on, I had to
give up on these a bit.&lt;/p&gt;
&lt;p&gt;This change was probably suited to remove subtle evaluation order
problems, although I don’t recall seeing them.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="the-present"&gt;
&lt;h2&gt;The Present&lt;/h2&gt;
&lt;p&gt;The current stable release still requires C++11, but the next release
will work on g++-4.4 and compiles fine with MSVC from Visual Studio
2008, although at this time, there is still the issue of generators not
working yet, but I believe that ought to be solvable.&lt;/p&gt;
&lt;p&gt;The new requirement is only C++03, which means, there is a good chance
that supporting Android will become feasible. I know there is interest
from App developers, because there, even the relatively unimportant 2x
speedup, that Nuitka might give for some code, may matter.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;So that is a detour, I have taken, expanding the base of Nuitka even
further. I felt, this was important enough to write down the history
part of it.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/letting-go-of-c11.html"/>
    <summary>How Nuitka came to use C++11 and then stop it.</summary>
    <category term="Android" label="Android"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="Windows" label="Windows"/>
    <category term="compiler" label="compiler"/>
    <published>2012-10-27T08:59:07+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0324.html</id>
    <title>Nuitka Release 0.3.24</title>
    <updated>2012-08-18T21:30:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-24"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains progress on many fronts, except performance.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Then there is a promised new feature that allows to compile whole
packages.&lt;/p&gt;
&lt;p&gt;Also there is more Python3 compatibility, the CPython 3.2 test suite now
succeeds up to “test_builtin.py”, where it finds that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; doesn’t
support the new parameters it has gained, future releases will improve
on this.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The compiled method type can now be used with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;copy&lt;/span&gt;&lt;/code&gt; module. That
means, instances with methods can now be copied too. Fixed in
0.3.23.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assert&lt;/span&gt;&lt;/code&gt; statement as of Python2.7 creates the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AssertionError&lt;/span&gt;&lt;/code&gt; 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. Fixed in 0.3.23.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sets written like this didn’t work unless they were predicted at
compile time:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This apparently rarely used Python2.7 syntax didn’t have code
generation yet and crashed the compiler. Fixed in 0.3.23.1 already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Python2, the default encoding for source files is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ascii&lt;/span&gt;&lt;/code&gt;, and
it is now enforced by Nuitka as well, with the same &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Corner cases of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statements with nested functions now give
proper &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; exceptions under Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statement with a tuple of length 1 as argument, now also
gives a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TypeError&lt;/span&gt;&lt;/code&gt; exception under Python2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Python2, the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; of a closure variable is a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support creating compiled packages. If you give Nuitka a
directory with an “__init__.py” file, it will compile that package
into a “.so” file. Adding the package contents with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-dir&lt;/span&gt;&lt;/code&gt;
allows to compile complete packages now. Later there will be a
cleaner interface likely, where the later is automatic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for providing directories as main programs. It’s OK if
they contain a “__main__.py” file, then it’s used instead, otherwise
give compatible error message.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for optimizing the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; built-in. It was already
working correctly, but not optimized on CPython2. But for CPython3,
the variant without any arguments required dedicated code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for optimizing the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; built-in under Python2.
It was already working, but will become the basis for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;
built-in of Python3 in future releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Python3, lots of compatibility work has been done. The Unicode
issues appear to be ironed out now. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; of closure variables
is allowed and supported now. Built-ins like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ord&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;chr&lt;/span&gt;&lt;/code&gt; work
more correctly and attributes are now interned strings, so that
monkey patching classes works.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Migrated “bin/make-dependency-graph.sh” to Python as
“misc/make-dependency-graph.py” and made a more portable and powerful
that way.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;And it creates SVG files and no longer PostScript as the first one is
more easily rendered these days.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed the “misc/gist” git sub-module, which was previously used by
“misc/make-doc.py” to generate HTML from &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User Manual&lt;/a&gt; and &lt;a class="reference external" href="https://nuitka.net/doc/developer-manual.html"&gt;Developer Manual&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These are now done with Nikola, which is much better at it and it
integrates with the web site.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lots of formatting improvements to the change log, and manuals:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Marking identifiers with better suited ReStructured Text markup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added links to the bug tracker all Issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified wordings, quotation, across the documents.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;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 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NULL&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Also the assignment of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__module__&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__doc__&lt;/span&gt;&lt;/code&gt; in these has
become visible in the node tree, allowing their proper optimization.&lt;/p&gt;
&lt;p&gt;These re-formulation changes allowed to remove all sorts of special
treatment of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;class&lt;/span&gt;&lt;/code&gt; code in the code generation phase, making
things a lot simpler.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There was still a declaration of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PRINT_ITEMS&lt;/span&gt;&lt;/code&gt; and uses of it, but
no definition of it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code generation for “main” module and “other” modules are now merged,
and no longer special.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Updated CPython2.6 test suite “tests/CPython26” to 2.6.8, adding
tests for recent bug fixes in CPython. No changes to Nuitka were
needed in order to pass, which is always good news.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added CPython2.7 test suite as “tests/CPython27” from 2.7.3, making
it public for the first time. Previously a private copy of some age,
with many no longer needed changes had been used by me. Now it is up
to par with what was done before for “tests/CPython26”, so this
pending action is finally done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover Python2 syntax error of having a function with
closure variables nested inside a function that is an overflow
function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test “BuiltinSuper” to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;super&lt;/span&gt;&lt;/code&gt; usage details.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; on nested scope as syntax error.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; with a tuple argument of length 1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;barry_as_FLUFL&lt;/span&gt;&lt;/code&gt; future import to work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed “Unicode” from known error cases for CPython3.2, it’s now
working.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Generally, as usual, a focus has been laid on correctness. This is also
the first time, I am release with a known bug though, one which I
believe now, may be the root cause of the mercurial tests not yet
passing.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;As usual, please check it out, and let me know how you fare.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0324.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-08-18T21:30:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0323.html</id>
    <title>Nuitka Release 0.3.23</title>
    <updated>2012-06-30T23:40:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-23"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is the one that completes the Nuitka “sun rise phase”.&lt;/p&gt;
&lt;p&gt;All of Nuitka is now released under &lt;a class="reference external" href="http://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License 2.0&lt;/a&gt; which is a very liberal
license, and compatible with basically all Free Software licenses there
are. It’s only asking to allow integration, of what you send back, and
patent grants for the code.&lt;/p&gt;
&lt;p&gt;In the first phase of Nuitka development, I wanted to keep control over
Nuitka, so it wouldn’t repeat mistakes of other projects. This is no
longer a concern for me, it’s not going to happen anymore.&lt;/p&gt;
&lt;p&gt;I would like to thank Debian Legal team, for originally bringing to my
attention, that this license will be better suited, than any copyright
assignment could be.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The compiled functions could not be used with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multiprocessing&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;copy.copy&lt;/span&gt;&lt;/code&gt;. Fixed in 0.3.22.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In-place operations for slices with not both bounds specified crashed
the compiler. Fixed in 0.3.22.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cyclic imports could trigger an endless loop, because module import
expressions became the parent of the imported module object. Fixed in
0.3.22.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modules named &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;proc&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func&lt;/span&gt;&lt;/code&gt; could not be compiled to modules
or embedded due to a collision with identifiers of CPython2.7
includes. Fixed in 0.3.22.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The function copying fix also makes pickling of compiled functions
available. As it is the case for non-compiled functions in CPython,
no code objects are stored, only names of module level variables.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Using the Apache License 2.0 for all of Nuitka now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speedcenter has been re-activated, but is not yet having a lot of
benchmarks yet, subject to change.&lt;/p&gt;
&lt;div class="admonition-update admonition"&gt;
&lt;p class="admonition-title"&gt;Update&lt;/p&gt;
&lt;p&gt;We have given up on this version of speedcenter meanwhile, and
generate static pages with graphs instead. We can this still
speedcenter.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Changed the “CPython26” tests to no longer disable the parts that
relied on copying of functions to work as that is now supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Extended in-place assignment tests to cover error cases of we had
issues with.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Extended compile library test to also try and compile the path where
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;numpy&lt;/span&gt;&lt;/code&gt; lives. This is apparently another path, where Debian
installs some modules, and compiling this would have revealed issues
sooner.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The release contains bug fixes, and the huge step of changing &lt;a class="reference external" href="http://www.apache.org/licenses/LICENSE-2.0"&gt;the
license&lt;/a&gt;. It is made in
preparation to &lt;a class="reference external" href="https://ep2012.europython.eu"&gt;PyCON EU&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0323.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-06-30T23:40:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/speedcenter-is-back.html</id>
    <title>Nuitka Speedcenter is back</title>
    <updated>2012-06-30T16:39:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-speedcenter-is-back"&gt;

&lt;p&gt;Once a long time ago, I was benchmarking Nuitka more often. Check &lt;a class="reference external" href="/pages/overview.html"&gt;“What
is Nuitka?”&lt;/a&gt; in case you don’t know what it is.&lt;/p&gt;
&lt;section id="problem"&gt;
&lt;h2&gt;Problem&lt;/h2&gt;
&lt;p&gt;And I was considering the use of codespeed, and had some data online.
But ultimately, it got discontinued. This has 3 reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Moved the website to a dedicated machine, which broke the previous
install.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Controlling which data is used for display was hard and not
satisfactory.&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p&gt;For example, I didn’t want to have to commit and push, just to let
the benchmarks run.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And I wanted to be able to re-run benchmarks with newer compiler,
even newer Python, but old Nuitka. Using g++ 4.6 over g++ 4.5
should not impact the data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It turned out to be a nightmare to migrate to newer codespeed
versions. I found myself starting from empty database - over and
over.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many things were not supported.&lt;/p&gt;
&lt;p&gt;For example, I would want to collect all PyBench results, but only
publish those who are expressive. That seemed difficult to
achieve.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Benchmarks of Nuitka are not yet useful&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Nuitka was not yet doing type inference&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most of the work was aimed at correctness, and effectively was
often degrading performance even if only temporary. Seeing it
wouldn’t have been too motivating.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="solution"&gt;
&lt;h2&gt;Solution&lt;/h2&gt;
&lt;p&gt;I have simply created a small wrapper:&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p&gt;Small script to run benchmarks and collect data.&lt;/p&gt;
&lt;p&gt;It checks out Nuitka in all versions in a playground, and then runs
defined benchmarks, with valgrind, etc. taking exe sizes, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data is stored in local sqlite databases.&lt;/p&gt;
&lt;p&gt;I have a database per machine, i.e. a distributed repository, where I
collect information. That works for me, and will allow me to compare
different kinds of machines.&lt;/p&gt;
&lt;p&gt;The advantage is that I have no risk of data loss anymore, and no
issues and difficulty with poor interfaces to replace existing data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data is merged on one machine, and then pushed.&lt;/p&gt;
&lt;p&gt;That allows me to inspect the changes before publishing them. It
allows me to play with local commits, branches, with information that
will go away. I can then push when I choose to.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That integrates better with my work flow. It allows me to retro-fit
benchmarks results on the machine and to be tool independent.&lt;/p&gt;
&lt;p&gt;In principle, I could publish the data in other forms as well, and I
likely will. Making tables of e.g. PyBench results seems like one
application. Recently, I have worked with Nikola, and could also imagine
to integrate Codespeed graph functionality (which is apparently all I
want) to there.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/speedcenter-is-back.html"/>
    <summary>Once a long time ago, I was benchmarking Nuitka more often. Check “What
is Nuitka?” in case you don’t know what it is.</summary>
    <category term="Nikola" label="Nikola"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="benchmark" label="benchmark"/>
    <category term="compiler" label="compiler"/>
    <published>2012-06-30T16:39:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0322.html</id>
    <title>Nuitka Release 0.3.22</title>
    <updated>2012-05-13T13:17:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-22"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is a continuation of the trend of previous releases, and
added more re-formulations of Python that lower the burden on code
generation and optimization.&lt;/p&gt;
&lt;p&gt;It also improves Python3 support substantially. In fact this is the
first release to not only run itself under Python3, but for Nuitka to
&lt;em&gt;compile itself&lt;/em&gt; with Nuitka under Python3, which previously only worked
for Python2. For the common language subset, it’s quite fine now.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;List contractions produced extra entries on the call stack, after
they became functions, these are no more existent. That was made
possible my making frame stack entries an optional element in the
node tree, left out for list contractions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calling a compiled function in an exception handler cleared the
exception on return, it no longer does that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reference counter handling with generator &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw&lt;/span&gt;&lt;/code&gt; method is now
correct.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A module “builtins” conflicted with the handling of the Python
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;builtins&lt;/span&gt;&lt;/code&gt; module. Those now use different identifiers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;New &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metaclass&lt;/span&gt;&lt;/code&gt; syntax for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;class&lt;/span&gt;&lt;/code&gt; statement works, and the
old &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__metaclass__&lt;/span&gt;&lt;/code&gt; attribute is properly ignored.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Metaclass syntax in Python3, illegal in Python2&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;X&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;metaclass&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Metaclass syntax in Python2, no effect in Python3&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;X&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;__metaclass__&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;The way to make a use of a metaclass in a portable way, is to
create a based class that has it and then inherit from it. Sad,
isn’ it. Surely, the support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__metaclass__&lt;/span&gt;&lt;/code&gt; could still
live.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# For Python2/3 compatible source, we create a base class that has the&lt;/span&gt;
&lt;span class="c1"&gt;# metaclass used and doesn&amp;#39;t require making a choice.&lt;/span&gt;

&lt;span class="n"&gt;CPythonNodeMetaClassBase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NodeCheckMetaClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;CPythonNodeMetaClassBase&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="p"&gt;,),&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--dump-xml&lt;/span&gt;&lt;/code&gt; option works with Nuitka running under Python3.
This was not previously supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3 now also has compatible parameter errors and compatible
exception error messages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3 has changed scope rules for list contractions (assignments
don’t affect outside values) and this is now respected as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3 has gained support for recursive programs and stand alone
extension modules, these are now both possible as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Avoid frame stack entries for functions that cannot raise exceptions,
i.e. where they would not be used.&lt;/p&gt;
&lt;p&gt;This avoids overhead for the very simple functions. And example of
this can be seen here:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;simple&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;len&lt;/span&gt;&lt;/code&gt; built-in for non-constant, but known length values.&lt;/p&gt;
&lt;p&gt;An example can be seen here:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# The range isn&amp;#39;t constructed at compile time, but we still know its&lt;/span&gt;
&lt;span class="c1"&gt;# length.&lt;/span&gt;
&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10000000&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# The string isn&amp;#39;t constructed at compile time, but we still know its&lt;/span&gt;
&lt;span class="c1"&gt;# length.&lt;/span&gt;
&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# The tuple isn&amp;#39;t constructed, instead it&amp;#39;s known length is used, and&lt;/span&gt;
&lt;span class="c1"&gt;# side effects are maintained.&lt;/span&gt;
&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This new optimization applies to all kinds of container creations and
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt; built-in initially.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize conditions for non-constant, but known truth values.&lt;/p&gt;
&lt;p&gt;At this time, known truth values of non-constants means &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range&lt;/span&gt;&lt;/code&gt;
built-in calls with know size and container creations.&lt;/p&gt;
&lt;p&gt;An example can be seen here:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,):&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;In Branch&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It’s clear, that the tuple will be true, we just need to maintain the
side effect, which we do.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; operators for known truth values.&lt;/p&gt;
&lt;p&gt;See above for what has known truth values currently. This will be
most useful to predict conditions that need not be evaluated at all
due to short circuit nature, and to avoid checking against constant
values. Previously this could not be optimized, but now it can:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# The access and call to &amp;quot;something()&amp;quot; cannot possibly happen&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Can be replaced with &amp;quot;something()&amp;quot;, as &amp;quot;1&amp;quot; is true. If it had a side&lt;/span&gt;
&lt;span class="c1"&gt;# effect, it would be maintained.&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# The access and call to &amp;quot;something()&amp;quot; cannot possibly happen, the value&lt;/span&gt;
&lt;span class="c1"&gt;# is already decided, it&amp;#39;s &amp;quot;1&amp;quot;.&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Can be replaced with &amp;quot;something()&amp;quot;, as &amp;quot;0&amp;quot; is false. If it had a side&lt;/span&gt;
&lt;span class="c1"&gt;# effect, it would be maintained.&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize print arguments to become strings.&lt;/p&gt;
&lt;p&gt;The arguments to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt; statements are now converted to strings at
compile time if possible.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;becomes:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Combine print arguments to single ones.&lt;/p&gt;
&lt;p&gt;When multiple strings are printed, these are now combined.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;1+1=&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;becomes:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;1+1= 2&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Enhanced Python3 support, enabling support for most basic tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check files with PyLint in deterministic (alphabetical) order.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Frame stack entries are now part of the node tree instead of part of
the template for every function, generator, class or module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;else&lt;/span&gt;&lt;/code&gt; has been re-formulated to use an
indicator variable visible in the node tree, that tells if a handler
has been executed or not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Side effects are now a dedicated node, used in several optimization
to maintain the effect of an expression with known value.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Expanded and adapted basic tests to work for Python3 as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added reference count tests for generator functions &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;send&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;close&lt;/span&gt;&lt;/code&gt; methods.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover calling a function with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt; in an exception
handler twice. No test was previously doing that.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This release offers enhanced compatibility with Python3, as well as the
solution to many structural problems. Calculating lengths of large
non-constant values at compile time, is technically a break through, as
is avoiding lengthy calculations. The frame guards as nodes is a huge
improvement, making that costly operational possible to be optimized
away.&lt;/p&gt;
&lt;p&gt;There still is more work ahead, before value propagation will be safe
enough to enable, but we are seeing the glimpse of it already. Not for
long, and looking at numbers will make sense.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0322.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-05-13T13:17:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0321.html</id>
    <title>Nuitka Release 0.3.21</title>
    <updated>2012-04-13T10:19:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-21"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This releases contains some really major enhancements, all heading
towards enabling value propagation inside Nuitka. Assignments of all
forms are now all simple and explicit, and as a result, now it will be
easy to start tracking them.&lt;/p&gt;
&lt;p&gt;Contractions have become functions internally, with statements use
temporary variables, complex unpacking statement were reduced to more
simple ones, etc.&lt;/p&gt;
&lt;p&gt;Also there are the usual few small bug fixes, and a bunch of
organizational improvements, that make the release complete.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The built-in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;next&lt;/span&gt;&lt;/code&gt; could causes a program crash when iterating
past the end of an iterator. Fixed in 0.3.20.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;set&lt;/span&gt;&lt;/code&gt; constants could cause a compiler error, as that type was
not considered in the “mutable” check yet. Fixed in 0.3.20.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance regression. Optimize expression for exception types
caught as well again, this was lost in last release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Functions that contain &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt;, are supposed to have a writable
locals. But when removing that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statement as part of
optimization, this property of the function could get lost.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The so called “overflow functions” are once again correctly handled.
These once were left behind in some refactoring and had not been
repaired until now. An overflow function is a nested function with an
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; or a star import.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The syntax error for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; outside of a function, was not given,
instead the code returned at run time. Fixed to raise a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; at compile time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Avoid &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt; objects to be created when catching multiple
exception types, instead call exception match check function multiple
times.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removal of dead code following &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt;,
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt;&lt;/code&gt;. Code that follows these statements, or conditional
statements, where all branches end with it.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;These may not actually occur often in actual code, but future
optimization may produce them more frequently, and their removal
may in turn make other possible optimization.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect module variables as “read only” after all writes have been
detected to not be executed as removed. Previously the “read only
indicator” was determined only once and then stayed the same.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expanded conditional statement optimization to detect cases, where
condition is a compile time constant, not just a constant value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize away assignments from a variable to the same variable, they
have no effect. The potential side effect of accessing the variable
is left intact though, so exceptions will be raised still.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;An exception is where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;len&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;len&lt;/span&gt;&lt;/code&gt; actually does have an impact,
because that variable becomes assignable. The “compile itself”
test of Nuitka found that to happen with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; from the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.__past__&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Created Python3 variant of quick &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt; string access, there was
no such thing in the CPython C/API, but we make the distinction in
the source code, so it makes sense to have it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Created an optimized implementation for the built-in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iter&lt;/span&gt;&lt;/code&gt; with 2
parameters as well. This allows for slightly more efficient code to
be created with regards to reference handling, rather than using the
CPython C/API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For all types of variable assigned in the generated code, there are
now methods that accept already taken references or not, and the code
generator picks the optimal variant. This avoids the drop of
references, that e.g. the local variable will insist to take.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t use a “context” object for generator functions (and generator
expressions) that don’t need one. And even if it does to store e.g.
the given parameter values, avoid to have a “common context” if there
is no closure taken. This avoids useless &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;malloc&lt;/span&gt;&lt;/code&gt; calls and speeds
up repeated generator object creation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Changed the Scons build file database to reside in the build
directory as opposed to the current directory, not polluting it
anymore. Thanks for the patch go to Michael H Kent, very much
appreciated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--experimental&lt;/span&gt;&lt;/code&gt; option is no longer available outside of
checkouts of git, and even there not on stable branches (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;master&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hotfix/...&lt;/span&gt;&lt;/code&gt;). It only pollutes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--help&lt;/span&gt;&lt;/code&gt; output as stable
releases have no experimental code options, not even development
version will make a difference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The binary “bin/Nuitka.py” has been removed from the git repository.
It was deprecated a while ago, not part of the distribution and
served no good use, as it was a symbolic link only anyway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-version&lt;/span&gt;&lt;/code&gt; option is applied at Nuitka start time to
re-launch Nuitka with the given Python version, to make sure that the
Python run time used for computations and link time Python versions
are the same. The allowed values are now checked (2.6, 2.7 and 3.2)
and the user gets a nice error with wrong values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--keep-pythonpath&lt;/span&gt;&lt;/code&gt; alias for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--execute-with-pythonpath&lt;/span&gt;&lt;/code&gt;
option, probably easier to remember.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; with clang, so it can also be used to check the
generated code for all warnings, and perform assertions. Didn’t
report anything new.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The contents environment variable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CXX&lt;/span&gt;&lt;/code&gt; determines the default C++
compiler when set, so that checking with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CXX=g++-4.7&lt;/span&gt; &lt;span class="pre"&gt;nuitka-python&lt;/span&gt;
&lt;span class="pre"&gt;...&lt;/span&gt;&lt;/code&gt; has become supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;check-with-pylint&lt;/span&gt;&lt;/code&gt; script now has a real command line option
to control the display of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; items.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Changed complex assignments, i.e. assignments with multiple targets
to such using a temporary variable and multiple simple assignments
instead.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;_tmp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_tmp&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_tmp&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In CPython, when one assignment raises an exception, the whole thing
is aborted, so the complexity of having multiple targets is no more
needed, now that we have temporary variables in a block.&lt;/p&gt;
&lt;p&gt;All that was really needed, was to evaluate the complete source
expression only once, but that made code generation contain ugly
loops that are no more needed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed unpacking assignments to use temporary variables. Code like
this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Is handled more like this:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;_tmp_iter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;_tmp1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_tmp_iter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;_tmp2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_tmp_iter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;finished&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_tmp_iter&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;too many values to unpack&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_tmp1&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_tmp2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In reality, not really &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;next&lt;/span&gt;&lt;/code&gt; is used, as it wouldn’t raise the
correct exception for unpacking, and the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finished&lt;/span&gt;&lt;/code&gt; check is more
condensed into it.&lt;/p&gt;
&lt;p&gt;Generally this cleanup allowed that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AssignTargetTuple&lt;/span&gt;&lt;/code&gt; and
associated code generation was removed, and in the future value
propagation may optimize these &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;next&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iter&lt;/span&gt;&lt;/code&gt; calls away where
possible. At this time, this is not done yet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception handlers assign caught exception value through assignment
statement.&lt;/p&gt;
&lt;p&gt;Previously the code generated for assigning from the caught exception
was not considered part of the handler. It now is the first statement
of an exception handler or not present, this way it may be optimized
as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception handlers now explicitly catch more than one type.&lt;/p&gt;
&lt;p&gt;Catching multiple types worked by merits of the created tuple object
working with the Python C/API function called, but that was not
explicit at all. Now every handler has a tuple of exceptions it
catches, which may only be one, or if None, it’s all.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contractions are now functions as well.&lt;/p&gt;
&lt;p&gt;Contractions (list, dict, and set) are now re-formulated as function
bodies that contain for loops and conditional statements. This
allowed to remove a lot of special code that dealt with them and will
make these easier to understand for optimization and value
propagation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Global is handled during tree building.&lt;/p&gt;
&lt;p&gt;Previously the global statement was its own node, which got removed
during the optimization phase in a dedicated early optimization that
applied its effect, and then removed the node.&lt;/p&gt;
&lt;p&gt;It was determined, that there is no reason to not immediately apply
the effect of the global variable and take closure variables and add
them to the provider of that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;global&lt;/span&gt;&lt;/code&gt; statement, allowing to remove
the node class.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Read only module variable detection integrated to constraint
collection.&lt;/p&gt;
&lt;p&gt;The detection of read only module variables was so far done as a
separate step, which is no more necessary as the constraint
collection tracks the usages of module variables anyway, so this
separate and slow step could be removed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added test to cover order of calls for complex assignments that
unpack, to see that they make a fresh iterator for each part of a
complex assignment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test that unpacks in an exception catch. It worked, due to the
generic handling of assignment targets by Nuitka, and I didn’t even
know it can be done, example:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Unpacking caught exception and unpacked&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Will assign &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a=1&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;b=2&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover return statements on module level and class
level, they both must give syntax errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover exceptions from accessing unassigned global names.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added syntax test to show that star imports do not allow other names
to be imported at the same time as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python3 is now also running the compile itself test successfully.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The progress made towards value propagation and type inference is &lt;em&gt;very&lt;/em&gt;
significant, and makes those appears as if they are achievable.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0321.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-04-13T10:19:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0320.html</id>
    <title>Nuitka Release 0.3.20</title>
    <updated>2012-02-27T22:48:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-20"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This time there are a few bug fixes and some really major cleanups, lots
of new optimization and preparations for more. And then there is a new
compiler clang and a new platform supported. macOS X appears to work
mostly, thanks for the patches from Pete Hunt.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The use of a local variable name as an expression was not covered and
lead to a compiler crash. Totally amazing, but true, nothing in the
test suite of CPython covered this. Fixed in release 0.3.19.1
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of a closure variable name as an expression was not covered
as well. And in this case corrupted the reference count. Fixed in
release 0.3.19.1 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;x&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; attempted to respect &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__all__&lt;/span&gt;&lt;/code&gt; but failed
to do so. Fixed in release 0.3.19.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;x&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; didn’t give a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; when used on
Python3. Fixed in release 0.3.19.2 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The syntax error messages for “global for function argument name” and
“duplicate function argument name” are now identical as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parameter values of generator function could cause compilation errors
when used in the closure of list contractions. Fixed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added support for disabling the console for Windows binaries. Thanks
for the patch go to Michael H Kent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced Python3 support for syntax errors, these are now also
compatible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for macOS X was added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for using the clang compiler was added, it can be enforced
via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--clang&lt;/span&gt;&lt;/code&gt; option. Currently this option is mainly intended to
allow testing the “macOS X” support as good as possible under Linux.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enhanced all optimization that previously worked on “constants” to
work on “compile time constants” instead. A “compile time constant”
can currently also be any form of a built-in name or exception
reference. It is intended to expand this in the future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for built-ins &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bin&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;oct&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;hex&lt;/span&gt;&lt;/code&gt;, which also
can be computed at compile time, if their arguments are compile time
constant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;iter&lt;/span&gt;&lt;/code&gt; built-in in both forms, one and two
arguments. These cannot be computed at compile time, but now will
execute faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;next&lt;/span&gt;&lt;/code&gt; built-in, also in its both forms, one
and two arguments. These also cannot be computed at compile time, but
now will execute faster as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;open&lt;/span&gt;&lt;/code&gt; built-in in all its form. We intend
for future releases to be able to track file opens for including them
into the executable if data files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__debug__&lt;/span&gt;&lt;/code&gt; built-in constant as well. It cannot be
assigned, yet code can determine a mode of operation from it, and
apparently some code does. When compiling the mode is decided.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimize the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Ellipsis&lt;/span&gt;&lt;/code&gt; built-in constant as well. It falls in the
same category as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;True&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;, i.e. names of
built-in constants that a singletons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for anonymous built-in references, i.e. built-ins which
have names that are not normally accessible. An example is
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type(None)&lt;/span&gt;&lt;/code&gt; which is not accessible from anywhere. Other examples
of such names are &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compiled_method_or_function&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Having these as represented internally, and flagged as “compile time
constants”, allows the compiler to make more compile time
optimization and to generate more efficient C++ code for it that
won’t e.g. call the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type&lt;/span&gt;&lt;/code&gt; built-in with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; as an argument.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;All built-in names used in the program are now converted to “built-in
name references” in a first step. Unsupported built-ins like e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;zip&lt;/span&gt;&lt;/code&gt;, for which Nuitka has no own code or understanding yet,
remained as “module variables”, which made access to them slow, and
difficult to recognize.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for module attributes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__doc__&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__package__&lt;/span&gt;&lt;/code&gt; if they are read only. It’s the same as was done
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; so far only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for slices and subscripts of “compile time
constant” values. These will play a more important role, once value
propagation makes them more frequent.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Created a “change log” from the previous release announcements. It’s
as ReStructured Text and converted to PDF for the release as well,
but I chose not to include that in Debian, because it’s so easy to
generate the PDF on that yourself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The posting of release announcements is now prepared by a script that
converts the ReStructured Text to HTML and adds it to Wordpress as a
draft posting or updates it, until it’s release time. Simple, sweet
and elegant.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Split out the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.nodes.Nodes&lt;/span&gt;&lt;/code&gt; module into many topic nodes, so
that there are now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.nodes.BoolNodes&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.nodes.LoopNodes&lt;/span&gt;&lt;/code&gt; to host nodes of similar kinds, so that it
is now cleaner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; statements into their own node kind, and use much
simpler node structures for them. The following blocks are absolutely
the same:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So that’s now represented in the node tree. And even more complex
looking cases, like this one, also the same:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This one gives a different parse tree, but the same bytecode. And so
Nuitka need no longer concern itself with this at all, and can remove
the tuple from the parse tree immediately. That makes them easy to
handle. As you may have noted already, it also means, there is no way
to enforce that two things are deleted or none at all.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turned the function and class builder statements into mere assignment
statements, where defaults and base classes are handled by wrapping
expressions.&lt;/p&gt;
&lt;p&gt;Previously they are also kind of assignment statements too, which is
not needed. Now they were reduced to only handle the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bases&lt;/span&gt;&lt;/code&gt; for
classes and the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;defaults&lt;/span&gt;&lt;/code&gt; for functions and make optional.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refactored the decorator handling to the tree building stage,
presenting them as function calls on “function body expression” or
class body expression”.&lt;/p&gt;
&lt;p&gt;This allowed to remove the special code for decorators from code
generation and C++ templates, making decorations easy subjects for
future optimization, as they practically are now just function calls.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nd"&gt;@some_classdecorator&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nd"&gt;@staticmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It’s just a different form of writing things. Nothing requires the
implementation of decorators, it’s just functions calls with function
bodies before the assignment.&lt;/p&gt;
&lt;p&gt;The following is only similar:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;pass&lt;/span&gt;

    &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;staticmethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="n"&gt;C&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;some_classdecorator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It’s only similar, because the assignment to an intermediate value of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;C&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f&lt;/span&gt;&lt;/code&gt; is not done, and if an exception was raised by the
decoration, that name could persist. For Nuitka, the function and
class body, before having a name, are an expression, and so can of
course be passed to decorators already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The in-place assignments statements are now handled using temporary
variable blocks&lt;/p&gt;
&lt;p&gt;Adding support for scoped temporary variables and references to them,
it was possible to re-formulate in-place assignments expressions as
normal look-ups, in-place operation call and then assignment
statement. This allowed to remove static templates and will yield
even better generated code in the future.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The for loop used to have has a “source” expression as child, and the
iterator over it was only taken at the code generation level, so that
step was therefore invisible to optimization. Moved it to tree
building stage instead, where optimization can work on it then.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tree building now generally allows statement sequences to be &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;
everywhere, and pass statements are immediately eliminated from them
immediately. Empty statement sequences are now forbidden to exist.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved the optimization for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; to compute node of variable
references, where it doesn’t need anything complex to replace with
the constant value if it’s only read.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added new bases classes and mix-in classes dedicated to expressions,
giving a place for some defaults.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made the built-in code more reusable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added some more diagnostic tests about complex assignment and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt;
statements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added syntax test for star import on function level, that must fail
on Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added syntax test for duplicate argument name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added syntax test for global on a function argument name.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The decorator and building changes, the assignment changes, and the node
cleanups are all very important progress for the type inference work,
because they remove special casing the that previously would have been
required. Lambdas and functions now really are the same thing right
after tree building. The in-place assignments are now merely done using
standard assignment code, the built functions and classes are now
assigned to names in assignment statements, much &lt;em&gt;more&lt;/em&gt; consistency
there.&lt;/p&gt;
&lt;p&gt;Yet, even more work will be needed in the same direction. There may e.g.
be work required to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; statements as well. And assignments
will become no more complex than unpacking from a temporary variable.&lt;/p&gt;
&lt;p&gt;For this release, there is only minimal progress on the Python3 front,
despite the syntax support, which is only minuscule progress. The
remaining tasks appear all more or less difficult work that I don’t want
to touch now.&lt;/p&gt;
&lt;p&gt;There are still remaining steps, but we can foresee that a release may
be done that finally actually does type inference and becomes the
effective Python compiler this project is all about.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0320.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-02-27T22:48:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0319.html</id>
    <title>Nuitka Release 0.3.19</title>
    <updated>2012-01-26T20:49:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-19"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This time there are a few bug fixes, major cleanups, more Python3
support, and even new features. A lot things in this are justifying a
new release.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The man pages of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-python&lt;/span&gt;&lt;/code&gt; had no special
layout for the option groups and broken whitespace for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-to&lt;/span&gt;&lt;/code&gt; option. Also &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--g++-only&lt;/span&gt;&lt;/code&gt; was only partially bold.
Released as 0.3.18.1 hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The command line length improvement we made to Scons for Windows was
not portable to Python2.6. Released as 0.3.18.2 hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code to detect already considered packages detection was not portable
to Windows, for one case, there was still a use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;/&lt;/span&gt;&lt;/code&gt; instead of
using a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;joinpath&lt;/span&gt;&lt;/code&gt; call. Released as 0.3.18.3 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A call to the range built-in with no arguments would crash the
compiler, see Released as 0.3.18.4 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility Fix: When rich comparison operators returned false
value other &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt;, for comparison chains, these would not be
used, but &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt; instead, see .&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The support for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; didn’t cover keyword arguments, these
were simply ignored. Fixed, but no warning is given yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;A new option has been added, one can now specify
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-directory&lt;/span&gt;&lt;/code&gt; and Nuitka will attempt to embed these
modules even if not obviously imported. This is not yet working
perfect yet, but will receive future improvements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; built-in of Python3, this enables us
to run one more basic test, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;GlobalStatement.py&lt;/span&gt;&lt;/code&gt; with Python3. The
test &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ExecEval.py&lt;/span&gt;&lt;/code&gt; nearly works now.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The no arguments &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range()&lt;/span&gt;&lt;/code&gt; call now optimized into the static
CPython exception it raises.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parts of comparison chains with constant arguments are now optimized
away.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Simplified the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CPythonExpressionComparison&lt;/span&gt;&lt;/code&gt; node, it now always
has only 2 operands.&lt;/p&gt;
&lt;p&gt;If there are more, the so called “comparison chain”, it’s done via
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; with assignments to temporary variables, which are expressed
by a new node type &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CPythonExpressionTempVariableRef&lt;/span&gt;&lt;/code&gt;. This allowed
to remove &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;expression_temps&lt;/span&gt;&lt;/code&gt; from C++ code templates and
generation, reducing the overall complexity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When executing a module (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--execute&lt;/span&gt;&lt;/code&gt; but not &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--exe&lt;/span&gt;&lt;/code&gt;), no longer
does Nuitka import it into itself, instead a new interpreter is
launched with a fresh environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The calls to the variadic &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MAKE_TUPLE&lt;/span&gt;&lt;/code&gt; were replaced with calls the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MAKE_TUPLExx&lt;/span&gt;&lt;/code&gt; (where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;xx&lt;/span&gt;&lt;/code&gt; is the number of arguments), that are
generated on a as-needed basis. This gives more readable code,
because no &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;EVAL_ORDERED_xx&lt;/span&gt;&lt;/code&gt; is needed at call site anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many node classes have moved to new modules in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.nodes&lt;/span&gt;&lt;/code&gt; and
grouped by theme. That makes them more accessible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The choosing of the debug python has moved from Scons to Nuitka
itself. That way it can respect the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.abiflags&lt;/span&gt;&lt;/code&gt; and works with
Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The replacing of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.py&lt;/span&gt;&lt;/code&gt; in filenames was made more robust. No longer
is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.replace&lt;/span&gt;&lt;/code&gt; used, but instead proper means to assure that
having &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.py&lt;/span&gt;&lt;/code&gt; as other parts of the filenames won’t be a trouble.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module recursion was changed into its own module, instead of being
hidden in the optimization that considers import statements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As always, some PyLint work, and some minor &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; were solved.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added more information to the &lt;a class="reference external" href="https://nuitka.net/doc/developer-manual.html"&gt;Developer Manual&lt;/a&gt;, e.g. documenting
the tree changes for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assert&lt;/span&gt;&lt;/code&gt; to become a conditional statement
with a raise statement, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Debian package is as of this version verified to be installable
and functional on to Ubuntu Natty, Maverick, Oneiric, and Precise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support to specify the binary under test with a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NUITKA&lt;/span&gt;&lt;/code&gt;
environment, so the test framework can run with installed version of
Nuitka too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made sure the test runners work under Windows as well. Required
making them more portable. And a workaround for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.execl&lt;/span&gt;&lt;/code&gt; not
propagating exit codes under Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For windows target the MinGW library is now linked statically. That
means there is no requirement for MinGW to be in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; or even
installed to execute the binary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;basic&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;programs&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;syntax&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;reflected&lt;/span&gt;&lt;/code&gt; were made
executable under Windows. Occasionally this meant to make the test
runners more portable, or to work around limitations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover return values of rich comparisons in comparison
chains, and order of argument evaluation for comparison chains.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Referencing.py&lt;/span&gt;&lt;/code&gt; test was made portable to Python3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover no arguments &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range()&lt;/span&gt;&lt;/code&gt; exception as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to demonstrate that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-directory&lt;/span&gt;&lt;/code&gt; actually
works. This is using an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; that cannot be predicted at
run time (yet).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The created source package is now tested on pbuilder chroots to be
pass installation and the basic tests, in addition to the full tests
during package build time on these chroots. This will make sure, that
Nuitka works fine on Ubuntu Natty and doesn’t break without notice.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This releases contains many changes. The “temporary variable ref” and
“assignment expression” work is ground breaking. I foresee that it will
lead to even more simplifications of code generation in the future, when
e.g. in-place assignments can be reduced to assignments to temporary
variables and conditional statements.&lt;/p&gt;
&lt;p&gt;While there were many improvements related to Windows support and fixing
portability bugs, or the Debian package, the real focus is the
optimization work, which will ultimately end with “value propagation”
working.&lt;/p&gt;
&lt;p&gt;These are the real focus. The old comparison chain handling was a big
wart. Working, but no way understood by any form of analysis in Nuitka.
Now they have a structure which makes their code generation based on
semantics and allows for future optimization to see through them.&lt;/p&gt;
&lt;p&gt;Going down this route is an important preparatory step. And there will
be more work like this needed. Consider e.g. handling of in-place
assignments. With an “assignment expression” to a “temporary variable
ref”, these become the same as user code using such a variable. There
will be more of these to find.&lt;/p&gt;
&lt;p&gt;So, that is where the focus is. The release now was mostly aiming at
getting involved fixes out. The bug fixed by comparison chain reworking,
and the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; related one, were not suitable for hot fix
releases, so that is why the 0.3.19 release had to occur now. But with
plugin support, with this comparison chain cleanup, with improved
Python3 support, and so on, there was plenty of good stuff already, also
worth to get out.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0319.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-01-26T20:49:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0318.html</id>
    <title>Nuitka Release 0.3.18</title>
    <updated>2012-01-14T11:34:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-18"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is to inform you about the new stable release of Nuitka. This time
there are a few bug fixes, and the important step that triggered the
release: Nuitka has entered Debian Unstable. So you if want, you will
get stable Nuitka releases from now on via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;apt-get&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt; &lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The release cycle was too short to have much focus. It merely includes
fixes, which were available as hot fixes, and some additional
optimization and node tree cleanups, as well as source cleanups. But not
much else.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Conditional statements with both branches empty were not optimized
away in all cases, triggering an assertion of code generation.
Released as 0.3.17a hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nuitka was considering directories to contain packages that had no
“__init__.py” which could lead to errors when it couldn’t find the
package later in the compilation process. Released as 0.3.17a hot fix
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When providing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals()&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statements, this was not
making the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals()&lt;/span&gt;&lt;/code&gt; writable. The logic to detect the case that
default value is used (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;) and be pessimistic about it, didn’t
consider the actual value &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals()&lt;/span&gt;&lt;/code&gt;. Released as 0.3.17b hot fix
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility Fix: When no defaults are given, CPython uses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;
for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func.func_defaults&lt;/span&gt;&lt;/code&gt;, but Nuitka had been using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;If the condition of assert statements can be predicted, these are now
optimized in a static raise or removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For built-in name references, there is now dedicated code to look
them up, that doesn’t check the module level at all. Currently these
are used in only a few cases though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleaner code is generated for the simple case of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt;
statements. This is not only faster code, it’s also more readable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Removed the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CPythonStatementAssert&lt;/span&gt;&lt;/code&gt; node.&lt;/p&gt;
&lt;p&gt;It’s not needed, instead at tree building, assert statements are
converted to conditional statements with the asserted condition
result inverted and a raise statement with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;AssertionError&lt;/span&gt;&lt;/code&gt; and the
assertion argument.&lt;/p&gt;
&lt;p&gt;This allowed to remove code and complexity from the subsequent steps
of Nuitka, and enabled existing optimization to work on assert
statements as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved built-in exception names and built-in names to a new module
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.Builtins&lt;/span&gt;&lt;/code&gt; instead of having in other places. This was
previously a bit spread-out and misplaced.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added cumulative &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tags&lt;/span&gt;&lt;/code&gt; to node classes for use in checks. Use it
annotate which node kinds to visit in e.g. per scope finalization
steps. That avoids kinds and class checks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New node for built-in name lookups&lt;/p&gt;
&lt;p&gt;This allowed to remove tricks played with adding module variable
lookups for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; when adding them for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt; or
module variable lookups for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt; when predicting the result of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type('a')&lt;/span&gt;&lt;/code&gt;, which was unlikely to cause a problem, but an
important &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; item still.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &lt;a class="reference external" href="https://nuitka.net/doc/download.html"&gt;“Download”&lt;/a&gt; page is now
finally updated for releases automatically.&lt;/p&gt;
&lt;p&gt;Up to this release, I had to manually edit that page, but now
mastered the art of upload via XMLRCP and a Python script, so that
don’t loose as much time with editing, checking it, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Debian package is backportable to Ubuntu Natty, Maverick,
Oneiric, I expect to make a separate announcement with links to
packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made sure the test runners worth with bare &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python2.6&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added some tests intended for type inference development.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This releases contains not as much changes as others, mostly because
it’s the intended base for a Debian upload.&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; fix was detected by continued work on the branch
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;feature/minimize_CPython26_tests_diff&lt;/span&gt;&lt;/code&gt; branch, but that work is now
complete.&lt;/p&gt;
&lt;p&gt;It is being made pretty (many git rebase iterations) with lots of Issues
being added to the bug tracker and referenced for each change. The
intention is to have a clean commits repository with the changed made.&lt;/p&gt;
&lt;p&gt;But of course, the real excitement is the “type inference” work. It will
give a huge boost to Nuitka. With this in place, new benchmarks may make
sense. I am working on getting it off the ground, but also to make us
more efficient.&lt;/p&gt;
&lt;p&gt;So when I learn something. e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assert&lt;/span&gt;&lt;/code&gt; is not special, I apply it to
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt; branch immediately, to keep the differences as small as
possible, and to immediately benefit from such improvements.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0318.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-01-14T11:34:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0317.html</id>
    <title>Nuitka Release 0.3.17</title>
    <updated>2012-01-09T07:59:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-17"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is to inform you about the new stable release of Nuitka. This time
there are a few bug fixes, lots of very important organizational work,
and yet again improved compatibility and cleanups. Also huge is the
advance in making &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; go away and making the recursion of Nuitka
controllable, which means a lot for scalability of projects that use a
lot of packages that use other packages, because now you can choose
which ones to embed and which ones one.&lt;/p&gt;
&lt;p&gt;The release cycle focused on improving the quality of the test scripts,
the packaging, and generally to prepare the work on “type inference” in
a new feature branch.&lt;/p&gt;
&lt;p&gt;I have also continued to work towards CPython3.2 compatibility, and this
version, while not there, supports Python3 with a large subset of the
basic tests programs running fine (of course via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; conversion)
without trouble. There is still work to do, exceptions don’t seem to
work fully yet, parameter parsing seems to have changed, etc. but it
seems that CPython3.2 is going to work one day.&lt;/p&gt;
&lt;p&gt;And there has been a lot of effort, to address the Debian packaging to
be cleaner and more complete, addressing issues that prevented it from
entering the Debian repository.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fixed the handling of modules and packages of the same name, but with
different casing. Problem showed under Windows only. Released as
0.3.16a hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed an error where the command line length of Windows was exceeded
when many modules were embedded, Christopher Tott provided a fix for
it. Released as 0.3.16a hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, avoid to introduce new variables for where built-in exception
references are sufficient. Released as 0.3.16b hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, add the missing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;staticmethod&lt;/span&gt;&lt;/code&gt; decorator to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__new__&lt;/span&gt;&lt;/code&gt;
methods before resolving the scopes of variables, this avoids the use
of that variable before it was assigned a scope. Released as 0.3.16b
hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enhanced compatibility again, provide enough &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;co_varnames&lt;/span&gt;&lt;/code&gt; in the
code objects, so that slicing them up to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;code_object.co_argcount&lt;/span&gt;&lt;/code&gt;
will work. They are needed by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; module and might be used by
some decorators as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New options to control the recursion:&lt;/p&gt;
&lt;p&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-none&lt;/span&gt;&lt;/code&gt; (do not warn about not-done recursions)
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-all&lt;/span&gt;&lt;/code&gt; (recurse to all otherwise warned modules)
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-to&lt;/span&gt;&lt;/code&gt; (confirm to recurse to those modules)
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--recurse-not-to&lt;/span&gt;&lt;/code&gt; (confirm to not recurse to those modules)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The optimization of constant conditional expressions was not done
yet. Added this missing constant propagation case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Eliminate near empty statement sequences (only contain a pass
statement) in more places, giving a cleaner node structure for many
constructs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the pickle “protocol 2” on CPython2 except for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unicode&lt;/span&gt;&lt;/code&gt;
strings where it does not work well. It gives a more compressed and
binary representation, that is generally more efficient to un-stream
as well. Also use the cPickle protocol, the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pickle&lt;/span&gt;&lt;/code&gt; was not
really necessary anymore.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added a &lt;a class="reference external" href="https://nuitka.net/doc/developer-manual.html"&gt;Developer Manual&lt;/a&gt; to the release.
It’s incomplete, but it details some of the existing stuff, coding
rules, plans for “type inference”, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--help&lt;/span&gt;&lt;/code&gt; output to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;metavar&lt;/span&gt;&lt;/code&gt; where applicable.
This makes it more readable for some options.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instead of error message, give help output when no module or program
file name was given. This makes Nuitka help out more convenient.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consistently use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;#!/usr/bin/env&lt;/span&gt; &lt;span class="pre"&gt;python&lt;/span&gt;&lt;/code&gt; for all scripts, this was
previously only done for some of them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ported the PyLint check script to Python as well, enhancing it on the
way to check the exit code, and to only output changes things, as
well as making the output of warnings for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; items optional.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;All scripts used for testing, PyLint checking, etc. now work with
Python3 as well. Most useful on Arch Linux, where it’s also already
the default for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Python&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The help output of Nuitka was polished a lot more. It is now more
readable and uses option groups to combine related options together.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make the tests run without any dependence on &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; to contain the
executables of Nuitka. This makes it easier to use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add license texts to 3rd-party file that were missing them, apply
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;licensecheck&lt;/span&gt;&lt;/code&gt; results to cleanup Nuitka. Also removed own
copyright statement from in-line copy of Scons, it had been added by
accident only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release the tests that I own as well as the Debian packaging I
created under “Apache License 2.0” which is very liberal, meaning
every project will be able to use it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t require copyright assignment for contributions anymore, instead
only “Apache License 2.0”, the future Nuitka license, so that the
code won’t be a problem when changing the license of all of Nuitka to
that license.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give contributors listed in the &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User Manual&lt;/a&gt; an exception to the GPL
terms until Nuitka is licensed under “Apache License 2.0” as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--experimental&lt;/span&gt;&lt;/code&gt; option which can be used to control
experimental features, like the one currently being added on branch
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;feature/ctypes_annotation&lt;/span&gt;&lt;/code&gt;, where “type inference” is currently
only activated when that option is given. For this stable release, it
does nothing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the static C++ files of Nuitka with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cppcheck&lt;/span&gt;&lt;/code&gt; as well.
Didn’t find anything.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Arch Linux packages have been contributed, these are linked for
download, but the stable package may lag behind a bit.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Changed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt;&lt;/code&gt; boolean operation to become a normal operator.
Changed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; boolean operators to a new base class, and
making their interface more similar to that of operations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added cumulative &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tags&lt;/span&gt;&lt;/code&gt; to node classes for use in checks. Use it
annotate which node kinds to visit in e.g. per scope finalization
steps. That avoids kinds and class checks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced the “visitor” interface to provide more kinds of callbacks,
enhanced the way “each scope” visiting is achieved by generalizing is
as “child has not tag ‘closure_taker’” and that for every “node that
has tag ‘closure_taker’”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxHighlighting&lt;/span&gt;&lt;/code&gt; module to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.gui&lt;/span&gt;&lt;/code&gt; package where
it belongs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More white listing work for imports. As recursion is now the default,
and leads to warnings for non-existent modules, the CPython tests
gave a lot of good candidates for import errors that were white
listed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consistently use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; in test scripts, as there isn’t a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka.py&lt;/span&gt;&lt;/code&gt; on all platforms. The later is scheduled for removal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some more PyLint cleanups.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make sure the basic tests pass with CPython or else fail the test.
This is to prevent false positives, where a test passes, but only
because it fails in CPython early on and then does so with Nuitka
too. For the syntax tests we make sure they fail.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The basic tests can now be run with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHON=python3.2&lt;/span&gt;&lt;/code&gt; and use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; conversion in that case. Also the currently not passing
tests are not run, so the passing tests continue to do so, with this
run from the release test script &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;check-release&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include the syntax tests in release tests as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed many existing tests so that they can run under CPython3 too.
Of course this is via &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; conversion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t fail if the CPython test suites are not there.&lt;/p&gt;
&lt;p&gt;Currently they remain largely unpublished, and as such are mostly
only available to me (exception,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;feature/minimize_CPython26_tests_diff&lt;/span&gt;&lt;/code&gt; branch references the
CPython2.6 tests repository, but that remains work in progress).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the compile itself test: Make the presence of the Scons in-line
copy optional, the Debian package doesn’t contain it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also make it more portable, so it runs under Windows too, and allow
to choose the Python version to test. Check this test with both
CPython2.6 and CPython2.7 not only the default Python.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Before releasing, test that the created Debian package builds fine in
a minimal Debian &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unstable&lt;/span&gt;&lt;/code&gt; chroot, and passes all the tests
included in the package (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;basics&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;syntax&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;programs&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;reflected&lt;/span&gt;&lt;/code&gt;). Also many other Debian packaging improvements.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The “git flow” was used again in this release cycle and proved to be
useful not only for hot fix, but also for creating the branch
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;feature/ctypes_annotation&lt;/span&gt;&lt;/code&gt; and rebasing it often while things are
still flowing.&lt;/p&gt;
&lt;p&gt;The few hot fixes didn’t require a new release, but the many
organizational improvements and the new features did warrant the new
release, because of e.g. the much better test handling in this release
and the improved recursion control.&lt;/p&gt;
&lt;p&gt;The work on Python3 support has slowed down a bit. I mostly only added
some bits for compatibility, but generally it has slowed down. I wanted
to make sure it doesn’t regress by accident, so running with CPython3.2
is now part of the normal release tests.&lt;/p&gt;
&lt;p&gt;What’s still missing is more “hg” completeness. Only the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;co_varnames&lt;/span&gt;&lt;/code&gt;
work for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; was going in that direction, and this has slowed
down. It was more important to make Nuitka’s recursion more accessible
with the new options, so that was done first.&lt;/p&gt;
&lt;p&gt;And of course, the real excitement is the “type inference” work. It will
give a huge boost to Nuitka, and I am happy that it seems to go well.
With this in place, new benchmarks may make sense. I am working on
getting it off the ground, so other people can work on it too. My idea
of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt; native calls may become true sooner than expected. To
support that, I would like to add more tools to make sure we discover
changes earlier on, checking the XML representations of tests to
discover improvements and regressions more clearly.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0317.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2012-01-09T07:59:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0316.html</id>
    <title>Nuitka Release 0.3.16</title>
    <updated>2011-12-18T17:24:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-16"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This time there are many bug fixes, some important scalability work, and
again improved compatibility and cleanups.&lt;/p&gt;
&lt;p&gt;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 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; conversion) without trouble. I
don’t know when, but it seems that it’s going to work one day.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fixed a packaging problem for Linux and x64 platform, the new
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;swapFiber.S&lt;/span&gt;&lt;/code&gt; file for the fiber management was not included.
Released as 0.3.15a hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed an error where optimization was performed on removed
unreachable code, which lead to an error. Released as 0.3.15b hot fix
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed an issue with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; 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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eval()&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals()&lt;/span&gt;&lt;/code&gt; to be supported in generator
expressions and contractions too. Released as 0.3.15d hot fix
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed the Windows batch files &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.bat&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-python.bat&lt;/span&gt;&lt;/code&gt; to not output the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rem&lt;/span&gt;&lt;/code&gt; statements with the
copyright header. Released as 0.3.15d hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed re-raise with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt;&lt;/code&gt;, but without a current exception set.
Released as 0.3.15e hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vars()&lt;/span&gt;&lt;/code&gt; call on the module level, needs to be treated as
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;globals()&lt;/span&gt;&lt;/code&gt;. Released as 0.3.15e hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed handling of constant module attribute &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; being
replaced. Don’t replace local variables of the same name too.
Released as 0.3.15g hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed assigning to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;True&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;. There was this
old &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt;, and some code has compatibility craft that does it.
Released as 0.3.15g hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix constant dictionaries not always being recognized as shared.
Released as 0.3.15g hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix generator function objects to not require a return frame to
exist. In finalize cleanup it may not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixed non-execution of cleanup codes that e.g. flush &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.stdout&lt;/span&gt;&lt;/code&gt;,
by adding &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_Finalize()&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw()&lt;/span&gt;&lt;/code&gt; method of generator expression objects to not check
arguments properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix missing fallback to subscript operations for slicing with
non-indexable objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fix, the future spec was not properly preserving the future division
flag.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The creation of dictionaries from constants is now also optimized.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;As a new feature functions now have the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func_defaults&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__defaults__&lt;/span&gt;&lt;/code&gt; 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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The names &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;True&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; are now converted to
constants only when they are read-only module variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHONPATH&lt;/span&gt;&lt;/code&gt; variable is now cleared when immediately executing
a compiled binary unless &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--execute-with-pythonpath&lt;/span&gt;&lt;/code&gt; is given, in
which case it is preserved. This allows to make sure that a binary is
in fact containing everything required.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The help output of Nuitka was polished a lot more. It is now more
readable and uses option groups to combine related options together.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The in-line copy of Scons is not checked with PyLint anymore. We of
course don’t care.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Program tests are no longer executed in the program directory, so
failed module inclusions become immediately obvious.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The basic tests can now be run with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHON=python3.2&lt;/span&gt;&lt;/code&gt; and use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;2to3&lt;/span&gt;&lt;/code&gt; conversion in that case.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tags&lt;/span&gt;&lt;/code&gt; to a separate module, make optimization emit only
documented tags, checked against the list of allowed ones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.join&lt;/span&gt;&lt;/code&gt; in more of the test code to achieve more Windows
portability for them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some more PyLint cleanups.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There is now a dedicated test for things that crashed Nuitka
previously.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a program test where the imported module does a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exit()&lt;/span&gt;&lt;/code&gt;
and make sure it really doesn’t continue after the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SystemExit&lt;/span&gt;&lt;/code&gt;
exception that creates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover the type of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__builtins__&lt;/span&gt;&lt;/code&gt; in the main program and in
imported modules in tests too. It’s funny and differs between module
and dict in CPython2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover a final &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt; statement without newline in the test. Must
still receive a newline, which only happens when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_Finalize()&lt;/span&gt;&lt;/code&gt; is
called.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test with functions that makes a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt;&lt;/code&gt; without an exception
set.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover the calling of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;vars()&lt;/span&gt;&lt;/code&gt; on module level too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover the use of eval in contractions and generator expressions too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func_defaults&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__default__&lt;/span&gt;&lt;/code&gt; attributes for a function
too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test function with two &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt;&lt;/code&gt; in an exception handler, so
that one becomes dead code and removed without the crash.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_Finalize&lt;/span&gt;&lt;/code&gt; (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.&lt;/p&gt;
&lt;p&gt;What’s missing is more “hg” completeness. I think only the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;raise&lt;/span&gt;&lt;/code&gt;
without exception set and the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func_defaults&lt;/span&gt;&lt;/code&gt; issue were going into
its direction, but it won’t be enough yet.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0316.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-12-18T17:24:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0315.html</id>
    <title>Nuitka Release 0.3.15</title>
    <updated>2011-12-01T20:24:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-15"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is to inform you about the new stable release of Nuitka. This time
again many organizational improvements, some bug fixes, much improved
compatibility and cleanups.&lt;/p&gt;
&lt;p&gt;This release cycle focused on packaging Nuitka for easier consumption,
i.e. automatic packaging, making automatic uploads, improvement
documentation, and generally cleaning things up, so that Nuitka becomes
more compatible and ultimately capable to run the “hg” test suite. It’s
not there yet, but this is a huge jump for usability of Nuitka and its
compatibility, again.&lt;/p&gt;
&lt;p&gt;Then lots of changes that make Nuitka approach Python3 support, the
generated C++ for at least one large example is compiling with this new
release. It won’t link, but there will be later releases.&lt;/p&gt;
&lt;p&gt;And there is a lot of cleanup going on, geared towards compatibility
with line numbers in the frame object.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The main module was using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__main__&lt;/span&gt;&lt;/code&gt; in tracebacks, but it must be
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;module&amp;gt;&lt;/span&gt;&lt;/code&gt;. Released as 0.3.14a hot fix already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Workaround for “execfile cannot be used as an expression”. It wasn’t
possible to use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;execfile&lt;/span&gt;&lt;/code&gt; in an expression, only as a statement.&lt;/p&gt;
&lt;p&gt;But then there is crazy enough code in e.g. mercurial that uses it in
a lambda function, which made the issue more prominent. The fix now
allows it to be an expression, except on the class level, which
wasn’t seen yet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The in-line copy of Scons was not complete enough to work for
“Windows” or with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-target&lt;/span&gt;&lt;/code&gt; for cross compile. Fixed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cached frames didn’t release the “back” frame, therefore holding
variables of these longer than CPython does, which could cause
ordering problems. Fixed for increased compatibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handle “yield outside of function” syntax error in compiled source
correctly. This one was giving a Nuitka backtrace, now it gives a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; as it needs to.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made syntax/indentation error output absolutely identical to CPython.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using the frame objects &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;f_lineno&lt;/span&gt;&lt;/code&gt; may fix endless amounts bugs
related to traceback line numbers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Guesses the location of the MinGW compiler under Windows to default
install location, so it need not be added to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; environment
variable. Removes the need to modify &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PATH&lt;/span&gt;&lt;/code&gt; environment just for
Nuitka to find it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for “lambda generators”. You don’t want to know what it
is. Lets just say, it was the last absurd language feature out there,
plus that didn’t work. It now works perfect.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;You can now download a Windows installer and a Debian package that
works on Debian Testing, current Ubuntu and Mint Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New release scripts give us the ability to have hot fix releases as
download packages immediately. That means the “git flow” makes even
more beneficial to the users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Including the generated “README.pdf” in the distribution archives, so
it can be read instead of “README.txt”. The text file is fairly
readable, due to the use of ReStructured Text, but the PDF is even
nicer to read, due to e.g. syntax highlighting of the examples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renamed the main binaries to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-python&lt;/span&gt;&lt;/code&gt;, so
that there is no dependency on case sensitive file systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Windows there are batch files &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.bat&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-python.bat&lt;/span&gt;&lt;/code&gt; to make Nuitka directly executable without
finding the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Python.exe&lt;/span&gt;&lt;/code&gt;, which the batch files can tell from their
own location.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There are now man pages of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-python&lt;/span&gt;&lt;/code&gt; with
examples for the most common use cases. They are of course included
in the Debian package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t strip the binary when executing it to analyse compiled binary
with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;valgrind&lt;/span&gt;&lt;/code&gt;. It will give better information that way, without
changing the code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Implemented &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;swapcontext&lt;/span&gt;&lt;/code&gt; alike (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;swapFiber&lt;/span&gt;&lt;/code&gt;) for x64 to achieve
8 times speedup for Generators. It doesn’t do useless syscalls to
preserve signal masks. Now Nuitka is faster at frame switching than
CPython on x64, which is already good by design.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Using the frame objects to store current line of execution avoids the
need to store it away in helper code at all. It ought to also help a
lot with threading support, and makes Nuitka even more compatible,
because now line numbers will be correct even outside tracebacks, but
for mere stack frame dumps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;for_return&lt;/span&gt;&lt;/code&gt; detection from code generation to tree
building where it belongs. Yield statements used as return statements
need slightly different code for Python2.6 difference. That solved an
old &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Much Python3 portability work. Sometimes even improving existing
code, the Python compiler code had picked up a few points, where the
latest Nuitka didn’t work with Python3 anymore, when put to actual
compile.&lt;/p&gt;
&lt;p&gt;The test covered only syntax, but e.g. meta classes need different
code in CPython3, and that’s now supported. Also helper code was made
portable in more places, but not yet fully. This will need more work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleaned up uses of debug defines, so they are now more consistent and
in one place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some more PyLint cleanups.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The tests are now executed by Python scripts and cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;stderr&lt;/span&gt;&lt;/code&gt;
output too. Before we only checked &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;stdout&lt;/span&gt;&lt;/code&gt;. This unveiled a bunch
of issues Nuitka had, but went unnoticed so far, and triggered e.g.
the frame line number improvements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Separate syntax tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The scripts to run the tests now are all in pure Python. This means,
no more MinGW shell is needed to execute the tests.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The Debian package, Windows installer, etc. are now automatically
updated and uploaded. From here on, there can be such packages for the
hot fix releases too.&lt;/p&gt;
&lt;p&gt;The exception tracebacks are now correct by design, and better covered.&lt;/p&gt;
&lt;p&gt;The generator performance work showed that the approach taken by Nuitka
is in fact fast. It was fast on ARM already, but it’s nice to see that
it’s now also fast on x64. Programs using generators will be affected a
lot by this.&lt;/p&gt;
&lt;p&gt;Overall, this release brings Nuitka closer to usability. Better binary
names, man pages, improved documentation, issue tracker, etc. all there
now. I am in fact now looking for a sponsor for the Debian package to
upload it into Debian directly.&lt;/p&gt;
&lt;div class="admonition-update admonition"&gt;
&lt;p class="admonition-title"&gt;Update&lt;/p&gt;
&lt;p&gt;The upload to Debian happened for 0.3.18 and was done by Yaroslav
Halchenko.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;What’s missing is more “hg” completeness. The frame release issue helped
it, but &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect.getargs()&lt;/span&gt;&lt;/code&gt; doesn’t work yet, and is a topic for a
future release. Won’t be easy, as &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func_defaults&lt;/span&gt;&lt;/code&gt; will be an invasive
change too.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0315.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-12-01T20:24:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0314.html</id>
    <title>Nuitka Release 0.3.14</title>
    <updated>2011-11-07T20:52:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-14"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is to inform you about the new stable release of Nuitka. This time
it contains mostly organizational improvements, some bug fixes, improved
compatibility and cleanups.&lt;/p&gt;
&lt;p&gt;It is again the result of working towards compilation of a real program
(Mercurial). This time, I have added support for proper handling of
compiled types by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fix for “Missing checks in parameter parsing with star list, star
dict and positional arguments”. There was whole in the checks for
argument counts, now the correct error is given. Fixed in 0.3.13a
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The simple slice operations with 2 values, not extended with 3
values, were not applying the correct order for evaluation. Fixed in
0.3.13a already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The simple slice operations couldn’t handle &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; as the value for
lower or upper index. Fixed in 0.3.11a already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The in-place simple slice operations evaluated the slice index
expressions twice, which could cause problems if they had side
effects. Fixed in 0.3.11a already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Run time patching the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; module so it accepts compiled
functions, compiled methods, and compiled generator objects. The
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_inspect&lt;/span&gt;&lt;/code&gt; test of CPython is nearly working unchanged with
this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The generator functions didn’t have &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CO_GENERATOR&lt;/span&gt;&lt;/code&gt; set in their
code object, setting it made compatible with CPython in this regard
too. The inspect module will therefore return correct value for
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect.isgeneratorfunction()&lt;/span&gt;&lt;/code&gt; too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Slice indexes that are &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; are now constant propagated as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Slightly more efficient code generation for dual star arg functions,
removing useless checks.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Moved the Scons, static C++ files, and assembler files to new package
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.build&lt;/span&gt;&lt;/code&gt; where also now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SconsInterface&lt;/span&gt;&lt;/code&gt; module lives.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved the Qt dialog files to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.gui&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved the “unfreezer” code to its own static C++ file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some PyLint cleanups.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;New test &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Recursion&lt;/span&gt;&lt;/code&gt; to cover recursive functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New test &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Inspection&lt;/span&gt;&lt;/code&gt; to cover the patching of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;execfile&lt;/span&gt;&lt;/code&gt; on the class level as well in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ExecEval&lt;/span&gt;&lt;/code&gt; test.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cover evaluation order of simple slices in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OrderCheck&lt;/span&gt;&lt;/code&gt; too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;There is a new issue tracker available (since migrated and removed)&lt;/p&gt;
&lt;p&gt;Please register and report issues you encounter with Nuitka. I have
put all the known issues there and started to use it recently. It’s
Roundup based like &lt;a class="reference external" href="https://bugs.python.org"&gt;https://bugs.python.org&lt;/a&gt; is, so people will find it
familiar.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setup.py&lt;/span&gt;&lt;/code&gt; is now apparently functional. The source releases
for download are made it with, and it appears the binary
distributions work too. We may now build a windows installer. It’s
currently in testing, we will make it available when finished.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The new source organisation makes packaging Nuitka really easy now. From
here, we can likely provide “binary” package of Nuitka soon. A windows
installer will be nice.&lt;/p&gt;
&lt;p&gt;The patching of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; works wonders for compatibility for those
programs that insist on checking types, instead of doing duck typing.
The function call problem, was an issue found by the Mercurial test
suite.&lt;/p&gt;
&lt;p&gt;For the “hg.exe” to pass all of its test suite, more work may be needed,
this is the overall goal I am currently striving for. Once real world
programs like Mercurial work, we can use these as more meaningful
benchmarks and resume work on optimization.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0314.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-11-07T20:52:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0313.html</id>
    <title>Nuitka Release 0.3.13</title>
    <updated>2011-11-01T15:07:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-13"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release is mostly the result of working towards compilation of a
real programs (Mercurial) and to merge and finalize the frame stack
work. Now Nuitka has a correct frame stack at all times, and supports
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func_code&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gi_code&lt;/span&gt;&lt;/code&gt; objects, something previously thought to
be impossible.&lt;/p&gt;
&lt;p&gt;Actually now it’s only the “bytecode” objects that won’t be there. And
not attributes of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func_code&lt;/span&gt;&lt;/code&gt; are meaningful yet, but in theory can be
supported.&lt;/p&gt;
&lt;p&gt;Due to the use of the “git flow” for Nuitka, most of the bugs listed
here were already fixed in on the stable release before this release.
This time there were 5 such hot fix releases, sometimes fixing multiple
bugs.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In case of syntax errors in the main program, an exception stack was
giving that included Nuitka code. Changed to make the same output as
CPython does. Fixed in 0.3.12a already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The star import (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;x&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt;) didn’t work for submodules.
Providing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; as the import list to the respective code allowed to
drop the complex lookups we were doing before, and to simply trust
CPython C/API to do it correctly. Fixed in 0.3.12 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The absolute import is &lt;em&gt;not&lt;/em&gt; the default of CPython 2.7 it seems. A
local &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;posix&lt;/span&gt;&lt;/code&gt; package shadows the standard library one. Fixed in
0.3.12 already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; mode, a module may contain a syntax error. This is e.g.
true of “PyQt” with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;port_v3&lt;/span&gt;&lt;/code&gt; included. These files contain Python3
syntax and fail to be imported in Python2, but that is not to be
considered an error. These modules are now skipped with a warning.
Fixed in 0.3.12b already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code to import modules wasn’t using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; built-in,
which prevented &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; overriding code to work. Changed
import to use the built-in. Fixed in 0.3.12c already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code generated for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__&lt;/span&gt;&lt;/code&gt; built-in with constant
values was doing relative imports only. It needs to attempt relative
and absolute imports. Fixed in 0.3.12c already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code of packages in “__init__.py” believed it was outside of the
package, giving problems for package local imports. Fixed in 0.3.12d
already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It appears that “Scons”, which Nuitka uses internally and transparent
to you, to execute the compilation and linking tasks, was sometimes
not building the binaries or shared libraries, due to a false
caching. As a workaround, these are now erased before doing the
build. Fixed in 0.3.12d already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; in comparison chains (e.g. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;&amp;lt;&lt;/span&gt; &lt;span class="pre"&gt;b&lt;/span&gt; &lt;span class="pre"&gt;&amp;lt;&lt;/span&gt;
&lt;span class="pre"&gt;c&lt;/span&gt;&lt;/code&gt; is one), wasn’t supported yet. The use of these in comparison
chains &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt; &lt;span class="pre"&gt;b&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt; &lt;span class="pre"&gt;c&lt;/span&gt;&lt;/code&gt; is very strange.&lt;/p&gt;
&lt;p&gt;Only in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_grammar.py&lt;/span&gt;&lt;/code&gt; it was ever used I believe. Anyway,
it’s supported now, solving this &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; and reducing the
difference. Fixed in 0.3.12e already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The order of evaluation for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; operators wasn’t
enforced in a portable way. Now it is correct on “ARM” too. Fixed in
0.3.12e already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The built-ins &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;GeneratorExit&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;StopIteration&lt;/span&gt;&lt;/code&gt; are optimized
to their Python C/API names where possible as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__file__&lt;/span&gt;&lt;/code&gt; attribute of modules was the relative filename, but
for absolute filenames these become a horrible mess at least on
Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added assertion helpers for sane frame and code objects and use them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assertObject&lt;/span&gt;&lt;/code&gt; in more places.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instead of using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.sep&lt;/span&gt;&lt;/code&gt; all over, added a helper
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Utils.joinpath&lt;/span&gt;&lt;/code&gt; that hides this and using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.path.join&lt;/span&gt;&lt;/code&gt;. This
gives more readable code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added traces to the “unfreezer” guarded by a define. Helpful in
analyzing import problems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some PyLint cleanups removing dead code, unused variables, useless
pass statement, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;New tests to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SyntaxError&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IndentationError&lt;/span&gt;&lt;/code&gt; from
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; imports and in main program.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New test to cover evaluation order of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;not&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt;&lt;/code&gt;
comparisons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New test to cover package local imports made by the “__init__.py” of
the package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Drop “compile_itself.sh” in favor of the new “compile_itself.py”,
because the later is more portable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The logging output is now nicer, and for failed recursions, outputs
the line that is having the problem.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The frame stack work and the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func_code&lt;/span&gt;&lt;/code&gt; are big for compatibility.&lt;/p&gt;
&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;func_code&lt;/span&gt;&lt;/code&gt; was also needed for “hg” to work. For Mercurial to
pass all of its test suite, more work will be needed, esp. the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;inspect&lt;/span&gt;&lt;/code&gt; module needs to be run-time patched to accept compiled
functions and generators too.&lt;/p&gt;
&lt;p&gt;Once real world programs like Mercurial work, we can use these as more
meaningful benchmarks and resume work on optimization.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0313.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-11-01T15:07:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0312.html</id>
    <title>Nuitka Release 0.3.12</title>
    <updated>2011-10-24T20:43:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-12"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is to inform you about the new release of Nuitka many bug fixes,
and substantial improvements especially in the organizational area.
There is a new &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User Manual&lt;/a&gt;
(&lt;a class="reference external" href="https://nuitka.net/doc/user-manual.pdf"&gt;PDF&lt;/a&gt;), with much improved
content, a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.meta_path&lt;/span&gt;&lt;/code&gt; based import mechanism for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; mode,
git flow goodness.&lt;/p&gt;
&lt;p&gt;This release is generally also the result of working towards compilation
of a real programs (Mercurial) and to get things work more nicely on
Windows by default. Thanks go to Liu Zhenhai for helping me with this
goal.&lt;/p&gt;
&lt;p&gt;Due to the use of the “git flow”, most of the bugs listed here were
already fixed in on the stable release before this release. And there
were many of these.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The order of evaluation for base classes and class dictionaries was
not enforced.&lt;/p&gt;
&lt;p&gt;Apparently nothing in the CPython test suite did that, I only noticed
during debugging that Nuitka gave a different error than CPython did,
for a class that had an undefined base class, because both class body
and base classes were giving an error. Fixed in 0.3.11a already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Method objects didn’t hold a reference to the used class.&lt;/p&gt;
&lt;p&gt;The effect was only noticed when &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--python-debug&lt;/span&gt;&lt;/code&gt; was used, i.e.
the debug version of Python linked, because then the garbage
collector makes searches. Fixed in 0.3.11b already.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.executable&lt;/span&gt;&lt;/code&gt; on Linux as well. On Debian it is otherwise
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;/usr/bin/python&lt;/span&gt;&lt;/code&gt; which might be a different version of Python
entirely. Fixed in 0.3.11c already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Embedded modules inside a package could hide package variables of the
same name. Learned during PyCON DE about this corner case. Fixed in
0.3.11d already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Packages could be duplicated internally. This had no effect on
generated code other than appearing twice in the list if frozen
modules. Fixed in 0.3.11d already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When embedding modules from outside current directory, the look-up
failed. The embedding only ever worked for the compile itself and
programs test cases, because they are all in the current directory
then. Fixed in 0.3.11e already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The check for ARM target broke Windows support in the Scons file.
Fixed in 0.3.11f already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The star import from external modules failed with an error in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; mode. Fixed in 0.3.11g already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modules with a parent package could cause a problem under some
circumstances. Fixed in 0.3.11h already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One call variant, with both list and dict star arguments and keyword
arguments, but no positional parameters, didn’t have the required C++
helper function implemented. Fixed in 0.3.11h already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The detection of the CPU core count was broken on my hexacore at
least. Gave 36 instead of 6, which is a problem for large programs.
Fixed in 0.3.11h already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The in-line copy of Scons didn’t really work on Windows, which was
sad, because we added it to simplify installation on Windows
precisely because of this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleaning up the build directory from old sources and object files
wasn’t portable to Windows and therefore wasn’t effective there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From imports where part of the imported were found modules and parts
were not, didn’t work. Solved by the feature branch
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;meta_path_import&lt;/span&gt;&lt;/code&gt; that was merged for this release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Newer MinGW gave warnings about the default visibility not being
possible to apply to class members. Fixed by not setting this default
visibility anymore on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.executable&lt;/span&gt;&lt;/code&gt; gave warnings on Windows because of
backslashes in the path. Using a raw string to prevent such problems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The standard library path was hard coded. Changed to run time
detection.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Version checks on Python runtime now use a new define
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PYTHON_VERSION&lt;/span&gt;&lt;/code&gt; that makes it easier. I don’t like
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PY_VERSION_HEX&lt;/span&gt;&lt;/code&gt;, because it is so unreadable. Makes some of the
checks a lot more safe.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.meta_path&lt;/span&gt;&lt;/code&gt; based import from the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;meta_path_import&lt;/span&gt;&lt;/code&gt;
feature branch allowed the cleanup the way importing is done. It’s a
lot less code now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed some unused code. We will aim at making Nuitka the tool to
detect dead code really.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.Nodes&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.nodes.Nodes&lt;/span&gt;&lt;/code&gt;, that is what the
package is intended for, the split will come later.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;New tests for import variants that previously didn’t work: Mixed
imports. Imports from a package one level up. Modules hidden by a
package variable, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test of function call variant that had no test previously. Only
found it when compiling “hg”. Amazing how nothing in my tests,
CPython tests, etc. used it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover the partial success of import statements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test to cover evaluation order of class definitions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Migrated the “README.txt” from org-mode to ReStructured Text, which
allows for a more readable document, and to generate a nice &lt;a class="reference external" href="https://nuitka.net/doc/user-manual.html"&gt;User
Manual&lt;/a&gt; in PDF form.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The amount of information in “README.txt” was increased, with many
more subjects are now covered, e.g. “git flow” and how to join Nuitka
development. It’s also impressive to see what code blocks and syntax
highlighting can do for readability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Nuitka git repository has seen multiple hot fixes.&lt;/p&gt;
&lt;p&gt;These allowed to publish bug fixes immediately after they were made,
and avoided the need for a new release just to get these out. This
really saves me a lot of time too, because I can postpone releasing
the new version until it makes sense because of other things.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then there was a feature branch &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;meta_path_import&lt;/span&gt;&lt;/code&gt; that lived until
being merged to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt; to improve the import code, which is now
released as part of the main branch. Getting that feature right took
a while.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And there is the feature branch &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;minimize_CPython26_tests_diff&lt;/span&gt;&lt;/code&gt;
which has some success already in documenting the required changes to
the “CPython26” test suite and in reducing the amount of differences,
while doing it. We have a frame stack working there, albeit in too
ugly code form.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The release archives are now built using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setuptools&lt;/span&gt;&lt;/code&gt;. You can now
also download a zip file, which is probably more Windows friendly.
The intention is to work on that to make &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setup.py&lt;/span&gt;&lt;/code&gt; produce a
Nuitka install that won’t rely on any environment variables at all.
Right now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;setup.py&lt;/span&gt;&lt;/code&gt; won’t even allow any other options than
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sdist&lt;/span&gt;&lt;/code&gt; to be given.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ported “compile_itself.sh” to “compile_itself.py”, i.e. ported it to
Python. This way, we can execute it easily on Windows too, where it
currently still fails. Replacing &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;diff&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;rm&lt;/span&gt; &lt;span class="pre"&gt;-rf&lt;/span&gt;&lt;/code&gt;, etc. is a
challenge, but it reduces the dependency on MSYS tools on Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The compilation of standard library is disabled by default, but
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;site&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dist&lt;/span&gt;&lt;/code&gt; packages are now embedded. To include even
standard library, there is a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--really-deep&lt;/span&gt;&lt;/code&gt; option that has to be
given in addition to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt;, which forces this.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Again, huge progress. The improved import mechanism is very beautiful.
It appears that little is missing to compile real world programs like
“hg” with Nuitka. The next release cycle will focus on that and continue
to improve the Windows support which appears to have some issues.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0312.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-10-24T20:43:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka---pycon-de-video.html</id>
    <title>Nuitka - PyCON DE Video</title>
    <updated>2011-10-22T06:39:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-pycon-de-video"&gt;

&lt;p&gt;Hello everybody,&lt;/p&gt;
&lt;p&gt;the Video of my presentation is online:
&lt;a class="reference external" href="https://pyvideo.org/pycon-de-2011/nuitka-der-python-compiler.html"&gt;https://pyvideo.org/pycon-de-2011/nuitka-der-python-compiler.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Leaving it to Mike Müller to announce here the links to everything, when
it’s all finished. Thanks for the good work, the video was very well
done.&lt;/p&gt;
&lt;div class="admonition-update admonition"&gt;
&lt;p class="admonition-title"&gt;Update&lt;/p&gt;
&lt;p&gt;The video is also available via Youtube.&lt;/p&gt;
&lt;div class="video_wrapper" style=""&gt;
&lt;iframe allowfullscreen="true" src="https://www.youtube.com/embed/EYByCjptbhY" style="border: 0; height: 430px; width: 600px"&gt;
&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka---pycon-de-video.html"/>
    <summary>Hello everybody,</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="git" label="git"/>
    <category term="presentation" label="presentation"/>
    <category term="video" label="video"/>
    <published>2011-10-22T06:39:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/pycon-de-2011-my-report.html</id>
    <title>PyCON DE 2011 - My Report</title>
    <updated>2011-10-08T21:24:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="pycon-de-2011-my-report"&gt;

&lt;p&gt;The PyCON DE 2011 is just over, sprints are still happening over the
weekend, but my wife wouldn’t allow me to stay away for that long, so
it’s not for me this time. Maybe next time.&lt;/p&gt;
&lt;p&gt;Right now I feel very happy and excited that I went there. What a
&lt;strong&gt;great&lt;/strong&gt; experience this was.&lt;/p&gt;
&lt;p&gt;It was the first German PyCON and clearly it was overdue as it was now
the merger of many already grown up communities. A huge number of talks
over 3 days in 3 parallel tracks, with 3 keynotes, was an outstanding
program. And very well run. Strict time management, every detail was
well prepared.&lt;/p&gt;
&lt;p&gt;I can only admire the professional preparation and setup. I wanted to
say thank you deeply. I didn’t consider it possible to be this good.
Clearly not a first time.&lt;/p&gt;
&lt;p&gt;I enjoyed the talks, most often in the technical track, but other tracks
would have been very interesting too. The parallelism was making me do
hard decisions.&lt;/p&gt;
&lt;section id="food"&gt;
&lt;h2&gt;Food&lt;/h2&gt;
&lt;p&gt;The food was great too. I esp. liked the Asian day, but there was also
Italian and French, and what many liked very much is that there was a
Vegan food offer too. I do not live vegan style, but I appreciate good
food and the vegan food often is that.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="social-event"&gt;
&lt;h2&gt;Social Event&lt;/h2&gt;
&lt;p&gt;The social event was a visit to a “Variete” (music hall, French origin),
where I am sure, there will be images posted, I currently &lt;a class="reference external" href="https://secure.flickr.com/photos/onyame/6222954609/in/pool-1775853&amp;#64;N21/"&gt;found this
one&lt;/a&gt;
, that my wife will find interesting too.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="leipzig"&gt;
&lt;h2&gt;Leipzig&lt;/h2&gt;
&lt;p&gt;The quality of the organization team, the city “Leipzig”, where we also
got to have a guided city tour of fantastic enthusiasms, was very high.
I knew Leipzig from earlier visits and liked it before, but this time it
seemed everybody was even friendlier.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="site"&gt;
&lt;h2&gt;Site&lt;/h2&gt;
&lt;p&gt;The convention place “Kubus” was very well chosen, absolutely ideal.
It’s got good equipment, and that large room setup, where you can make a
split with movable walls, and have 3 big screens. The acoustics were
pretty damn good there.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="my-own-presentation"&gt;
&lt;h2&gt;My own Presentation&lt;/h2&gt;
&lt;p&gt;As to my own presentation, it was well received, although I sort of
regret that I agreed to have only 30m instead of original plan of 60m. I
had so much to say.&lt;/p&gt;
&lt;p&gt;I ended up with getting my manifesto part out, but that one pretty well.
And it’s OK I guess, because nobody really listens that long anyway. And
my major points came across that way.&lt;/p&gt;
&lt;p&gt;That focus on my Nuitka “manifesto” was probably a good idea. The talk
will be available online as a video, I will link it then. The &lt;a class="reference external" href="/pr/Nuitka-Presentation-PyCON-DE-2011.pdf"&gt;PDF that
I presented only a small part of&lt;/a&gt;, is linked here. I believe
it went pretty well.&lt;/p&gt;
&lt;p&gt;I will use that content from the PDF in updated documentation (currently
ongoing in PDF is work to use REST and document a lot more). The
presentation was created with “rst2pdf”, which I find is a fantastic
tool.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="contacts"&gt;
&lt;h2&gt;Contacts&lt;/h2&gt;
&lt;section id="cython-lxml"&gt;
&lt;h3&gt;Cython / lxml&lt;/h3&gt;
&lt;p&gt;Then contacts!&lt;/p&gt;
&lt;p&gt;Early on I already made contacts with interesting people, e.g. with
Dr.Stefan Behnel, author of lxml and core Cython developer. I him
offered a beer for using his software in the best of Free Software
traditions. He doesn’t drink these, but a large mango juice counts too
or so I assume.&lt;/p&gt;
&lt;p&gt;We also talked about Cython and Nuitka, and the common history we had as
well. For some time, I attempted to change Cython, but that failed to
get the developers support at the time. Not wanting to deviate from
PyRex clearly isn’t the state anymore, but that was then.&lt;/p&gt;
&lt;p&gt;We also had a evening session of showing each other the good and bad
parts, comparing was quite fun. And it was quite interesting to the both
of us. I believe we made friends and will only benefit another.&lt;/p&gt;
&lt;p&gt;We discussed my goals, and I think we came to the conclusion that they
are in fact different enough from Cythons. Although I go away with the
sense, that of course Stefan believes, it would be better if I joined
Cython. Naturally.&lt;/p&gt;
&lt;p&gt;But that’s not going to happen. I think i have a cleaner and better
implementation now, closer to my goals with a realistic chance to
succeed. To me it would be a step back to fix language parsing issues
and incompatibilities of Cython, with the danger that my goals will not
be shared.&lt;/p&gt;
&lt;p&gt;As an example of these things, I would mention function call errors,
where e.g. Cython gives different and sometimes worse error messages
than CPython, and I designed the code so that it does things in that
same order than CPython does.&lt;/p&gt;
&lt;p&gt;It do not want to give different error messages, and who knows, somebody
may check for the exception text and expect CPython output. In this
case, I will rather accept a worse performance, than an incompatibility.&lt;/p&gt;
&lt;p&gt;Eliminating function parameter parsing for the whole program as far as
possible is going to be more worthwhile anyway.&lt;/p&gt;
&lt;p&gt;But in my mind, Cython is something I can and do recommend. For as long
as I am not able to declare Nuitka “useful” yet. That statement may come
within a year though. In my mind, in many fields Nuitka is already
superior.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="pyhasse"&gt;
&lt;h3&gt;PyHasse&lt;/h3&gt;
&lt;p&gt;Another interesting contact I made, was with the author of PyHasse. It’s
Rainer Bruggemann, who is a really nice and witty guy. He introduced me
to how he applies graph theory to multi-parameter optimization problems.&lt;/p&gt;
&lt;p&gt;We agreed that we will try and work together on this project. Hopefully
it will come to pass. One thing I personally wanted, was to get into
contact with people who understand or are part of the scientific
community.&lt;/p&gt;
&lt;p&gt;I can see what NumPy is. But I may never know myself what it really is,
unless I find proxies, and make these kind of contacts. The same thing
is true of Django, or e.g. Mercurial. I am positive though that with
time, and such conferences, my knowledge of these will only grow.&lt;/p&gt;
&lt;p&gt;We said that we will try and see how far we can go. In the worst case,
Nuitka will not yet be useful, but I will have a clearer image what is
needed.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="debian"&gt;
&lt;h3&gt;Debian&lt;/h3&gt;
&lt;p&gt;I saw the presentation from Jan Dittberner and met him later too, asking
him questions, and generally discussing Debian packaging of Nuitka. He
encouraged me to contact the Debian Python Team, and so I will.&lt;/p&gt;
&lt;p&gt;I used the chance to make contact with a Debian guy, who made a
presentation on how to package Python modules for Debian. He gave me
hints on how to solve that “find files near me” issue that plagues
Nuitka just as much as other software. Really kind and helpful guy and
clearly I admire Debian Developers, keep up the good work.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="general"&gt;
&lt;h3&gt;General&lt;/h3&gt;
&lt;p&gt;I also made contacts with lots of other people. Python is diverse and it
was fun to get to know, many people with similar and entirely different
backgrounds.&lt;/p&gt;
&lt;p&gt;The mood was extremely constructive. Nuitka was well received, but
that’s not why I say it. There is that general sense of respect around
that German community, you can feel how pretty much everybody is well
established and doesn’t have to disprove the others.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="keynotes"&gt;
&lt;h2&gt;Keynotes&lt;/h2&gt;
&lt;p&gt;One keynotes speaker had a part about how trolling and hate is bad for a
community, but that’s not the German Python community.&lt;/p&gt;
&lt;p&gt;Another keynote speaker (Paul Everitt) had a part about how Zope, which
was kind of his project, failed in many ways. He seemed to be quite
disappointed about that, which triggered me to point out, that he should
start his story with Apache, and not see the “failure to integrate” as a
failure.&lt;/p&gt;
&lt;p&gt;If there had not been Apache failing, there wouldn’t have been Zope, and
then not Django, etc. that’s kind of normal and actually good. He agreed
and pointed out how Apache was created from another project that had
failed to integrate people.&lt;/p&gt;
&lt;p&gt;You either fork a projects code, or ideas. The fork still should credit
and appreciate the predecessor/origin.&lt;/p&gt;
&lt;p&gt;In my mind, Cython failed to integrate me. Which triggered me to come up
with Nuitka, and as I will point out over time (there ought to be
postings and there probably will be), some better approaches.&lt;/p&gt;
&lt;p&gt;So not integrating me is not necessarily a failure. If it were not for
Cython, there would not be Nuitka. The original projects will regret the
fork/remake, but they probably shouldn’t. Competition is good.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="lets-repeat-that"&gt;
&lt;h2&gt;Lets repeat that&lt;/h2&gt;
&lt;p&gt;I believe the PyCON DE 2011 was a huge success. I will most likely go
again to update people on Nuitka. It’s already clear there will be a
PyCON DE 2012 I understand. And I am aiming for a slot at PyCON EU 2012
next year too. I wanted to go in 2011, but need to not put it in my
early booked holiday again.&lt;/p&gt;
&lt;p&gt;But you know what Murphy says about that.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay Hayen&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/pycon-de-2011-my-report.html"/>
    <summary>The PyCON DE 2011 is just over, sprints are still happening over the
weekend, but my wife wouldn’t allow me to stay away for that long, so
it’s not for me this time. Maybe next time.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="conference" label="conference"/>
    <published>2011-10-08T21:24:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0311.html</id>
    <title>Nuitka Release 0.3.11</title>
    <updated>2011-09-17T02:41:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-11"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is to inform you about the new release of Nuitka with some bug
fixes and portability work.&lt;/p&gt;
&lt;p&gt;This release is generally cleaning up things, and makes Nuitka portable
to ARM Linux. I used to host the Nuitka homepage on that machine, but
now that it’s no longer so, I can run heavy compile jobs on it. To my
surprise, it found many portability problems. So I chose to fix that
first, the result being that Nuitka now works on ARM Linux too.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The order of slice expressions was not correct on x86 as well, and I
found that with new tests only. So the porting to ARM revealed a bug
category, I previously didn’t consider.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;linux2&lt;/span&gt;&lt;/code&gt; in the Scons file is potentially incompatible
with Linux 3.0, although it seems that at least on Debian the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.platform&lt;/span&gt;&lt;/code&gt; was changed back to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;linux2&lt;/span&gt;&lt;/code&gt;. Anyway, it’s
probably best to allow just anything that starts with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;linux&lt;/span&gt;&lt;/code&gt; these
days.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt; statement worked like a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print&lt;/span&gt;&lt;/code&gt; function, i.e. it
first evaluated all printed expressions, and did the output only
then. That is incompatible in case of exceptions, where partial
outputs need to be done, and so that got fixed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Function calls now each have a dedicated helper function, avoiding in
some cases unnecessary work. We will may build further on this and
in-line &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject_Call&lt;/span&gt;&lt;/code&gt; differently for the special cases.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Moved many C++ helper declarations and in-line implementations to
dedicated header files for better organisation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some dependencies were removed and consolidated to make the
dependency graph sane.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multiple decorators were in reverse order in the node tree. The code
generation reversed it back, so no bug, yet that was a distorted
tree.&lt;/p&gt;
&lt;p&gt;Finding this came from the ARM work, because the “reversal” was in
fact just the argument evaluation order of C++ under x86/x64, but on
ARM that broke. Correcting it highlighted this issue.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The deletion of slices, was not using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_ssize&lt;/span&gt;&lt;/code&gt; for indexes,
disallowing some kinds of optimization, so that was harmonized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The function call code generation got a general overhaul. It is now
more consistent, has more helpers available, and creates more
readable code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PyLint is again happier than ever.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There is a new basic test &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OrderChecks&lt;/span&gt;&lt;/code&gt; that covers the order of
expression evaluation. These problems were otherwise very hard to
detect, and in some cases not previously covered at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Executing Nuitka with Python3 (it won’t produce correct Python3 C/API
code) is now part of the release tests, so non-portable code of
Nuitka gets caught.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Support for ARM Linux. I will make a separate posting on the
challenges of this. Suffice to say now, that C++ leaves way too much
things unspecified.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Nuitka git repository now uses “git flow”. The new git policy
will be detailed in another &lt;a class="reference external" href="https://nuitka.net/posts/nuitka-git-flow.html"&gt;separate posting&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is an unstable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt; branch in which the development
occurs. For this release ca. 40 commits were done to this branch,
before merging it. I am also doing more fine grained commits now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unlike previously, there is &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;master&lt;/span&gt;&lt;/code&gt; branch for the stable release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is a script “make-dependency-graph.sh” (Update: meanwhile it
was renamed to “make-dependency-graph.py”) to produce a dependency
graphs of Nuitka. I detected a couple of strange things through this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Python3 &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__pycache__&lt;/span&gt;&lt;/code&gt; directories get removed too by the
cleanup script.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;We only have “PyStone” now, and on a new machine, so the numbers cannot
be compared to previous releases:&lt;/p&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.48&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;104167&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.11 (driven by python 2.6):&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.19&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;263158&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So this a speedup factor of 258%, last time on another machine it was
240%. Yet it only proves that the generated and compiled are more
efficient than bytecode, but Nuitka doesn’t yet do the relevant
optimization. Only once it does, the factor will be significantly
higher.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Overall, there is quite some progress. Nuitka is a lot cleaner now,
which will help us later only. I wanted to get this out, mostly because
of the bug fixes, and of course just in case somebody attempts to use it
on ARM.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0311.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-09-17T02:41:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/going-to-pycon-de.html</id>
    <title>Going to PyCon DE</title>
    <updated>2011-08-18T13:02:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="going-to-pycon-de"&gt;

&lt;p&gt;Hello everybody,&lt;/p&gt;
&lt;p&gt;I am going to the German Python conference in Leipzip and I am going to
have a &lt;a class="reference external" href="http://2011.de.pycon.org/2011/schedule/sessions/54/"&gt;presentation&lt;/a&gt; (link in German)
there.&lt;/p&gt;
&lt;p&gt;Of course it’s about Nuitka (see &lt;a class="reference external" href="/pages/overview.html"&gt;What is Nuitka?&lt;/a&gt; ) and I hope it will get a lot of attendance. I
am naturally very happy to have the opportunity to present it finally. I
had wanted to visit PyCon EU, but the date was never known, and then my
early booking holiday overlapped with it, so it was not an option.&lt;/p&gt;
&lt;p&gt;Now giving this presentation will of course be exciting to me. I gave
presentations as part of the day job many times, but this time it’s
obviously a different. It’s also a first chance to meet the others as I
never was at a Python conference before, and that will be interesting in
itself.&lt;/p&gt;
&lt;p&gt;Presenting Nuitka will of course be easy for me. Now I need to plan what
I want to be able to present for a demo. Running a big thing like
Mercurial would be nice, but I honestly don’t know, if that will even be
difficult, or if it will take a lot of work. Also the amount of
documentation available for Nuitka should increase as part of this.
Designs, etc. could be made into diagrams, so people who want to join
will have it easier.&lt;/p&gt;
&lt;p&gt;Lots of possibilities, and then there is only going to be one reality.
Lets hope it’s good. :-)&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/going-to-pycon-de.html"/>
    <summary>Hello everybody,</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-08-18T13:02:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0310.html</id>
    <title>Nuitka Release 0.3.10</title>
    <updated>2011-07-31T17:12:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-10"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This new release is major milestone 2 work, enhancing practically all
areas of Nuitka. The focus was roundup and breaking new grounds with
structural optimization enhancements.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Exceptions now correctly stack.&lt;/p&gt;
&lt;p&gt;When you catch an exception, there always was the exception set, but
calling a new function, and it catching the exception, the values of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exc_info()&lt;/span&gt;&lt;/code&gt; didn’t get reset after the function returned.&lt;/p&gt;
&lt;p&gt;This was a small difference (of which there are nearly none left now)
but one that might effect existing code, which affects code that
calls functions in exception handling to check something about it.&lt;/p&gt;
&lt;p&gt;So it’s good this is resolved now too. Also because it is difficult
to understand, and now it’s just like CPython behaves, which means
that we don’t have to document anything at all about it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; in generator functions got fixed up. I realized that
this wouldn’t work while working on other things. It’s obscure yes,
but it ought to work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lambda generator functions can now be nested and in generator
functions. There were some problems here with the allocation of
closure variables that got resolved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;List contractions could not be returned by lambda functions. Also a
closure issue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When using a mapping for globals to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eval&lt;/span&gt;&lt;/code&gt; that had a
side effect on lookup, it was evident that the lookup was made twice.
Correcting this also improves the performance for the normal case.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Statically raised as well as predicted exceptions are propagated
upwards, leading to code and block removal where possible, while
maintaining the side effects.&lt;/p&gt;
&lt;p&gt;This is brand new and doesn’t do everything possible yet. Most
notable, the matching of raised exception to handlers is not yet
performed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in exception name references and creation of instances of them
are now optimized as well, which leads to faster exception
raising/catching for these cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More kinds of calls to built-ins are handled, positional parameters
are checked and more built-ins are covered.&lt;/p&gt;
&lt;p&gt;Notable is that now checks are performed if you didn’t potentially
overload e.g. the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;len&lt;/span&gt;&lt;/code&gt; with your own version in the module.
Locally it was always detected already. So it’s now also safe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;All operations and comparisons are now simulated if possible and
replaced with their result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the case of predictable true or false conditions, not taken
branches are removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Empty branches are now removed from most constructs, leading to
sometimes cleaner code generated.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Removed the lambda body node and replaced it with function body. This
is a great win for the split into body and builder. Regular functions
and lambda functions now only differ in how the created body is used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Large cleanup of the operation/comparison code. There is now only use
of a simulator function, which exists for every operator and
comparison. This one is then used in a prediction call, shared with
the built-in predictions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Tracing&lt;/span&gt;&lt;/code&gt; module to avoid future imports of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;print_function&lt;/span&gt;&lt;/code&gt;, which annoyed me many times by causing syntax
failures for when I quickly added a print statement, not noting it
must have the braces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PyLint is happier than ever.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;OverflowFunctions&lt;/span&gt;&lt;/code&gt; test to cover even deeper nesting of
overflow functions taking closure from each level. While it’s not yet
working, this makes clearer what will be needed. Even if this code is
obscure, I would like to be that correct here.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Operators&lt;/span&gt;&lt;/code&gt; test to cover the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;^&lt;/span&gt;&lt;/code&gt; operator as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ListContractions&lt;/span&gt;&lt;/code&gt; the case where a contraction is
returned by a lambda function, but still needs to leak its loop
variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;GeneratorExpressions&lt;/span&gt;&lt;/code&gt; test to cover lambda generators,
which is really crazy code:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;y&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ExecEval&lt;/span&gt;&lt;/code&gt; a case where the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; is inside a
generator, to cover that too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Activated the testing of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exc_info()&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ExceptionRaising&lt;/span&gt;&lt;/code&gt;
test.&lt;/p&gt;
&lt;p&gt;This was previously commented out, and now I added stuff to
illustrate all of the behavior of CPython there.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ComparisonChains&lt;/span&gt;&lt;/code&gt; test to demonstrate that the order of
evaluations is done right and that side effects are maintained.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;BuiltinOverload&lt;/span&gt;&lt;/code&gt; test to show that overloaded built-ins are
actually called and not the optimized version. So code like this has
to print 2 lines:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;__builtin__&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;_len&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;


&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Changed “README.txt” to no longer say that “Scons” is a requirement.
Now that it’s included (patched up to work with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ctypes&lt;/span&gt;&lt;/code&gt; on
Windows), we don’t have to say that anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Documented the status of optimization and added some more ideas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now an option to dump the node tree after optimization as
XML. Not currently use, but is for regression testing, to identify
where new optimization and changes have an impact. This make it more
feasible to be sure that Nuitka is only becoming better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Executable with Python3 again, although it won’t do anything, the
necessary code changes were done.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;It’s nice to see, that I some long standing issues were resolved, and
that structural optimization has become almost a reality.&lt;/p&gt;
&lt;p&gt;The difficult parts of exception propagation are all in place, now it’s
only details. With that we can eliminate and predict even more of the
stupid code of “pybench” at compile time, achieving more infinite
speedups.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-0310.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-07-31T17:12:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-039.html</id>
    <title>Nuitka Release 0.3.9</title>
    <updated>2011-04-24T11:19:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-9"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is about the new release of Nuitka which some bug fixes and offers
a good speed improvement.&lt;/p&gt;
&lt;p&gt;This new release is major milestone 2 work, enhancing practically all
areas of Nuitka. The main focus was on faster function calls, faster
class attributes (not instance), faster unpacking, and more built-ins
detected and more thoroughly optimizing them.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Exceptions raised inside with statements had references to the
exception and traceback leaked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On Windows the binaries &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.executable&lt;/span&gt;&lt;/code&gt; pointed to the binary
itself instead of the Python interpreter. Changed, because some code
uses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.executable&lt;/span&gt;&lt;/code&gt; to know how to start Python scripts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is a bug (fixed in their repository) related to C++ raw strings
and C++ “trigraphs” that affects Nuitka, added a workaround that
makes Nuitka not emit “trigraphs” at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The check for mutable constants was erroneous for tuples, which could
lead to assuming a tuple with only mutable elements to be not
mutable, which is of course wrong.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;p&gt;This time there are so many new optimization, it makes sense to group
them by the subject.&lt;/p&gt;
&lt;section id="exceptions"&gt;
&lt;h3&gt;Exceptions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The code to add a traceback is now our own, which made it possible to
use frames that do not contain line numbers and a code object capable
of lookups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Raising exceptions or adding to tracebacks has been made way faster
by reusing a cached frame objects for the task.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The class used for saving exceptions temporarily (e.g. used in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; code, or with statement) has been improved.&lt;/p&gt;
&lt;p&gt;It now doesn’t make a copy of the exception with a C++ &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;new&lt;/span&gt;&lt;/code&gt; call,
but it simply stores the exception properties itself and creates the
exception object only on demand, which is more efficient.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When catching exceptions, the addition of tracebacks is now done
without exporting and re-importing the exception to Python, but
directly on the exception objects traceback, this avoids a useless
round trip.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="function-calls"&gt;
&lt;h3&gt;Function Calls&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Uses of PyObject_Call provide &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NULL&lt;/span&gt;&lt;/code&gt; as the dictionary, instead of
an empty dictionary, which is slightly faster for function calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There are now dedicated variants for complex function calls with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt; arguments in all forms.&lt;/p&gt;
&lt;p&gt;These can take advantage of easier cases. For example, a merge with
star arguments is only needed if there actually were any of these.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The check for non-string values in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt; arguments can now be
completely short-cut for the case of a dictionary that has never had
a string added. There is now code that detects this case and skips
the check, eliminating it as a performance concern.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="parameter-parsing"&gt;
&lt;h3&gt;Parameter Parsing&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reversed the order in which parameters are checked.&lt;/p&gt;
&lt;p&gt;Now the keyword dictionary is iterated first and only then the
positional arguments after that is done. This iteration is not only
much faster (avoiding repeated lookups for each possible parameter),
it also can be more correct, in case the keyword argument is derived
from a dictionary and its keys mutate it when being compared.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comparing parameter names is now done with a fast path, in which the
pointer values are compare first. This can avoid a call to the
comparison at all, which has become very likely due to the interning
of parameter name strings, see below.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a dedicated call to check for parameter equality with rich
equality comparison, which doesn’t raise an exception.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unpacking of tuples is now using dedicated variants of the normal
unpacking code instead of rolling out everything themselves.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="attribute-access"&gt;
&lt;h3&gt;Attribute Access&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The class type (in executables, not yet for extension modules) is
changed to a faster variant of our own making that doesn’t consider
the restricted mode a possibility. This avoids very expensive calls,
and makes accessing class attributes in compiled code and in
non-compiled code faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Access to attributes (but not of instances) got in-lined and
therefore much faster. Due to other optimization, a specific step to
intern the string used for attribute access is not necessary with
Nuitka at all anymore. This made access to attributes about 50%
faster which is big of course.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="constants"&gt;
&lt;h3&gt;Constants&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The bug for mutable tuples also caused non-mutable tuples to be
considered as mutable, which lead to less efficient code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The constant creation with the g++ bug worked around, can now use raw
strings to create string constants, without resorting to un-pickling
them as a work around. This allows us to use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyString_FromStringAndSize&lt;/span&gt;&lt;/code&gt; to create strings again, which is
obviously faster, and had not been done, because of the confusion
caused by the g++ bug.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For string constants that are usable as attributes (i.e. match the
identifier regular expression), these are now interned, directly
after creation. With this, the check for identical value of pointers
for parameters has a bigger chance to succeed, and this saves some
memory too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For empty containers (set, dict, list, tuple) the constants created
are now are not unstreamed, but created with the dedicated API calls,
saving a bit of code and being less ugly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For mutable empty constant access (set, dict, list) the values are no
longer made by copying the constant, but instead with the API
functions to create new ones. This makes code like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;[]&lt;/span&gt;&lt;/code&gt; a tiny
bit faster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For slice indices the code generation now takes advantage of creating
a C++ &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Py_ssize_t&lt;/span&gt;&lt;/code&gt; from constant value if possible. Before it was
converting the integer constant at run time, which was of course
wasteful even if not (very) slow.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="iteration"&gt;
&lt;h3&gt;Iteration&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The creation of iterators got our own code. This avoids a function
call and is otherwise only a small gain for anything but sequence
iterators. These may be much faster to create now, as it avoids
another call and repeated checks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The next on iterator got our own code too, which has simpler code
flow, because it avoids the double check in case of NULL returned.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The unpack check got similar code to the next iterator, it also has
simpler code flow now and avoids double checks.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="built-ins"&gt;
&lt;h3&gt;Built-ins&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;list&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dict&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;float&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bool&lt;/span&gt;&lt;/code&gt; built-ins along with optimizing their use with
constant parameter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;long&lt;/span&gt;&lt;/code&gt; built-ins, based on a new
“call spec” object, that detects parameter errors at compile time and
raises appropriate exceptions as required, plus it deals with keyword
arguments just as well.&lt;/p&gt;
&lt;p&gt;So, to Nuitka it doesn’t matter now it you write &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int(value)&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;int(x&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;value)&lt;/span&gt;&lt;/code&gt; anymore. The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;base&lt;/span&gt;&lt;/code&gt; parameter of these built-ins
is also supported.&lt;/p&gt;
&lt;p&gt;The use of this call spec mechanism will the expanded, currently it
is not applied to the built-ins that take only one parameter. This is
a work in progress as is the whole built-ins business as not all the
built-ins are covered yet.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h3&gt;Cleanups&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;In 0.3.8 per module global classes were introduced, but the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IMPORT_MODULE&lt;/span&gt;&lt;/code&gt; kept using the old universal class, this got
resolved and the old class is now fully gone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assertObject&lt;/span&gt;&lt;/code&gt; in more cases, and in more places at all,
catches errors earlier on.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved the addition to tracebacks into the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_PythonException&lt;/span&gt;&lt;/code&gt; class,
where it works directly on the contained traceback. This is cleaner
as it no longer requires to export exceptions to Python, just to add
a traceback entry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyLint&lt;/span&gt;&lt;/code&gt; cleanups were done, reducing the number of reports a
bit, but there is still a lot to do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;DefaultValueIdentifier&lt;/span&gt;&lt;/code&gt; class that encapsulates the access
to default values in the parameter parsing more cleanly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The module &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CodeTemplatesListContractions&lt;/span&gt;&lt;/code&gt; was renamed to
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CodeTemplatesContractions&lt;/span&gt;&lt;/code&gt; to reflect the fact that it deals with
all kinds of contractions (also set and dict contractions), not just
list contractions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved the with related template to its own module
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CodeTemplatesWith&lt;/span&gt;&lt;/code&gt;, so its easier to find.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The options handling for g++ based compilers was cleaned up, so that
g++ 4.6 and MinGW are better supported now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Documented more aspects of the Scons build file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some more generated code white space fixes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved some helpers to dedicated files. There is now &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;calling.hpp&lt;/span&gt;&lt;/code&gt;
for function calls, an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importing.cpp&lt;/span&gt;&lt;/code&gt; for import related stuff.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Moved the manifest generation to the scons file, which now produces
ready to use executables.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added a improved version of “pybench” that can cope with the “0 ms”
execution time that Nuitka has for some if its sub-tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reference counting test for with statement was added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Micro benchmarks to demonstrate try finally performance when an
exception travels through it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Micro benchmark for with statement that eats up exceptions raised
inside the block.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Micro benchmarks for the read and write access to class attributes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Printing&lt;/span&gt;&lt;/code&gt; test to cover the trigraphs constant bug case.
Output is required to make the error detectable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Constants&lt;/span&gt;&lt;/code&gt; test to cover repeated mutation of mutable
tuple constants, this covers the bug mentioned.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added a credits section to the “README.txt” where I give credit to
the people who contributed to Nuitka, and the projects it is using. I
will make it a separate posting to cite these.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Documented the requirements on the compiler more clearly, document
the fact that we require scons and which version of Python (2.6 or
2.7).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The is now a codespeed implementation up and running with historical
data for up to Nuitka 0.3.8 runs of “PyStone” and with pybench. It
will be updated for 0.3.9 once I have the infrastructure in place to
do that automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The cleanup script now also removes .so files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The handling of options for g++ got improved, so it’s the same for
g++ and MinGW compilers, plus adequate errors messages are given, if
the compiler version is too low.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--unstripped&lt;/span&gt;&lt;/code&gt; option that just keeps the debug
information in the file, but doesn’t keep the assertions.&lt;/p&gt;
&lt;p&gt;This will be helpful when looking at generated assembler code from
Nuitka to not have the distortions that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; causes (reduced
optimization level, assertions, etc.) and instead a clear view.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-039.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-04-24T11:19:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-on-pybench---good-and-bad.html</id>
    <title>Looking where Nuitka stands</title>
    <updated>2011-04-16T11:52:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="looking-where-nuitka-stands"&gt;

&lt;p&gt;In case you wonder, [what Nuitka is](/pages/overview.html), look here.
Over the 0.3.x release cycle, I have mostly looked at its performance
with “pystone”. I merely wanted to have a target to look at and &lt;a class="reference external" href="/pages/performance.html"&gt;enjoy
the progress&lt;/a&gt; we have made there.&lt;/p&gt;
&lt;p&gt;In the context of the Windows port then, Khalid Abu Bakr used the
pybench on Windows and that got me interested. It’s a nice collection of
micro benchmarks, which is quite obviously aimed for looking CPython
implementations only. In that it’s quite good to check where Nuitka is
good at, and where it can still take improvements for the milestone 2
stuff.&lt;/p&gt;
&lt;section id="enhancements-to-pybench"&gt;
&lt;h2&gt;Enhancements to PyBench&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The pybench refused to accept that Nuitka could use so little time on
some tests, I needed to hack it to allow it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then it had “ZeroDivisionError” exceptions, because Nuitka can run
fully predictable code not at all, thus with a time of 0ms, which
gives interesting factors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also these are many results, we are going to care for regressions
only, so there is an option now to output only tests with negative
values.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="the-interesting-parts"&gt;
&lt;h2&gt;The Interesting Parts&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nuitka currently has some fields where optimizations are already so
effective as to render the whole benchmark pointless. Longterm, most
of PyBench will not be looked at anymore, where the factor becomes
“infinity”, there is little point in looking at it. We will likely
just use it as a test that optimizations didn’t suddenly regress.
Publishing the numbers will not be as interesting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then there are slow downs. These I take seriously, because of course
I expect that Nuitka shall only be faster than CPython. Sometimes the
implementation of Nuitka for some rarely used features is sub par
though. I color coded these in red in the table below.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ComplexPythonFunctionCalls: These are twice as slow, which is an
tribute to the fact, that the code in this domain is only as good as
it needs to be. Of course function calls are very important, and this
needs to be addressed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TryRaiseExcept: This is much slower because of the cost of the raise
statement, which is extremely high currently. For every raise, a
frame object with a specific code object is created, so the traceback
will point to the correct location. This is very inefficient, and
wasteful. We need to be able to create code objects that can be used
for all lines needed, and then we can re-use it and only have one
frame object per function, which then can be re-used itself. There is
already some work for that in [current git](/doc/download.html)
(0.3.9 pre 2), but it’s not yet complete at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WithRaiseExcept: Same problem as TryRaiseExcept, the exception
raising is too expensive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note also that -90% is in fact much worse that +90%, the “diff”
numbers from pybench make improvements look much better than
regressions do. You can also checkout the comparison on the new
[benchmark pages](&lt;a class="reference external" href="https://speedcenter.nuitka.net"&gt;https://speedcenter.nuitka.net&lt;/a&gt;) that I am just
creating, they are based on codespeed, which I will blog upon
separately.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look at this table of results as produced by pybench:&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benchmark-results"&gt;
&lt;h2&gt;Benchmark Results&lt;/h2&gt;
&lt;table summary="Comparing CPython and Nuitka with PyBench"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;**&lt;span style="color: #000000;"&gt;Test Name&lt;/span&gt;**&lt;/td&gt;
&lt;td&gt;**&lt;span style="color: #000000;"&gt;min CPython&lt;/span&gt;**&lt;/td&gt;
&lt;td&gt;**&lt;span style="color: #000000;"&gt;min Nuitka&lt;/span&gt;**&lt;/td&gt;
&lt;td&gt;**&lt;span style="color: #000000;"&gt;di&lt;/span&gt;&lt;span style="color: #000000;"&gt;ff&lt;/span&gt;**&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BuiltinFunctionCalls&lt;/td&gt;
&lt;td&gt;76ms&lt;/td&gt;
&lt;td&gt;54ms&lt;/td&gt;
&lt;td&gt;+41.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BuiltinMethodLookup&lt;/td&gt;
&lt;td&gt;57ms&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;+22.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareFloats&lt;/td&gt;
&lt;td&gt;79ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+inf%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareFloatsIntegers&lt;/td&gt;
&lt;td&gt;75ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+inf%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareIntegers&lt;/td&gt;
&lt;td&gt;76ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+inf%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareInternedStrings&lt;/td&gt;
&lt;td&gt;68ms&lt;/td&gt;
&lt;td&gt;32ms&lt;/td&gt;
&lt;td&gt;+113.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareLongs&lt;/td&gt;
&lt;td&gt;60ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+inf%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareStrings&lt;/td&gt;
&lt;td&gt;86ms&lt;/td&gt;
&lt;td&gt;62ms&lt;/td&gt;
&lt;td&gt;+38.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareUnicode&lt;/td&gt;
&lt;td&gt;61ms&lt;/td&gt;
&lt;td&gt;50ms&lt;/td&gt;
&lt;td&gt;+21.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ComplexPythonFunctionCalls&lt;/td&gt;
&lt;td&gt;86ms&lt;/td&gt;
&lt;td&gt;179ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #ff0000;"&gt;-52.3%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ConcatStrings&lt;/td&gt;
&lt;td&gt;98ms&lt;/td&gt;
&lt;td&gt;99ms&lt;/td&gt;
&lt;td&gt;-0.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ConcatUnicode&lt;/td&gt;
&lt;td&gt;127ms&lt;/td&gt;
&lt;td&gt;124ms&lt;/td&gt;
&lt;td&gt;+2.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CreateInstances&lt;/td&gt;
&lt;td&gt;76ms&lt;/td&gt;
&lt;td&gt;52ms&lt;/td&gt;
&lt;td&gt;+46.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CreateNewInstances&lt;/td&gt;
&lt;td&gt;58ms&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;+22.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CreateStringsWithConcat&lt;/td&gt;
&lt;td&gt;85ms&lt;/td&gt;
&lt;td&gt;90ms&lt;/td&gt;
&lt;td&gt;-6.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CreateUnicodeWithConcat&lt;/td&gt;
&lt;td&gt;74ms&lt;/td&gt;
&lt;td&gt;68ms&lt;/td&gt;
&lt;td&gt;+9.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DictCreation&lt;/td&gt;
&lt;td&gt;58ms&lt;/td&gt;
&lt;td&gt;36ms&lt;/td&gt;
&lt;td&gt;+60.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DictWithFloatKeys&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;44ms&lt;/td&gt;
&lt;td&gt;+51.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DictWithIntegerKeys&lt;/td&gt;
&lt;td&gt;64ms&lt;/td&gt;
&lt;td&gt;30ms&lt;/td&gt;
&lt;td&gt;+113.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DictWithStringKeys&lt;/td&gt;
&lt;td&gt;60ms&lt;/td&gt;
&lt;td&gt;26ms&lt;/td&gt;
&lt;td&gt;+130.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ForLoops&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;15ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+216.2%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IfThenElse&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;16ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+322.5%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ListSlicing&lt;/td&gt;
&lt;td&gt;69ms&lt;/td&gt;
&lt;td&gt;70ms&lt;/td&gt;
&lt;td&gt;-0.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NestedForLoops&lt;/td&gt;
&lt;td&gt;72ms&lt;/td&gt;
&lt;td&gt;25ms&lt;/td&gt;
&lt;td&gt;+187.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NestedListComprehensions&lt;/td&gt;
&lt;td&gt;87ms&lt;/td&gt;
&lt;td&gt;42ms&lt;/td&gt;
&lt;td&gt;+105.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NormalClassAttribute&lt;/td&gt;
&lt;td&gt;62ms&lt;/td&gt;
&lt;td&gt;77ms&lt;/td&gt;
&lt;td&gt;-18.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NormalInstanceAttribute&lt;/td&gt;
&lt;td&gt;56ms&lt;/td&gt;
&lt;td&gt;24ms&lt;/td&gt;
&lt;td&gt;+129.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PythonFunctionCalls&lt;/td&gt;
&lt;td&gt;72ms&lt;/td&gt;
&lt;td&gt;34ms&lt;/td&gt;
&lt;td&gt;+116.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PythonMethodCalls&lt;/td&gt;
&lt;td&gt;84ms&lt;/td&gt;
&lt;td&gt;38ms&lt;/td&gt;
&lt;td&gt;+120.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recursion&lt;/td&gt;
&lt;td&gt;97ms&lt;/td&gt;
&lt;td&gt;56ms&lt;/td&gt;
&lt;td&gt;+73.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SecondImport&lt;/td&gt;
&lt;td&gt;61ms&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;+31.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SecondPackageImport&lt;/td&gt;
&lt;td&gt;66ms&lt;/td&gt;
&lt;td&gt;29ms&lt;/td&gt;
&lt;td&gt;+125.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SecondSubmoduleImport&lt;/td&gt;
&lt;td&gt;86ms&lt;/td&gt;
&lt;td&gt;32ms&lt;/td&gt;
&lt;td&gt;+172.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleComplexArithmetic&lt;/td&gt;
&lt;td&gt;74ms&lt;/td&gt;
&lt;td&gt;62ms&lt;/td&gt;
&lt;td&gt;+18.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleDictManipulation&lt;/td&gt;
&lt;td&gt;65ms&lt;/td&gt;
&lt;td&gt;35ms&lt;/td&gt;
&lt;td&gt;+89.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleFloatArithmetic&lt;/td&gt;
&lt;td&gt;77ms&lt;/td&gt;
&lt;td&gt;56ms&lt;/td&gt;
&lt;td&gt;+39.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleIntFloatArithmetic&lt;/td&gt;
&lt;td&gt;58ms&lt;/td&gt;
&lt;td&gt;39ms&lt;/td&gt;
&lt;td&gt;+48.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleIntegerArithmetic&lt;/td&gt;
&lt;td&gt;59ms&lt;/td&gt;
&lt;td&gt;37ms&lt;/td&gt;
&lt;td&gt;+57.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleListComprehensions&lt;/td&gt;
&lt;td&gt;75ms&lt;/td&gt;
&lt;td&gt;33ms&lt;/td&gt;
&lt;td&gt;+128.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleListManipulation&lt;/td&gt;
&lt;td&gt;57ms&lt;/td&gt;
&lt;td&gt;27ms&lt;/td&gt;
&lt;td&gt;+109.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleLongArithmetic&lt;/td&gt;
&lt;td&gt;68ms&lt;/td&gt;
&lt;td&gt;57ms&lt;/td&gt;
&lt;td&gt;+19.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SmallLists&lt;/td&gt;
&lt;td&gt;69ms&lt;/td&gt;
&lt;td&gt;41ms&lt;/td&gt;
&lt;td&gt;+66.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SmallTuples&lt;/td&gt;
&lt;td&gt;66ms&lt;/td&gt;
&lt;td&gt;98ms&lt;/td&gt;
&lt;td&gt;-32.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SpecialClassAttribute&lt;/td&gt;
&lt;td&gt;63ms&lt;/td&gt;
&lt;td&gt;49ms&lt;/td&gt;
&lt;td&gt;+29.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SpecialInstanceAttribute&lt;/td&gt;
&lt;td&gt;130ms&lt;/td&gt;
&lt;td&gt;24ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+434.5%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;StringMappings&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;62ms&lt;/td&gt;
&lt;td&gt;+8.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;StringPredicates&lt;/td&gt;
&lt;td&gt;69ms&lt;/td&gt;
&lt;td&gt;59ms&lt;/td&gt;
&lt;td&gt;+16.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;StringSlicing&lt;/td&gt;
&lt;td&gt;73ms&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;+54.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TryExcept&lt;/td&gt;
&lt;td&gt;57ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+3821207.1%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TryFinally&lt;/td&gt;
&lt;td&gt;65ms&lt;/td&gt;
&lt;td&gt;26ms&lt;/td&gt;
&lt;td&gt;+153.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TryRaiseExcept&lt;/td&gt;
&lt;td&gt;64ms&lt;/td&gt;
&lt;td&gt;610ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #ff0000;"&gt;-89.5%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TupleSlicing&lt;/td&gt;
&lt;td&gt;76ms&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;+12.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UnicodeMappings&lt;/td&gt;
&lt;td&gt;88ms&lt;/td&gt;
&lt;td&gt;91ms&lt;/td&gt;
&lt;td&gt;-2.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UnicodePredicates&lt;/td&gt;
&lt;td&gt;64ms&lt;/td&gt;
&lt;td&gt;59ms&lt;/td&gt;
&lt;td&gt;+8.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UnicodeProperties&lt;/td&gt;
&lt;td&gt;69ms&lt;/td&gt;
&lt;td&gt;63ms&lt;/td&gt;
&lt;td&gt;+8.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UnicodeSlicing&lt;/td&gt;
&lt;td&gt;80ms&lt;/td&gt;
&lt;td&gt;68ms&lt;/td&gt;
&lt;td&gt;+17.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WithFinally&lt;/td&gt;
&lt;td&gt;84ms&lt;/td&gt;
&lt;td&gt;26ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+221.2%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WithRaiseExcept&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;1178ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #ff0000;"&gt;-94.3%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-on-pybench---good-and-bad.html"/>
    <summary>In case you wonder, [what Nuitka is](/pages/overview.html), look here.
Over the 0.3.x release cycle, I have mostly looked at its performance
with “pystone”. I merely wanted to have a target to look at and enjoy
the progress we have made there.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="benchmark" label="benchmark"/>
    <category term="compiler" label="compiler"/>
    <published>2011-04-16T11:52:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-038---windows-support.html</id>
    <title>Nuitka Release 0.3.8</title>
    <updated>2011-04-03T00:30:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-8"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is to inform you about the new release of Nuitka with some real
news and a slight performance increase. The significant news is added
“Windows Support”. You can now hope to run Nuitka on Windows too and
have it produce working executables against either the standard Python
distribution or a MinGW compiled Python.&lt;/p&gt;
&lt;p&gt;There are still some small things to iron out, and clearly documentation
needs to be created, and esp. the DLL hell problem of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;msvcr90.dll&lt;/span&gt;&lt;/code&gt;
vs. &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;msvcrt.dll&lt;/span&gt;&lt;/code&gt;, is not yet fully resolved, but appears to be not as
harmful, at least not on native Windows.&lt;/p&gt;
&lt;p&gt;I am thanking Khalid Abu Bakr for making this possible. I was surprised
to see this happen. I clearly didn’t make it easy. He found a good way
around &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ucontext&lt;/span&gt;&lt;/code&gt;, identifier clashes, and a very tricky symbol
problems where the CPython library under Windows exports less than under
Linux. Thanks a whole lot.&lt;/p&gt;
&lt;p&gt;Currently the Windows support is considered experimental and works with
MinGW 4.5 or higher only.&lt;/p&gt;
&lt;p&gt;Otherwise there have been the usual round of performance improvements
and more cleanups. This release is otherwise milestone 2 work only,
which will have to continue for some time more.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Lambda generators were not fully compatible, their simple form could
yield an extra value. The behavior for Python 2.6 and 2.7 is also
different and Nuitka now mimics both correctly, depending on the used
Python version&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The given parameter count cited in the error message in case of too
many parameters, didn’t include the given keyword parameters in the
error message.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There was an &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assert&lt;/span&gt; &lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt; right after warning about not found
modules in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; mode, which was of course unnecessary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When unpacking variables in assignments, the temporary variables are
now held in a new temporary class that is designed for the task
specifically.&lt;/p&gt;
&lt;p&gt;This avoids the taking of a reference just because the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObjectTemporary&lt;/span&gt;&lt;/code&gt; destructor insisted on releasing one. The new
class &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObjectTempHolder&lt;/span&gt;&lt;/code&gt; hands the existing reference over and
releases only in case of exceptions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When unpacking variable in for loops, the value from the iterator may
be directly assigned, if it’s to a variable.&lt;/p&gt;
&lt;p&gt;In general this would be possible for every assignment target that
cannot raise, but the infrastructure cannot tell yet, which these
would be. This will improve with more milestone 3 work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Branches with only &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pass&lt;/span&gt;&lt;/code&gt; inside are removed, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pass&lt;/span&gt;&lt;/code&gt; statements
are removed before the code generation stage. This makes it easier to
achieve and decide empty branches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a global variable class per module. It appears that it
is indeed faster to roll out a class per module accessing the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;module&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; rather than having one class and use a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;module&lt;/span&gt; &lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt;,
which is quite disappointing from the C++ compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MAKE_LIST&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MAKE_TUPLE&lt;/span&gt;&lt;/code&gt; have gained special cases for
the 0 arguments case. Even when the size of the variadic template
parameters should be known to the compiler, it seems, it wasn’t
eliminating the branch, so this was a speedup measured with valgrind.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Empty tried branches are now replaced when possible with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;except&lt;/span&gt;&lt;/code&gt; statements, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; is simplified in
this case. This gives a cleaner tree structure and less verbose C++
code which the compiler threw away, but was strange to have in the
first place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In conditions the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;or&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;and&lt;/span&gt;&lt;/code&gt; were evaluated with Python
objects instead of with C++ bool, which was unnecessary overhead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;List contractions got more clever in how they assign from the
iterator value.&lt;/p&gt;
&lt;p&gt;It now uses a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObjectTemporary&lt;/span&gt;&lt;/code&gt; if it’s assigned to multiple
values, a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObjectTempHolder&lt;/span&gt;&lt;/code&gt; if it’s only assigned once, to
something that could raise, or a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObject&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; if an exception
cannot be raised. This avoids temporary references completely for the
common case.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;if&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;while&lt;/span&gt;&lt;/code&gt; statements had always empty
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;else&lt;/span&gt;&lt;/code&gt; nodes which were then also in the generated C++ code as
empty branches. No harm to performance, but this got cleaned up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some more generated code white space fixes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The CPython 2.7 test suite now also has the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;doctests&lt;/span&gt;&lt;/code&gt; extracted to
static tests, which improves test coverage for Nuitka again.&lt;/p&gt;
&lt;p&gt;This was previously only done for CPython 2.6 test suite, but the
test suites are different enough to make this useful, e.g. to
discover newly changed behavior like with the lambda generators.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Shed Skin 0.7.1 examples as benchmarks, so we can start to
compare Nuitka performance in these tests. These will be the focus of
numbers for the 0.4.x release series.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a micro benchmark to check unpacking behavior. Some of these
are needed to prove that a change is an actual improvement, when its
effect can go under in noise of in-line vs. no in-line behavior of
the C++ compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added “pybench” benchmark which reveals that Nuitka is for some
things much faster, but there are still fields to work on. This
version needed changes to stand the speed of Nuitka. These will be
subject of a later posting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There is now a “tests/benchmarks/micro” directory to contain tiny
benchmarks that just look at a single aspect, but have no other
meaning, e.g. the “PyStone” extracts fall into this category.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--windows-target&lt;/span&gt;&lt;/code&gt; option that attempts a
cross-platform build on Linux to Windows executable. This is using
“MingGW-cross-env” cross compilation tool chain. It’s not yet working
fully correctly due to the DLL hell problem with the C runtime. I
hope to get this right in subsequent releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--execute&lt;/span&gt;&lt;/code&gt; option uses wine to execute the binary if it’s a
cross-compile for windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Native windows build is recognized and handled with MinGW 4.5, the
VC++ is not supported yet due to missing C++0x support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The basic test suite ran with Windows so far only and some
adaptations were necessary. Windows new lines are now ignored in
difference check, and addresses under Windows are upper case, small
things.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;76923.1&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.8 (driven by python 2.6):&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.27&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;185185&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is a 140% speed increase of 0.3.8 compared to CPython, up from 132%
compared to the previous release.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-038---windows-support.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-04-03T00:30:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-037.html</id>
    <title>Nuitka Release 0.3.7</title>
    <updated>2011-03-19T14:05:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-7"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is about the new release with focus on performance and cleanups. It
indicates significant progress with the milestone this release series
really is about as it adds a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compiled_method&lt;/span&gt;&lt;/code&gt; type.&lt;/p&gt;
&lt;p&gt;So far functions, generator function, generator expressions were
compiled objects, but in the context of classes, functions were wrapped
in CPython &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;instancemethod&lt;/span&gt;&lt;/code&gt; objects. The new &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compiled_method&lt;/span&gt;&lt;/code&gt; is
specifically designed for wrapping &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compiled_function&lt;/span&gt;&lt;/code&gt; and therefore
more efficient at it.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;When using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Python&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka.py&lt;/span&gt;&lt;/code&gt; to execute some script, the
exit code in case of “file not found” was not the same as CPython. It
should be 2, not 1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The exit code of the created programs (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; mode) in case of an
uncaught exception was 0, now it an error exit with value 1, like
CPython does it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception tracebacks created inside &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;with&lt;/span&gt;&lt;/code&gt; statements could contain
duplicate lines, this was corrected.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Global variable assignments now also use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;assign0&lt;/span&gt;&lt;/code&gt; where no
reference exists.&lt;/p&gt;
&lt;p&gt;The assignment code for module variables is actually faster if it
needs not drop the reference, but clearly the code shouldn’t bother
to take it on the outside just for that. This variant existed, but
wasn’t used as much so far.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The instance method objects are now Nuitka’s own compiled type too.
This should make things slightly faster by itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Our new compiled method objects support dedicated method parsing
code, where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;self&lt;/span&gt;&lt;/code&gt; is passed directly, allowing to make calls
taking a fast path in parameter parsing.&lt;/p&gt;
&lt;p&gt;This avoids allocating/freeing a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tuple&lt;/span&gt;&lt;/code&gt; object per method call,
while reduced 3% ticks in “PyStone” benchmark, so that’s significant.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Solved a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;BUILTIN_RANGE&lt;/span&gt;&lt;/code&gt; to change it to pre-allocating
the list in the final size as we normally do everywhere else. This
was a tick reduction of 0.4% in “PyStone” benchmark, but the
measurement method normalizes on loop speed, so it’s not visible in
the numbers output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parameter variables cannot possibly be uninitialized at creation and
most often they are never subject to a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; statement. Adding
dedicated C++ variable classes gave a big speedup, around 3% of
“PyStone” benchmark ticks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some abstract object operations were re-implemented, which allows to
avoid function calls e.g. in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ITERATOR_NEXT&lt;/span&gt;&lt;/code&gt; case, this gave a
few percent on “PyStone” as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;New package &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen&lt;/span&gt;&lt;/code&gt; to contain all code generation related
stuff, moved &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.templates&lt;/span&gt;&lt;/code&gt; to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen.templates&lt;/span&gt;&lt;/code&gt; as
part of that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inside the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen&lt;/span&gt;&lt;/code&gt; package the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;MainControl&lt;/span&gt;&lt;/code&gt; module now
longer reaches into &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Generator&lt;/span&gt;&lt;/code&gt; for simple things, but goes through
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CodeGeneration&lt;/span&gt;&lt;/code&gt; for everything now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Generator&lt;/span&gt;&lt;/code&gt; module uses almost no tree nodes anymore, but
instead gets information passed in function calls. This allows for a
cleanup of the interface towards &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CodeGeneration&lt;/span&gt;&lt;/code&gt;. Gives a cleaner
view on the C++ code generation, and generally furthers the goal of
other than C++ language backends.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More “PyLint” work, many of the reported warnings have been
addressed, but it’s not yet happy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Defaults for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;yield&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;return&lt;/span&gt;&lt;/code&gt; are &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; and these values
are now already added (as constants) during tree building so that no
such special cases need to be dealt with in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CodeGeneration&lt;/span&gt;&lt;/code&gt; and
future analysis steps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parameter parsing code has been unified even further, now the whole
entry point is generated by one of the function in the new
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.codegen.ParameterParsing&lt;/span&gt;&lt;/code&gt; module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Split variable, exception, built-in helper classes into separate
header files.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The exit codes of CPython execution and Nuitka compiled programs are
now compared as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Errors messages of methods are now covered by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ParameterErrors&lt;/span&gt;&lt;/code&gt;
test as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A new script “benchmark.sh” (now called “run-valgrind.py”) script now
starts “kcachegrind” to display the valgrind result directly.&lt;/p&gt;
&lt;p&gt;One can now use it to execute a test and inspect valgrind information
right away, then improve it. Very useful to discover methods for
improvements, test them, then refine some more.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “check-release.sh” script needs to unset &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NUITKA_EXTRA_OPTIONS&lt;/span&gt;&lt;/code&gt;
or else the reflection test will trip over the changed output paths.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;76923.1&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.7 (driven by python 2.6):&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.28&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;178571&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is a 132% speed of 0.3.7 compared to CPython, up from 109% compare
to the previous release. This is a another small increase, that can be
fully attributed to milestone 2 measures, i.e. not analysis, but purely
more efficient C++ code generation and the new compiled method type.&lt;/p&gt;
&lt;p&gt;One can now safely assume that it is at least twice as fast, but I will
try and get the PyPy or Shedskin test suite to run as benchmarks to
prove it.&lt;/p&gt;
&lt;p&gt;No milestone 3 work in this release. I believe it’s best to finish with
milestone 2 first, because these are quite universal gains that we
should have covered.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-037.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-03-19T14:05:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-036.html</id>
    <title>Nuitka Release 0.3.6</title>
    <updated>2011-02-28T21:45:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-6"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The major point this for this release is cleanup work, and generally bug
fixes, esp. in the field of importing. This release cleans up many small
open ends of Nuitka, closing quite a bunch of consistency &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt;
items, and then aims at cleaner structures internally, so optimization
analysis shall become “easy”. It is a correctness and framework release,
not a performance improvement at all.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Imports were not respecting the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;level&lt;/span&gt;&lt;/code&gt; yet. Code like this was not
working, now it is:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;..&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;something&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Absolute and relative imports were e.g. both tried all the time, now
if you specify absolute or relative imports, it will be attempted in
the same way than CPython does. This can make a difference with
compatibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Functions with a “locals dict” (using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;locals&lt;/span&gt;&lt;/code&gt; built-in or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt;
statement) were not 100% compatible in the way the locals dictionary
was updated, this got fixed. It seems that directly updating a dict
is not what CPython does at all, instead it only pushes things to the
dictionary, when it believes it has to. Nuitka now does the same
thing, making it faster and more compatible at the same time with
these kind of corner cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nested packages didn’t work, they do now. Nuitka itself is now
successfully using nested packages (e.g.
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.transform.optimizations&lt;/span&gt;&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto&lt;/span&gt;&lt;/code&gt; option becomes usable. It’s not measurably faster
immediately, and it requires g++ 4.6 to be available, but then it at
least creates smaller binaries and may provide more optimization in
the future.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Exceptions raised by pre-computed built-ins, unpacking, etc. are now
transformed to raising the exception statically.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There is now a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getVariableForClosure&lt;/span&gt;&lt;/code&gt; that a variable provider can
use. Before that it guessed from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getVariableForReference&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;getVariableForAssignment&lt;/span&gt;&lt;/code&gt; what might be the intention. This makes
some corner cases easier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Classes, functions and lambdas now also have separate builder and
body nodes, which enabled to make getSameScopeNodes() really simple.
Either something has children which are all in a new scope or it has
them in the same scope.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Twisted workarounds like &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TransitiveProvider&lt;/span&gt;&lt;/code&gt; are no longer needed,
because class builder and class body were separated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New packages &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.transform.optimizations&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.transform.finalizations&lt;/span&gt;&lt;/code&gt;, where the first was
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.optimizations&lt;/span&gt;&lt;/code&gt; before. There is also code in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka.transform&lt;/span&gt;&lt;/code&gt; that was previously in a dedicated module. This
allowed to move a lot of displaced code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TreeBuilding&lt;/span&gt;&lt;/code&gt; now has fast paths for all 3 forms, things that need
a “provider”, “node”, and “source_ref”; things that need “node” and
“source_ref”; things that need nothing at all, e.g. pass.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variables now avoid building duplicated instances, but instead share
one. Better for analysis of them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The Python 2.7 test suite is no longer run with Python 2.6 as it will
just crash with the same exception all the time, there is no
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;importlib&lt;/span&gt;&lt;/code&gt; in 2.6, but every test is using that through
test_support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nested packages are now covered with tests too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Imports of upper level packages are covered now too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Updated the “README.txt” with the current plan on optimization.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;76923.1&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.6 (driven by python 2.6):&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.31&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;161290&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is 109% for 0.3.6, but no change from the previous release. No
surprise, because no new effective new optimization means have been
implemented. Stay tuned for future release for actual progress.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-036.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-02-28T21:45:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-035.html</id>
    <title>Nuitka Release 0.3.5</title>
    <updated>2011-01-22T14:52:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-5"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This new release of Nuitka is an overall improvement on many fronts,
there is no real focus this time, likely due to the long time it was in
the making.&lt;/p&gt;
&lt;p&gt;The major points are more optimization work, largely enhanced import
handling and another improvement on the performance side. But there are
also many bug fixes, more test coverage, usability and compatibility.&lt;/p&gt;
&lt;p&gt;Something esp. noteworthy to me and valued is that many important
changes were performed or at least triggered by Nicolas Dumazet, who
contributed a lot of high quality commits as you can see from the gitweb
history. He appears to try and compile Mercurial and Nuitka, and this
resulted in important contributions.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nicolas found a reference counting bug with nested parameter calls.
Where a function had parameters of the form &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a,&lt;/span&gt; &lt;span class="pre"&gt;(b,c)&lt;/span&gt;&lt;/code&gt; it could
crash. This got fixed and covered with a reference count test.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Another reference count problem when accessing the locals dictionary
was corrected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Values &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;0.0&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-0.0&lt;/span&gt;&lt;/code&gt; were treated as the same. They are not
though, they have a different sign that should not get lost.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nested contractions didn’t work correctly, when the contraction was
to iterate over another contraction which needs a closure. The
problem was addressing by splitting the building of a contraction
from the body of the contraction, so that these are now 2 nodes,
making it easy for the closure handling to get things right.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Global statements in function with local &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec()&lt;/span&gt;&lt;/code&gt; would still use
the value from the locals dictionary. Nuitka is now compatible to
CPython with this too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas fixed problems with modules of the same name inside different
packages. We now use the full name including parent package names for
code generation and look-ups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__module__&lt;/span&gt;&lt;/code&gt; attribute of classes was only set after the class
was created. Now it is already available in the class body.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__doc__&lt;/span&gt;&lt;/code&gt; attribute of classes was not set at all. Now it is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The relative import inside nested packages now works correctly. With
Nicolas moving all of Nuitka to a package, the compile itself exposed
many weaknesses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A local re-raise of an exception didn’t have the original line
attached but the re-raise statement line.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Modules and packages have been unified. Packages can now also have
code in “__init__.py” and then it will be executed when the package
is imported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas added the ability to create deep output directory structures
without having to create them beforehand. This makes
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--output-dir=some/deep/path&lt;/span&gt;&lt;/code&gt; usable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parallel build by Scons was added as an option and enabled by
default, which enhances scalability for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; compilations a
lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas enhanced the CPU count detection used for the parallel build.
Turned out that &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;multithreading.cpu_count()&lt;/span&gt;&lt;/code&gt; doesn’t give us the
number of available cores, so he contributed code to determine that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for upcoming g++ 4.6 has been added. The use of the new
option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--lto&lt;/span&gt;&lt;/code&gt; has been been prepared, but right now it appears
that the C++ compiler will need more fixes, before we can this
feature with Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--display-tree&lt;/span&gt;&lt;/code&gt; feature got an overhaul and now displays the
node tree along with the source code. It puts the cursor on the line
of the node you selected. Unfortunately I cannot get it to work
two-way yet. I will ask for help with this in a separate posting as
we can really use a “python-qt” expert it seems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added meaningful error messages in the “file not found” case.
Previously I just didn’t care, but we sort of approach end user
usability with this.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added optimization for the built-in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;range()&lt;/span&gt;&lt;/code&gt; which otherwise
requires a module and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;builtin&lt;/span&gt;&lt;/code&gt; module lookup, then parameter
parsing. Now this is much faster with Nuitka and small ranges (less
than 256 values) are converted to constants directly, avoiding run
time overhead entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code for re-raise statements now use a simple re-throw of the
exception where possible, and only do the hard work where the
re-throw is not inside an exception handler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Constant folding of operations and comparisons is now performed if
the operands are constants.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Values of some built-ins are pre-computed if the operands are
constants.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The value of module attribute &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__name__&lt;/span&gt;&lt;/code&gt; is replaced by a constant
unless it is assigned to. This is the first sign of upcoming constant
propagation, even if only a weak one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conditional statement and/or their branches are eliminated where
constant conditions allow it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Nicolas moved the Nuitka source code to its own &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka&lt;/span&gt;&lt;/code&gt; package.
That is going to make packaging it a lot easier and allows cleaner
code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas introduced a fast path in the tree building which often
delegates (or should do that) to a function. This reduced a lot of
the dispatching code and highlights more clearly where such is
missing right now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Together we worked on the line length issues of Nuitka. We agreed on
a style and very long lines will vanish from Nuitka with time. Thanks
for pushing me there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas also did provide many style fixes and general improvements,
e.g. using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObjectTemporary&lt;/span&gt;&lt;/code&gt; in more places in the C++ code, or
not using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;str.find&lt;/span&gt;&lt;/code&gt; where &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;x&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt; &lt;span class="pre"&gt;y&lt;/span&gt;&lt;/code&gt; is a better choice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The node structure got cleaned up towards the direction that
assignments always have an assignment as a child.&lt;/p&gt;
&lt;p&gt;A function definition, or a class definition, are effectively
assignments, and in order to not have to treat this as special cases
everywhere, they need to have assignment targets as child nodes.&lt;/p&gt;
&lt;p&gt;Without such changes, optimization will have to take too many things
into account. This is not yet completed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas merged some node tree building functions that previously
handled deletion and assigning differently, giving us better code
reuse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The constants code generation was moved to a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__constants.cpp&lt;/span&gt;&lt;/code&gt;
where it doesn’t make __main__.cpp so much harder to read anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The module declarations have been moved to their own header files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas cleaned up the scripts used to test Nuitka big time, removing
repetitive code and improving the logic. Very much appreciated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas also documented a things in the Nuitka source code or got me
to document things that looked strange, but have reasons behind it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas solved the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; related to built-in module accesses.
These will now be way faster than before.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nicolas also solved the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TODO&lt;/span&gt;&lt;/code&gt; related to the performance of
“locals dict” variable accesses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generator.py no longer contains classes. The Contexts objects are
supposed to contain the state, and as such the generator objects
never made much sense.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also with the help of Scons community, I figured out how to avoid
having object files inside the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;src&lt;/span&gt;&lt;/code&gt; directory of Nuitka. That
should also help packaging, now all build products go to the .build
directory as they should.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The vertical white space of the generated C++ got a few cleanups,
trailing/leading new line is more consistent now, and there were some
assertions added that it doesn’t happen.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The CPython 2.6 tests are now also run by CPython 2.7 and the other
way around and need to report the same test failure reports, which
found a couple of issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now the test suite is run with and without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt; mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basic tests got extended to cover more topics and catch more issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Program tests got extended to cover code in packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added more exec scope tests. Currently inlining of exec statements is
disabled though, because it requires entirely different rules to be
done right, it has been pushed back to the next release.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;g++-nuitka&lt;/span&gt;&lt;/code&gt; script is no more. With the help of the Scons
community, this is now performed inside the scons and only once
instead of each time for every C++ file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt;, the generated C++ is compiled with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-Wall&lt;/span&gt;&lt;/code&gt;
and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-Werror&lt;/span&gt;&lt;/code&gt; so that some form of bugs in the generated C++ code
will be detected immediately. This found a few issues already.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is a new git merge policy in place. Basically it says, that if
you submit me a pull request, that I will deal with it before
publishing anything new, so you can rely on the current git to
provide you a good base to work on. I am doing more frequent
pre-releases already and I would like to merge from your git.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “README.txt” was updated to reflect current optimization status
and plans. There is still a lot to do before constant propagation can
work, but this explains things a bit better now. I hope to expand
this more and more with time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a “misc/clean-up.sh” script that prints the commands to
erase all the temporary files sticking around in the source tree.&lt;/p&gt;
&lt;p&gt;That is for you if you like me, have other directories inside,
ignored, that you don’t want to delete.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then there is now a script that prints all source filenames, so you
can more easily open them all in your editor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And very important, there is now a “check-release.sh” script that
performs all the tests I think should be done before making a
release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pylint got more happy with the current Nuitka source. In some places,
I added comments where rules should be granted exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;76923.1&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.5 (driven by python 2.6):&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.31&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;161290&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is 109% for 0.3.5, up from 91% before.&lt;/p&gt;
&lt;p&gt;Overall this release is primarily an improvement in the domain of
compatibility and contains important bug and feature fixes to the users.
The optimization framework only makes a first showing of with the
framework to organize them. There is still work to do to migrate
optimization previously present&lt;/p&gt;
&lt;p&gt;It will take more time before we will see effect from these. I believe
that even more cleanups of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TreeBuilding&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nodes&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CodeGeneration&lt;/span&gt;&lt;/code&gt; will be required, before everything is in place for
the big jump in performance numbers. But still, passing 100% feels good.
Time to rejoice.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-035.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2011-01-22T14:52:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-034.html</id>
    <title>Nuitka Release 0.3.4</title>
    <updated>2010-12-24T14:01:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-4"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This new release of Nuitka has a focus on re-organizing the Nuitka
generated source code and a modest improvement on the performance side.&lt;/p&gt;
&lt;p&gt;For a long time now, Nuitka has generated a single C++ file and asked
the C++ compiler to translate it to an executable or shared library for
CPython to load. This was done even when embedding many modules into one
(the “deep” compilation mode, option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;This was simple to do and in theory ought to allow the compiler to do
the most optimization. But for large programs, the resulting source code
could have exponential compile time behavior in the C++ compiler. At
least for the GNU g++ this was the case, others probably as well. This
is of course at the end a scalability issue of Nuitka, which now has
been addressed.&lt;/p&gt;
&lt;p&gt;So the major advancement of this release is to make the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt;
option useful. But also there have been a performance improvements,
which end up giving us another boost for the “PyStone” benchmark.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Imports of modules local to packages now work correctly, closing the
small compatibility gap that was there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modules with a “-” in their name are allowed in CPython through
dynamic imports. This lead to wrong C++ code created. (Thanks to Li
Xuan Ji for reporting and submitting a patch to fix it.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There were warnings about wrong format used for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Ssize_t&lt;/span&gt;&lt;/code&gt; type of
CPython. (Again, thanks to Li Xuan Ji for reporting and submitting
the patch to fix it.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When a wrong exception type is raised, the traceback should still be
the one of the original one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set and dict contractions (Python 2.7 features) declared local
variables for global variables used. This went unnoticed, because
list contractions don’t generate code for local variables at all, as
they cannot have such.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type()&lt;/span&gt;&lt;/code&gt; built-in to create a new class could attribute
it to the wrong module, this is now corrected.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Uses Scons to execute the actual C++ build, giving some immediate
improvements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now caches build results and Scons will only rebuild as needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The direct use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__import__()&lt;/span&gt;&lt;/code&gt; with a constant module name as
parameter is also followed in “deep” mode. With time, non-constants
may still become predictable, right now it must be a real CPython
constant string.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added optimization for the built-ins &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ord()&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;chr()&lt;/span&gt;&lt;/code&gt;, these
require a module and built-in module lookup, then parameter parsing.
Now these are really quick with Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type()&lt;/span&gt;&lt;/code&gt; built-in with one parameter. As
above, using from builtin module can be very slow. Now it is
instantaneous.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added optimization for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type()&lt;/span&gt;&lt;/code&gt; built-in with three parameters.
It’s rarely used, but providing our own variant, allowed to fix the
bug mentioned above.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Using scons is a big cleanup for the way how C++ compiler related
options are applied. It also makes it easier to re-build without
Nuitka, e.g. if you were using Nuitka in your packages, you can
easily build in the same way than Nuitka does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Static helpers source code has been moved to “.hpp” and “.cpp” files,
instead of being in “.py” files. This makes C++ compiler messages
more readable and allows us to use C++ mode in Emacs etc., making it
easier to write things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generated code for each module ends up in a separate file per module
or package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Constants etc. go to their own file (although not named sensible yet,
likely going to change too)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module variables are now created by the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;CPythonModule&lt;/span&gt;&lt;/code&gt; node only
and are unique, this is to make optimization of these feasible. This
is a pre-step to module variable optimization.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added “ExtremeClosure” from my Python quiz, it was not covered by
existing tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test case for program that imports a module with a dash in its
name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test case for main program that starts with a dash.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Extended the built-in tests to cover &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;type()&lt;/span&gt;&lt;/code&gt; as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;There is now a new environment variable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NUITKA_SCONS&lt;/span&gt;&lt;/code&gt; which should
point to the directory with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;SingleExe.scons&lt;/span&gt;&lt;/code&gt; file for Nuitka.
The scons file could be named better, because it is actually one and
the same who builds extension modules and executables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a new environment variable &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NUITKA_CPP&lt;/span&gt;&lt;/code&gt; which should
point to the directory with the C++ helper code of Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The script “create-environment.sh” can now be sourced (if you are in
the top level directory of Nuitka) or be used with eval. In either
case it also reports what it does.&lt;/p&gt;
&lt;div class="admonition-update admonition"&gt;
&lt;p class="admonition-title"&gt;Update&lt;/p&gt;
&lt;p&gt;The script has become obsolete now, as the environment variables
are no longer necessary.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To cleanup the many “Program.build” directories, there is now a
“clean-up.sh” script for your use. Can be handy, but if you use git,
you may prefer its clean command.&lt;/p&gt;
&lt;div class="admonition-update admonition"&gt;
&lt;p class="admonition-title"&gt;Update&lt;/p&gt;
&lt;p&gt;The script has become obsolete now, as Nuitka test executions now
by default delete the build results.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;76923.1&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.4:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.34&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;147059&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is 91% for 0.3.4, up from 80% before.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-034.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-12-24T14:01:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-pre-release-034pre1.html</id>
    <title>Nuitka Pre-Release 0.3.4pre1</title>
    <updated>2010-12-06T23:27:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-pre-release-0-3-4pre1"&gt;

&lt;p&gt;This pre-release of Nuitka has a focus on re-organizing the Nuitka
generated source code. Please see the page &lt;a class="reference external" href="/pages/overview.html"&gt;“What is Nuitka?”&lt;/a&gt; for clarification of what it is now and what it
wants to be.&lt;/p&gt;
&lt;p&gt;For a long time, Nuitka has generated a single C++ file, even when
embedding many modules into one. And it has always showed that the GNU
g++ compiler clearly has exponential compile time behavior when
translating these into the executable.&lt;/p&gt;
&lt;p&gt;This is no more the case. So this pre-release is mainly about making the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; feature useful. Before the release, I may look into
optimizations for speed again. Right now time is very short due to day
job reasons, so this pre-release is also about allowing people to use
the improvements that I have made and get some feedback about it.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;None at all. Although I am sure that there may be regressions on the
options side. The tests of CPython 2.7 all pass still, but you may
find some breakage.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Static helpers source code has been moved to “.hpp” and “.cpp” files,
instead of being in “.py” files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generated generated code for each module is now a separate file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Constants etc. go to their own file (although not named sensible yet)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Uses Scons to make the build.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;I have added ExtremClosure from the Python quiz. I feel it was not
covered by existing tests yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There is now a new environment variable “NUITKA_SCONS” which should
point to the directory with the Scons file for Nuitka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;create-environment.sh&lt;/span&gt;&lt;/code&gt; can now be sourced (if you are in the
top level directory of Nuitka) or be used with eval. In either case
it also reports what it does.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;None at this time. It likely didn’t change much at all. And I am not yet
using the link time optimization feature of the g++ compiler, so
potentially it should be worse than before at max.&lt;/p&gt;
&lt;p&gt;This release will be inside the “git” repository only. Check out &lt;a class="reference external" href="/doc/download.html"&gt;latest
version here&lt;/a&gt; to get it.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay Hayen&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-pre-release-034pre1.html"/>
    <summary>This pre-release of Nuitka has a focus on re-organizing the Nuitka
generated source code. Please see the page “What is Nuitka?” for clarification of what it is now and what it
wants to be.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="git" label="git"/>
    <published>2010-12-06T23:27:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-needs-you---a-call-for-help.html</id>
    <title>Nuitka needs you - a call for help</title>
    <updated>2010-11-23T16:11:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-needs-you-a-call-for-help"&gt;

&lt;p&gt;Hello everybody,&lt;/p&gt;
&lt;div class="admonition-update admonition"&gt;
&lt;p class="admonition-title"&gt;Update&lt;/p&gt;
&lt;p&gt;Python3 support was added, and has reached 3.3 in the mean time. The
doctests are extracted by a script indeed. But exception stack
correctness is an ongoing struggle.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;my Python compiler Nuitka has come a long way, and currently I have
little to no time to spend on it, due to day job reasons, so it’s going
to mostly stagnate for about 2 weeks from my side. But that’s coming to
an end, and still I would like to expand what we currently have, with
your help.&lt;/p&gt;
&lt;p&gt;Note: You can check the page &lt;a class="reference external" href="/pages/overview.html"&gt;What is Nuitka?&lt;/a&gt;
for clarification of what it is now and what it wants to be.&lt;/p&gt;
&lt;p&gt;As you will see, covering all the CPython 2.6 and 2.7 language features
is already something. Other projects are far, far away from that. But
going ahead, I want to secure that base. And this is where there are
several domains where you can help:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Python 3.1 or higher&lt;/p&gt;
&lt;p&gt;I did some early testing. The C/API changed in many ways, and my
current working state has a couple of fixes for it. I would like
somebody else to devote some time to fixing this up. Please contact
me if you can help here, esp. if you are competent in the C/API
changes of Python 3.1. Even if the CPython 3.1 doesn’t matter as much
to me, I believe the extended coverage from the new tests in its test
suite would be useful. The improved state is not yet released. I
would make an release to the person(s) that want to work on it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Doctests support&lt;/p&gt;
&lt;p&gt;I have started to extract the doctests from the CPython 2.6 test
suite. There is a script that does it, and you basically only need to
expand it with more of the same. No big issue there, but it could
find issues with Nuitka that we would like to know. Of course, it
should also be expanded to CPython 2.7 test suite and ultimately also
CPython 3.1&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception correctness&lt;/p&gt;
&lt;p&gt;I noted some issues with the stacks when developing with the CPython
2.7 tests, or now failing 2.6 tests, after some merge work. But what
would be needed would be tests to cover all the situations, where
exceptions could be raised, and stack traces should ideally be
identical for all. This is mostly only accuracy work and the CPython
test suite is bad at covering it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All these areas would be significant help, and do not necessarily or at
all require any Nuitka inside knowledge. You should also subscribe the
mailing list (since closed) if you consider helping, so we can discuss
things in the open.&lt;/p&gt;
&lt;p&gt;If you choose to help me, before going even further into optimization,
in all likelihood it’s only going to make things more solid. The more
tests we have, the less wrong paths we can take. This is why I am asking
for things, which all point into that direction.&lt;/p&gt;
&lt;p&gt;Thanks in advance, Kay Hayen&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-needs-you---a-call-for-help.html"/>
    <summary>Hello everybody,</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-11-23T16:11:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-033.html</id>
    <title>Nuitka Release 0.3.3</title>
    <updated>2010-11-15T00:17:00+00:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-3"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release of Nuitka continues the focus on performance. It also
cleans up a few open topics. One is “doctests”, these are now extracted
from the CPython 2.6 test suite more completely. The other is that the
CPython 2.7 test suite is now passed completely. There is some more work
ahead though, to extract all of the “doctests” and to do that for both
versions of the tests.&lt;/p&gt;
&lt;p&gt;This means an even higher level of compatibility has been achieved, then
there is performance improvements, and ever cleaner structure.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;section id="generators"&gt;
&lt;h3&gt;Generators&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Generator functions tracked references to the common and the instance
context independently, now the common context is not released before
the instance contexts are.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generator functions didn’t check the arguments to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw()&lt;/span&gt;&lt;/code&gt; the way
they are in CPython, now they do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generator functions didn’t trace exceptions to “stderr” if they
occurred while closing unfinished ones in “del”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generator functions used the slightly different wordings for some
error messages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="function-calls"&gt;
&lt;h3&gt;Function Calls&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Extended call syntax with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt; allows that to use a mapping, and it
is now checked if it really is a mapping and if the contents has
string keys.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Similarly, extended call syntax with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; allows a sequence, it is
now checked if it really is a sequence.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Error message for duplicate keyword arguments or too little arguments
now describe the duplicate parameter and the callable the same way
CPython does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now checks to the keyword argument list first before considering the
parameter counts. This is slower in the error case, but more
compatible with CPython.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="classes"&gt;
&lt;h3&gt;Classes&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The “locals()” built-in when used in the class scope (not in a
method) now is correctly writable and writes to it change the
resulting class.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name mangling for private identifiers was not always done entirely
correct.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="others"&gt;
&lt;h3&gt;Others&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Exceptions didn’t always have the correct stack reported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The pickling of some tuples showed that “cPickle” can have
non-reproducible results, using “pickle” to stream constants now&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Access to instance attributes has become faster by writing specific
code for the case. This is done in JIT way, attempting at run time to
optimize attribute access for instances.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Assignments now often consider what’s cheaper for the other side,
instead of taking a reference to a global variable, just to have to
release it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The function call code built argument tuples and dictionaries as
constants, now that is true for every tuple usage.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The static helper classes, and the prelude code needed have been
moved to separate C++ files and are now accessed “#include”. This
makes the code inside C++ files as opposed to a Python string and
therefore easier to read and or change.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The generator functions and generator expressions have the attribute
“gi_running” now. These indicate if they are currently running.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The script to extract the “doctests” from the CPython test suite has
been rewritten entirely and works with more doctests now. Running
these tests created increased the test coverage a lot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Python 2.7 test suite has been added.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;One can now run multiple “compare_with_cpython” instances in
parallel, which enables background test runs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is now a new environment variable “NUITKA_INCLUDE” which needs
to point to the directory Nuitka’s C++ includes live in. Of course
the “create-environment.sh” script generates that for you easily.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;76923.1&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.3:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.36&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;138889&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is 80% for 0.3.3, up from 66% before.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-033.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-11-15T00:17:00+00:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-032.html</id>
    <title>Nuitka Release 0.3.2</title>
    <updated>2010-10-10T21:10:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-2"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release of Nuitka continues the focus on performance. But this
release also revisits the topic of feature parity. Before, feature
parity had been reached “only” with Python 2.6. This is of course a big
thing, but you know there is always more, e.g. Python 2.7.&lt;/p&gt;
&lt;p&gt;With the addition of set contractions and dict contractions in this very
release, Nuitka is approaching Python support for 2.7, and then there
are some bug fixes.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Calling a function with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt; and using a non-dict for it was
leading to wrong behavior.&lt;/p&gt;
&lt;p&gt;Now a mapping is good enough as input for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;**&lt;/span&gt;&lt;/code&gt; parameter and
it’s checked.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deeply nested packages “package.subpackage.module” were not found and
gave a warning from Nuitka, with the consequence that they were not
embedded in the executable. They now are.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some error messages for wrong parameters didn’t match literally. For
example “function got multiple…” as opposed to “function() got
multiple…” and alike.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Files that ended in line with a “#” but without a new line gave an
error from “ast.parse”. As a workaround, a new line is added to the
end of the file if it’s “missing”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More correct exception locations for complex code lines. I noted that
the current line indication should not only be restored when the call
at hand failed, but in any case. Otherwise sometimes the exception
stack would not be correct. It now is - more often. Right now, this
has no systematic test.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Re-raised exceptions didn’t appear on the stack if caught inside the
same function, these are now correct.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; the globals argument needs to have “__builtins__” added,
but the check was performed with the mapping interface.&lt;/p&gt;
&lt;p&gt;That is not how CPython does it, and so e.g. the mapping could use a
default value for “__builtins__” which could lead to incorrect
behavior. Clearly a corner case, but one that works fully compatible
now.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The local and shared local variable C++ classes have a flag
“free_value” to indicate if an “PY_DECREF” needs to be done when
releasing the object. But still the code used “Py_XDECREF” (which
allows for “NULL” values to be ignored.) when the releasing of the
object was done. Now the inconsistency of using “NULL” as “object”
value with “free_value” set to true was removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tuple constants were copied before using them without a point. They
are immutable anyway.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Improved more of the indentation of the generated C++ which was not
very good for contractions so far. Now it is. Also assignments should
be better now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The generation of code for contractions was made more general and
templates split into multiple parts. This enabled reuse of the code
for list contractions in dictionary and set contractions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The with statement has its own template now and got cleaned up
regarding indentation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There is now a script to extract the “doctests” from the CPython test
suite and it generates Python source code from them. This can be
compiled with Nuitka and output compared to CPython. Without this,
the doctest parts of the CPython test suite is mostly useless.
Solving this improved test coverage, leading to many small fixes. I
will dedicate a later posting to the tool, maybe it is useful in
other contexts as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reference count tests have been expanded to cover assignment to
multiple assignment targets, and to attributes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The deep program test case, now also have a module in a sub-package
to cover this case as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &lt;a class="reference external" href="https://nuitka.net/gitweb"&gt;gitweb interface&lt;/a&gt; (since disabled)
might be considered an alternative to downloading the source if you
want to provide a pointer, or want to take a quick glance at the
source code. You can already download with git, follow the link below
to the page explaining it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “README.txt” has documented more of the differences and I
consequently updated the Differences page. There is now a distinction
between generally missing functionality and things that don’t work in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; mode, where Nuitka is supposed to create one executable.&lt;/p&gt;
&lt;p&gt;I will make it a priority to remove the (minor) issues of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt;
mode in the next release, as this is only relatively little work, and
not a good difference to have. We want these to be empty, right? But
for the time being, I document the known differences there.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;76923.1&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.2:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.39&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;128205&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is 66% for 0.3.2, slightly up from the 58% of 0.3.1 before. The
optimization done were somewhat fruitful, but as you can see, they were
also more cleanups, not the big things.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-032.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-10-10T21:10:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-031.html</id>
    <title>Nuitka Release 0.3.1</title>
    <updated>2010-09-30T09:28:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-1"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release of Nuitka continues the focus on performance and contains
only cleanups and optimization. Most go into the direction of more
readable code, some aim at making the basic things faster, with good
results as to performance as you can see below.&lt;/p&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Constants in conditions of conditional expressions (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;a&lt;/span&gt; &lt;span class="pre"&gt;if&lt;/span&gt; &lt;span class="pre"&gt;cond&lt;/span&gt; &lt;span class="pre"&gt;else&lt;/span&gt;
&lt;span class="pre"&gt;d&lt;/span&gt;&lt;/code&gt;), &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;if&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;elif&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;while&lt;/span&gt;&lt;/code&gt; are now evaluated to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;true&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;false&lt;/span&gt;&lt;/code&gt; directly. Before there would be temporary python object
created from it which was then checked if it had a truth value.&lt;/p&gt;
&lt;p&gt;All of that is obviously overhead only. And it hurts the typically
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;while&lt;/span&gt; &lt;span class="pre"&gt;1:&lt;/span&gt;&lt;/code&gt; infinite loop case badly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not generate code to catch &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;BreakException&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ContinueException&lt;/span&gt;&lt;/code&gt; unless a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; statement
being in a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try:&lt;/span&gt; &lt;span class="pre"&gt;finally:&lt;/span&gt;&lt;/code&gt; block inside that loop actually require
this.&lt;/p&gt;
&lt;p&gt;Even while uncaught exceptions are cheap, it is still an improvement
worthwhile and it clearly improves the readability for the normal
case.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The compiler more aggressively prepares tuples, lists and dicts from
the source code as constants if their contents is “immutable” instead
of building at run time. An example of a “mutable” tuple would be
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;({},)&lt;/span&gt;&lt;/code&gt; which is not safe to share, and therefore will still be
built at run time.&lt;/p&gt;
&lt;p&gt;For dictionaries and lists, copies will be made, under the assumption
that copying a dictionary will always be faster, than making it from
scratch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The parameter parsing code was dynamically building the tuple of
argument names to check if an argument name was allowed by checking
the equivalent of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;name&lt;/span&gt; &lt;span class="pre"&gt;in&lt;/span&gt; &lt;span class="pre"&gt;argument_names&lt;/span&gt;&lt;/code&gt;. This was of course
wasteful and now a pre-built constant is used for this, so it should
be much faster to call functions with keyword arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There are new templates files and also actual templates now for the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;while&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt; loop code generation. And I started work on
having a template for assignments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Do not generate code for the else of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;while&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt; loops if
there is no such branch. This uncluttered the generated code
somewhat.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The indentation of the generated C++ was not very good and whitespace
was often trailing, or e.g. a real tab was used instead of “t”. Some
things didn’t play well together here.&lt;/p&gt;
&lt;p&gt;Now much of the generated C++ code is much more readable and white
space cleaner. For optimization to be done, the humans need to be
able to read the generated code too. Mind you, the aim is not to
produce usable C++, but on the other hand, it must be possible to
understand it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To the same end of readability, the empty &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;else&lt;/span&gt; &lt;span class="pre"&gt;{}&lt;/span&gt;&lt;/code&gt; branches are
avoided for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;if&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;while&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt; loops. While the C++
compiler can be expected to remove these, they seriously cluttered up
things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The constant management code in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Context&lt;/span&gt;&lt;/code&gt; was largely simplified.
Now the code is using the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Constant&lt;/span&gt;&lt;/code&gt; class to find its way around
the problem that dicts, sets, etc. are not hashable, or that
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;complex&lt;/span&gt;&lt;/code&gt; is not being ordered; this was necessary to allow deeply
nested constants, but it is also a simpler code now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The C++ code generated for functions now has two entry points, one
for Python calls (arguments as a list and dictionary for parsing) and
one where this has happened successfully. In the future this should
allow for faster function calls avoiding the building of argument
tuples and dictionaries all-together.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For every function there was a “traceback adder” which was only used
in the C++ exception handling before exit to CPython to add to the
traceback object. This was now in-lined, as it won’t be shared ever.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;76923.1&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.1:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.41&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;121951&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is 58% for 0.3.1, up from the 25% before. So it’s getting
somewhere. As always you will find its latest version here.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-031.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-09-30T09:28:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-030.html</id>
    <title>Nuitka Release 0.3.0</title>
    <updated>2010-09-26T17:38:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-0"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release 0.3.0 is the first release to focus on performance. In the
0.2.x series Nuitka achieved feature parity with CPython 2.6 and that
was very important, but now it is time to make it really useful.&lt;/p&gt;
&lt;p&gt;Optimization has been one of the main points, although I was also a bit
forward looking to Python 2.7 language constructs. This release is the
first where I really started to measure things and removed the most
important bottlenecks.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added option to control &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--debug&lt;/span&gt;&lt;/code&gt;. With this option the C++ debug
information is present in the file, otherwise it is not. This will
give much smaller “.so” and “.exe” files than before.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--no-optimization&lt;/span&gt;&lt;/code&gt; to disable all optimization.&lt;/p&gt;
&lt;p&gt;It enables C++ asserts and compiles with less aggressive C++ compiler
optimization, so it can be used for debugging purposes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for Python 2.7 set literals has been added.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="performance-enhancements"&gt;
&lt;h2&gt;Performance Enhancements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fast global variables: Reads of global variables were fast already.
This was due to a trick that is now also used to check them and to do
a much quicker update if they are already set.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fast &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; statements: To make sure these statements
execute the finally handlers if inside a try, these used C++
exceptions that were caught by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;try&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;finally&lt;/span&gt;&lt;/code&gt; in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;while&lt;/span&gt;&lt;/code&gt; or
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;for&lt;/span&gt;&lt;/code&gt; loops.&lt;/p&gt;
&lt;p&gt;This was very slow and had very bad performance. Now it is checked if
this is at all necessary and then it’s only done for the rare case
where a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; really is inside the tried block.
Otherwise it is now translated to a C++ &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; which
the C++ compiler handles more efficiently.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unlikely()&lt;/span&gt;&lt;/code&gt; compiler hints to all errors handling cases to
allow the C++ compiler to generate more efficient branch code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The for loop code was using an exception handler to make sure the
iterated value was released, using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyObjectTemporary&lt;/span&gt;&lt;/code&gt; for that
instead now, which should lead to better generated code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using constant dictionaries and copy from them instead of building
them at run time even when contents was constant.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Merged some bits from the CPython 2.7 test suite that do not harm
2.6, but generally it’s a lot due to some &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;unittest&lt;/span&gt;&lt;/code&gt; module
interface changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added CPython 2.7 tests &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_dictcomps.py&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_dictviews.py&lt;/span&gt;&lt;/code&gt; which both pass when using Python 2.7.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added another benchmark extract from “PyStone” which uses a while
loop with break.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="numbers"&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;p&gt;python 2.6:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;76923.1&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nuitka 0.3.0:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Pystone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.52&lt;/span&gt;
&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="n"&gt;benchmarks&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mf"&gt;96153.8&lt;/span&gt; &lt;span class="n"&gt;pystones&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That’s a 25% speedup now and a good start clearly. It’s not yet in the
range of where i want it to be, but there is always room for more. And
the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt;/&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; exception was an important performance
regression fix.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-release-030.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-09-26T17:38:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/release-nuitka-024.html</id>
    <title>Nuitka Release 0.2.4</title>
    <updated>2010-09-22T18:29:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-2-4"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release 0.2.4 is likely the last 0.2.x release, as it’s the one
that achieved feature parity with CPython 2.6, which was the whole point
of the release series, so time to celebrate. I have stayed away (mostly)
from any optimization, so as to not be premature.&lt;/p&gt;
&lt;p&gt;From now on speed optimization is going to be the focus though. Because
right now, frankly, there is not much of a point to use Nuitka yet, with
only a minor run time speed gain in trade for a long compile time. But
hopefully we can change that quickly now.&lt;/p&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The use of exec in a local function now adds local variables to scope
it is in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The same applies to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;module_name&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; which is now
compiled correctly and adds variables to the local variables.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Raises &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UnboundLocalError&lt;/span&gt;&lt;/code&gt; when deleting a local variable with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt; twice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Raises &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NameError&lt;/span&gt;&lt;/code&gt; when deleting a global variable with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt;
twice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Read of to uninitialized closure variables gave &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;NameError&lt;/span&gt;&lt;/code&gt;, but
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UnboundLocalError&lt;/span&gt;&lt;/code&gt; is correct and raised now.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;There is now a dedicated pass over the node tree right before code
generation starts, so that some analysis can be done as late as that.
Currently this is used for determining which functions should have a
dictionary of locals.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Checking the exported symbols list, fixed all the cases where a
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;static&lt;/span&gt;&lt;/code&gt; was missing. This reduces the “module.so” sizes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With gcc the “visibility=hidden” is used to avoid exporting the
helper classes. Also reduces the “module.so” sizes, because classes
cannot be made static otherwise.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added “DoubleDeletions” to cover behaviour of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;del&lt;/span&gt;&lt;/code&gt;. It seems that
this is not part of the CPython test suite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The “OverflowFunctions” (those with dynamic local variables) now has
an interesting test, exec on a local scope, effectively adding a
local variable while a closure variable is still accessible, and a
module variable too. This is also not in the CPython test suite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restored the parts of the CPython test suite that did local star
imports or exec to provide new variables. Previously these have been
removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also “test_with.py” which covers PEP 343 has been reactivated, the
with statement works as expected.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/release-nuitka-024.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-09-22T18:29:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/release-nuitka-023.html</id>
    <title>Nuitka Release 0.2.3</title>
    <updated>2010-09-17T19:42:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-2-3"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This new release is marking a closing in on feature parity to CPython
2.6 which is an important mile stone. Once this is reached, a “Nuitka
0.3.x” series will strive for performance.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Generator functions no longer leak references when started, but not
finished.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Yield can in fact be used as an expression and returns values that
the generator user &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;send()&lt;/span&gt;&lt;/code&gt; to it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="reduced-differences-new-features"&gt;
&lt;h2&gt;Reduced Differences / New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Generator functions already worked quite fine, but now they have the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw()&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;send()&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;close()&lt;/span&gt;&lt;/code&gt; methods.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Yield is now an expression as is ought to be, it returns values put
in by &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;send()&lt;/span&gt;&lt;/code&gt; on the generator user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for extended slices:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;:,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;:,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Strange&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;:,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="tests-work"&gt;
&lt;h2&gt;Tests Work&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The “test_contextlib” is now working perfectly due to the generator
functions having a correct &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw()&lt;/span&gt;&lt;/code&gt;. Added that test back, so
context managers are now fully covered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a basic test for “overflow functions” has been added, these are
the ones which have an unknown number of locals due to the use of
language constructs &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; or &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;bla&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;*&lt;/span&gt;&lt;/code&gt; on the function
level. This one currently only highlights the failure to support it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reverted removals of extended slice syntax from some parts of the
CPython test suite.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The compiled generator types are using the new C++0x type safe enums
feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resolved a circular dependency between &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TreeBuilding&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TreeTransforming&lt;/span&gt;&lt;/code&gt; modules.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/release-nuitka-023.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-09-17T19:42:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/release-nuitka-022.html</id>
    <title>Nuitka Release 0.2.2</title>
    <updated>2010-09-11T09:41:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-2-2"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is some significant progress, a lot of important things were
addressed.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Scope analysis is now done during the tree building instead of
sometimes during code generation, this fixed a few issues that didn’t
show up in tests previously.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reference leaks of generator expressions that were not fishing, but
then deleted are not more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inlining of exec is more correct now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More accurate exception lines when iterator creation executes
compiled code, e.g. in a for loop&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The list of base classes of a class was evaluated in the context of
the class, now it is done in the context of the containing scope.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The first iterated of a generator expression was evaluated in its own
context, now it is done in the context of the containing scope.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="reduced-differences"&gt;
&lt;h2&gt;Reduced Differences&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;With the enhanced scope analysis, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;UnboundLocalError&lt;/span&gt;&lt;/code&gt; is now
correctly supported.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generator expressions (but not yet functions) have a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw()&lt;/span&gt;&lt;/code&gt;,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;send()&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;close()&lt;/span&gt;&lt;/code&gt; method.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exec can now write to local function namespace even if &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; is
provided at run time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Relative imports inside packages are now correctly resolved at
compile time when using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The compiled function type got further enhanced and cleaned up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The compiled generator expression function type lead to a massive
cleanup of the code for generator expressions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cleaned up namespaces, was still using old names, or “Py*” which is
reserved to core CPython.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Overhaul of the code responsible for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;eval&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt;, it has
been split, and it pushed the detection defaults to the C++ compiler
which means, we can do it at run time or compile time, depending on
circumstances.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Made &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyTemporaryObject&lt;/span&gt;&lt;/code&gt; safer to use, disabling copy constructor
it should be also a relief to the C++ compiler if it doesn’t have to
eliminate all its uses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The way delayed work is handled in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;TreeBuilding&lt;/span&gt;&lt;/code&gt; step has been
changed to use closured functions, should be more readable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some more code templates have been created, making the code
generation more readable in some parts. More to come.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;As I start to consider announcing Nuitka, I moved the version logic
so that the version can now be queried with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--version&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="optimization"&gt;
&lt;h2&gt;Optimization&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Name lookups for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;True&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;False&lt;/span&gt;&lt;/code&gt; and now always
detected as constants, eliminating many useless module variable
lookups.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-tests"&gt;
&lt;h2&gt;New Tests&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;More complete test of generator expressions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added test program for packages with relative imports inside the
package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The built-in &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dir()&lt;/span&gt;&lt;/code&gt; in a function was not having fully
deterministic output list, now it does.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Overall, the amount of differences between CPython and Nuitka is heading
towards zero. Also most of the improvements done in this release were
very straightforward cleanups and not much work was required, mostly
things are about cleanups and then it becomes easily right. The new type
for the compiled generator expressions was simple to create, esp. as I
could check what CPython does in its source code.&lt;/p&gt;
&lt;p&gt;For optimization purposes, I decided that generator expressions and
generator functions will be separate compiled types, as most of their
behavior will not be shared. I believe optimizing generator expressions
to run well is an important enough goal to warrant that they have their
own implementation. Now that this is done, I will repeat it with
generator functions.&lt;/p&gt;
&lt;p&gt;Generator functions already work quite fine, but like generator
expressions did before this release, they can leak references if not
finished , and they don’t have the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;throw()&lt;/span&gt;&lt;/code&gt; method, which seems very
important to the correct operation of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;contextlib&lt;/span&gt;&lt;/code&gt;. So I will
introduce a decicated type for these too, possibly in the next release.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/release-nuitka-022.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-09-11T09:41:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/release-nuitka-021.html</id>
    <title>Nuitka Release 0.2.1</title>
    <updated>2010-09-05T14:00:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-2-1"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The march goes on, this is another minor release with a bunch of
substantial improvements:&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Packages now also can be embedded with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--deep&lt;/span&gt;&lt;/code&gt; option too,
before they could not be imported from the executable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In-lined exec with their own future statements leaked these to the
surrounding code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="reduced-differences"&gt;
&lt;h2&gt;Reduced Differences&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The future print function import is now supported too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="cleanups"&gt;
&lt;h2&gt;Cleanups&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Independence of the compiled function type. When I started it was
merely &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyCFunction&lt;/span&gt;&lt;/code&gt; and then a copy of it patched at run time,
using increasingly less code from CPython. Now it’s nothing at all
anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This lead to major cleanup of run time compiled function creation
code, no more &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;methoddefs&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PyCObject&lt;/span&gt;&lt;/code&gt; holding context, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PyLint was used to find the more important style issues and potential
bugs, also helping to identify some dead code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The major difference now is the lack of a throw method for generator
functions. I will try to address that in a 0.2.2 release if possible.
The plan is that the 0.2.x series will complete these tasks, and 0.3
could aim at some basic optimization finally.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/release-nuitka-021.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-09-05T14:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/release-nuitka-02.html</id>
    <title>Nuitka Release 0.2</title>
    <updated>2010-08-28T17:12:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-2"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Good day, this is a major step ahead, improvements everywhere.&lt;/p&gt;
&lt;section id="bug-fixes"&gt;
&lt;h2&gt;Bug Fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Migrated the Python parser from the deprecated and problematic
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compiler&lt;/span&gt;&lt;/code&gt; module to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ast&lt;/span&gt;&lt;/code&gt; module which fixes the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;d[a,]&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt;
&lt;span class="pre"&gt;b&lt;/span&gt;&lt;/code&gt; parser problem. A pity it was not available at the time I
started, but the migration was relatively painless now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I found and fixed wrong encoding of binary data into C++ literals.
Now Nuitka uses C++0x raw strings, and these problems are gone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The decoding of constants was done with the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;marshal&lt;/span&gt;&lt;/code&gt; module, but
that appears to not deeply care enough about unicode encoding it
seems. Using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;cPickle&lt;/span&gt;&lt;/code&gt; now, which seems less efficient, but is more
correct.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Another difference is gone: The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;continue&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;break&lt;/span&gt;&lt;/code&gt; inside
loops do no longer prevent the execution of finally blocks inside the
loop.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="organizational"&gt;
&lt;h2&gt;Organizational&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I now maintain the “README.txt” in org-mode, and intend to use it as
the issue tracker, but I am still a beginner at that.&lt;/p&gt;
&lt;div class="admonition-update admonition"&gt;
&lt;p class="admonition-title"&gt;Update&lt;/p&gt;
&lt;p&gt;Turned out I never mastered it, and used ReStructured Text
instead.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is a public git repository for you to track Nuitka releases.
Make your changes and then &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt; &lt;span class="pre"&gt;pull&lt;/span&gt; &lt;span class="pre"&gt;--rebase&lt;/span&gt;&lt;/code&gt;. If you encounter
conflicts in things you consider useful, please submit the patches
and a pull request. When you make your clones of Nuitka public, use
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nuitka-unofficial&lt;/span&gt;&lt;/code&gt; or not the name &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka&lt;/span&gt;&lt;/code&gt; at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is a now a mailing list (since closed).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="reduced-differences"&gt;
&lt;h2&gt;Reduced Differences&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Did you know you could write &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;lambda&lt;/span&gt; &lt;span class="pre"&gt;:&lt;/span&gt; &lt;span class="pre"&gt;(yield&lt;/span&gt; &lt;span class="pre"&gt;something)&lt;/span&gt;&lt;/code&gt; and it
gives you a lambda that creates a generator that produces that one
value? Well, now Nuitka has support for lambda generator functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;__future__&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;division&lt;/span&gt;&lt;/code&gt; statement works as expected
now, leading to some newly passing CPython tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Same for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from&lt;/span&gt; &lt;span class="pre"&gt;__future__&lt;/span&gt; &lt;span class="pre"&gt;import&lt;/span&gt; &lt;span class="pre"&gt;unicode_literals&lt;/span&gt;&lt;/code&gt; statement, these
work as expected now, removing many differences in the CPython tests
that use this already.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="new-features"&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Python&lt;/span&gt;&lt;/code&gt; binary provided and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Nuitka.py&lt;/span&gt;&lt;/code&gt; are now capable of
accepting parameters for the program executed, in order to make it
even more of a drop-in replacement to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inlining of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;exec&lt;/span&gt;&lt;/code&gt; statements with constant expressions. These are
now compiled at compile time, not at run time anymore. I observed
that an increasing number of CPython tests use exec to do things in
isolation or to avoid warnings, and many more these tests will now be
more effective. I intend to do the same with eval expressions too,
probably in a minor release.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;So give it a whirl. I consider it to be substantially better than
before, and the list of differences to CPython is getting small enough,
plus there is already a fair bit of polish to it. Just watch out that it
needs gcc-4.5 or higher now.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/release-nuitka-02.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-08-28T17:12:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/minor-release-nuitka-011.html</id>
    <title>Nuitka Release 0.1.1</title>
    <updated>2010-08-22T15:45:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-1-1"&gt;

&lt;p&gt;This is to inform you about the new stable release of &lt;a class="reference external" href="https://nuitka.net"&gt;Nuitka&lt;/a&gt;. It is the extremely compatible Python compiler,
&lt;a class="reference external" href="/doc/download.html"&gt;“download now”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I just have just updated Nuitka to version 0.1.1 which is a bug fix
release to 0.1, which corrects many of the small things:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Updated the CPython test suite to 2.6.6rc and minimized much of
existing differences in the course.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compiles standalone executable that includes modules (with –deep
option), but packages are not yet included successfully.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reference leaks with exceptions are no more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sys.exc_info()&lt;/span&gt;&lt;/code&gt; works now mostly as expected (it’s not a stack of
exceptions).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More readable generated code, better organisation of C++ template
code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restored debug option &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;--g++-only&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The biggest thing probably is the progress with exception tracebacks
objects in exception handlers, which were not there before (always
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;). Having these in place will make it much more compatible. Also
with manually raised exceptions and assertions, tracebacks will now be
more correct to the line.&lt;/p&gt;
&lt;p&gt;On a bad news, I discovered that the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;compiler&lt;/span&gt;&lt;/code&gt; module that I use to
create the AST from Python source code, is not only deprecated, but also
broken. I created the &lt;a class="reference external" href="http://bugs.python.org/issue9656"&gt;CPython bug&lt;/a&gt;
about it, basically it cannot distinguish some code of the form &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;d[1,]&lt;/span&gt;
&lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; from &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;d[1]&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt;. This will require a migration of the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ast&lt;/span&gt;&lt;/code&gt; module, which should not be too challenging, but will take some
time.&lt;/p&gt;
&lt;p&gt;I am aiming at it for a 0.2 release. Generating wrong code (Nuitka sees
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;d[1]&lt;/span&gt; &lt;span class="pre"&gt;=&lt;/span&gt; &lt;span class="pre"&gt;None&lt;/span&gt;&lt;/code&gt; in both cases) is a show blocker and needs a solution.&lt;/p&gt;
&lt;p&gt;So, yeah. It’s better, it’s there, but still experimental. You will find
its latest version here. Please try it out and let me know what you
think in the comments section.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/minor-release-nuitka-011.html"/>
    <summary>This is to inform you about the new stable release of Nuitka. It is the extremely compatible Python compiler,
“download now”.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-08-22T15:45:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/releasing-nuitka-to-the-world.html</id>
    <title>Nuitka Release 0.1 (Releasing Nuitka to the World)</title>
    <updated>2010-08-18T07:49:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-1-releasing-nuitka-to-the-world"&gt;

&lt;p&gt;Obviously this is very exciting step for me. I am releasing Nuitka
today. Finally. For a long time I knew I would, but actually doing it,
is a different beast. Reaching my goals for release turned out to be
less far away than I hope, so instead of end of August, I can already
release it now.&lt;/p&gt;
&lt;p&gt;Currently it’s not more than 4% faster than CPython. No surprise there,
if all you did, is removing the bytecode interpretation so far. It’s not
impressive at all. It’s not even a reason to use it. But it’s also only
a start. Clearly, once I get into optimizing the code generation of
Nuitka, it will only get better, and then probably in sometimes dramatic
steps. But I see this as a long term goal.&lt;/p&gt;
&lt;p&gt;I want to have infrastructure in the code place, before doing lots of
possible optimization that just make Nuitka unmaintainable. And I will
want to have a look at what others did so far in the domain of type
inference and how to apply that for my project.&lt;/p&gt;
&lt;p&gt;I look forward to the reactions about getting this far. The supported
language volume is amazing, and I have a set of nice tricks used. For
example the way generator functions are done is a clever hack.&lt;/p&gt;
&lt;p&gt;Where to go from here? Well, I guess, I am going to judge it by the
feedback I receive. I personally see “constant propagation” as a
laudable first low hanging fruit, that could be solved.&lt;/p&gt;
&lt;p&gt;Consider this readable code on the module level:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;meters_per_nautical_mile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1852&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;convertMetersToNauticalMiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meters&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;meters&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;meters_per_nautical_mile&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;convertNauticalMilesToMeters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;miles&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;miles&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;meters_per_nautical_mile&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now imagine you are using this very frequently in code. Quickly you
determine that the following will be much faster:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;convertMetersToNauticalMiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meters&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;meters&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1852&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;convertNauticalMilesToMeters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;miles&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;miles&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1852&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Still good? Well, probably next step you are going to in-line the
function calls entirely. For optimization, you are making your code less
readable. I do not all appreciate that. My first goal is there to make
the more readable code perform as well or better as the less readable
variant.&lt;/p&gt;
&lt;p&gt;But yes, lets see what happens. Oh, and you will find its &lt;a class="reference external" href="/doc/download.html"&gt;latest
version here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Kay Hayen&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/releasing-nuitka-to-the-world.html"/>
    <summary>Obviously this is very exciting step for me. I am releasing Nuitka
today. Finally. For a long time I knew I would, but actually doing it,
is a different beast. Reaching my goals for release turned out to be
less far away than I hope, so instead of end of August, I can already
release it now.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <published>2010-08-18T07:49:00+01:00</published>
  </entry>
</feed>
