<?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 - Posted in 2020</title>
  <updated>2026-05-14T19:04:06.461108+00:00</updated>
  <link href="https://nuitka.net/"/>
  <link href="https://nuitka.net/blog/2020/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.6">ABlog</generator>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0610.html</id>
    <title>Nuitka Release 0.6.10</title>
    <updated>2020-12-22T15:38:00+01: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+01: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+02: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+02: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+02: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+02: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+01: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+01: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+01: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+01:00</published>
  </entry>
</feed>
