<?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 2017</title>
  <updated>2026-07-13T17:30:38.420237+00:00</updated>
  <link href="https://nuitka.net/"/>
  <link href="https://nuitka.net/blog/2017/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.13">ABlog</generator>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0528.html</id>
    <title>Nuitka Release 0.5.28</title>
    <updated>2017-10-18T11:00:00+02: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+02: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+02: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+02: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+02: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+02: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+01: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+01:00</published>
  </entry>
</feed>
