<?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 2011</title>
  <updated>2026-05-14T19:04:06.847007+00:00</updated>
  <link href="https://nuitka.net/"/>
  <link href="https://nuitka.net/blog/2011/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.6">ABlog</generator>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0316.html</id>
    <title>Nuitka Release 0.3.16</title>
    <updated>2011-12-18T17:24:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-16"&gt;

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

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

&lt;p&gt;There is now a Windows installer and a Debian package of &lt;a class="reference external" href="/pages/overview.html"&gt;Nuitka&lt;/a&gt; available on the &lt;a class="reference external" href="/doc/download.html"&gt;Download&lt;/a&gt; page. Please try it out and give me feedback.&lt;/p&gt;
&lt;p&gt;Specifically I do know that the Debian package won’t work on Debian
Squeeze, but only on Debian Wheezy (Testing) maybe it does on Ubuntu as
well, please report. If you have anything to criticize about the
package, let me know. There is no apt source now, I hope to get it into
Debian proper directly.&lt;/p&gt;
&lt;p&gt;UPDATE: After Stani’s report that Ubuntu has an older Scons, I lowered
the dependency and updated the package on the page. It may now work on
Ubuntu as well.&lt;/p&gt;
&lt;p&gt;And then, the Windows installer still requires you to install MinGW and
add it to your path, but it’s clearly a huge step ahead. It’s created
with distutils, and that works very well. If you have the skills to
enhance it, so e.g. the PATH variable is changed, or it will launch a
MinGW install if not present, contact me and help.&lt;/p&gt;
&lt;p&gt;UPDATE: And the idea that I got while writing a reply to “swong” is also
now implemented. The new Nuitka on Windows simply guesses the PATH to
MinGW to be the default path &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;C:\MinGW&lt;/span&gt;&lt;/code&gt; or at least &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;\MinGW&lt;/span&gt;&lt;/code&gt; and
from there, it ought to just run after you installed it. Of course you
can still set your own PATH environment and make the pick yourself.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay Hayen&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-debian-package-and-windows-installer.html"/>
    <summary>There is now a Windows installer and a Debian package of Nuitka available on the Download page. Please try it out and give me feedback.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <published>2011-11-13T22:20:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0314.html</id>
    <title>Nuitka Release 0.3.14</title>
    <updated>2011-11-07T20:52:00+01:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-14"&gt;

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

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

&lt;p&gt;This is my 7rd old son in his “Halloween” outfit. It is the first time,
he was allowed to do it and so he was very excited.&lt;/p&gt;
&lt;p&gt;The link to Python is the T-shirt “Don’t Panic - Use Python”. I got that
from PyCON DE, and the family loves it.&lt;/p&gt;
&lt;figure class="align-default" id="id1"&gt;
&lt;a class="reference external image-reference" href="/_images/IMG_0072-765x1024.jpg"&gt;&lt;img alt="Michael wears Python T-shirt for Halloween." src="https://nuitka.net/_images/IMG_0072-765x1024.jpg" style="width: 80%;" /&gt;
&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;&lt;span class="caption-text"&gt;Michael in his Halloween outfit.&lt;/span&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/puting-a-conference-t-shirt-to-good-use.html"/>
    <summary>This is my 7rd old son in his “Halloween” outfit. It is the first time,
he was allowed to do it and so he was very excited.</summary>
    <category term="Python" label="Python"/>
    <category term="family" label="family"/>
    <published>2011-11-01T09:11:00+01:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0312.html</id>
    <title>Nuitka Release 0.3.12</title>
    <updated>2011-10-24T20:43:00+02:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-12"&gt;

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

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

&lt;p&gt;The new cat has become indispensable for just about anything. She
follows throughout the hous, and is just too lovely, here two photos of
her in typical spots.&lt;/p&gt;
&lt;p&gt;When I code for Nuitka, she often lays between keyboard and monitors,
sleeping, getting caressed by me.&lt;/p&gt;
&lt;figure class="align-default"&gt;
&lt;a class="reference external image-reference" href="/_images/IMG_3837-768x1024.jpg"&gt;&lt;img alt="Cat Muska laying in her usual place between monitor and keyboard." src="https://nuitka.net/_images/IMG_3837-768x1024.jpg" style="width: 80%;" /&gt;
&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;And here is another one, hiding in her cat tree.&lt;/p&gt;
&lt;figure class="align-default"&gt;
&lt;a class="reference external image-reference" href="/_images/IMG_3767.jpg"&gt;&lt;img alt="Cat muska in her cat tree box." src="https://nuitka.net/_images/IMG_3767.jpg" style="width: 80%;" /&gt;
&lt;/a&gt;
&lt;/figure&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/cat-update.html"/>
    <summary>The new cat has become indispensable for just about anything. She
follows throughout the hous, and is just too lovely, here two photos of
her in typical spots.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="family" label="family"/>
    <published>2011-10-18T17:36:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/my-7yr-old-fotographer.html</id>
    <title>My 7yr old fotographer</title>
    <updated>2011-10-18T17:24:00+02:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="my-7yr-old-fotographer"&gt;

&lt;p&gt;This photo was shot by my 7yr old son. It’s truly artful, if not
perfect. I have not applied any correction. He has my old camera, and
knows how to use it, more and more.&lt;/p&gt;
&lt;figure class="align-default" id="id1"&gt;
&lt;a class="reference external image-reference" href="/_images/Michael-shot-of-his-mom.jpg"&gt;&lt;img alt="Artful photo of his mom taken by my son Michael" src="https://nuitka.net/_images/Michael-shot-of-his-mom.jpg" style="width: 80%;" /&gt;
&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;&lt;span class="caption-text"&gt;Michael shot of his mom&lt;/span&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/my-7yr-old-fotographer.html"/>
    <summary>This photo was shot by my 7yr old son. It’s truly artful, if not
perfect. I have not applied any correction. He has my old camera, and
knows how to use it, more and more.</summary>
    <category term="family" label="family"/>
    <published>2011-10-18T17:24:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/pycon-de-2011-my-report.html</id>
    <title>PyCON DE 2011 - My Report</title>
    <updated>2011-10-08T21:24:00+02:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="pycon-de-2011-my-report"&gt;

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

&lt;p&gt;Hello there,&lt;/p&gt;
&lt;p&gt;this is to let you know that I have switched &lt;a class="reference external" href="/pages/overview.html"&gt;Nuitka&lt;/a&gt; to the &lt;a class="reference external" href="https://github.com/nvie/gitflow"&gt;“git flow”&lt;/a&gt; development model. That means, now
there is a supported stable version, and a develop branch, together with
feature branches.&lt;/p&gt;
&lt;section id="example"&gt;
&lt;h2&gt;Example&lt;/h2&gt;
&lt;figure class="align-default" id="id1"&gt;
&lt;a class="reference external image-reference" href="/_images/Nuitka-git-flow.png"&gt;&lt;img alt="Git flow example for Nuitka release 0.3.12" src="https://nuitka.net/_images/Nuitka-git-flow.png" style="width: 60%;" /&gt;
&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;&lt;span class="caption-text"&gt;Git flow example for Nuitka release 0.3.12&lt;/span&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;In case, you want and can improve the source (link since removed)
visually or otherwise, please go ahead. I am using it for a
presentation next week too, and would be glad if you could make it
more pretty. My artistic skills are not the same as my programmer
skills. :-)&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;So there is now always at least these 2 branches:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Stable &lt;a class="reference external" href="https://nuitka.net/gitweb/?p=Nuitka.git;a=shortlog;h=refs/heads/master"&gt;(master branch)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unstable &lt;a class="reference external" href="https://nuitka.net/gitweb/?p=Nuitka.git;a=shortlog;h=refs/heads/develop"&gt;(develop branch)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and then there may be feature branches, like this one currently:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Feature branch &lt;a class="reference external" href="https://nuitka.net/gitweb/?p=Nuitka.git;a=shortlog;h=refs/heads/feature/minimize_CPython26_tests_diff"&gt;minimize_CPython26_tests_diff&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These will only have certain life, until they are completed, then they
are merge into “develop” and become part of the next release. This may
or may not happen, depending on how things go.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benefits-of-the-new-model"&gt;
&lt;h2&gt;Benefits of the new model&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Hotfixes, typically bug fixes, can be made simultaneously on stable
and develop branch. The git-flow package takes care of the merging to
both.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Because that’s so easy now, a stable version can be provided and
supported for a longer time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Features can be published while under development. My idea is that
feature branches should basically work, but the bar will be lower.
People can have a look at them, or start their own and make me
integrate them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="uses-of-feature-branch"&gt;
&lt;h2&gt;Uses of Feature Branch&lt;/h2&gt;
&lt;p&gt;For example, in the new feature branch, a couple of boring things are
happening. Support for frame stack will reduce the diff, as will some
work to match CPython’s choices for exception line numbers. Completing
will take a while, but should not block a release. So this is best done
in the feature branch, esp. as nothing is going to really depend on it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="general-picture"&gt;
&lt;h2&gt;General Picture&lt;/h2&gt;
&lt;p&gt;As you can see from this diagram, I am working mostly on documentation
things. The new and improved README on develop, which is closer to a
User Manual in PDF form, and other organization things, may get a
release before the PyCon DE next week. The README also describes this
process.&lt;/p&gt;
&lt;p&gt;Hope is that with this approach, I will improve transparency (you can
see earlier what i am working on, because there is now a place where
things may break (develop) or may not yet be integrated or completed
fully (feature branches) and yet be public.&lt;/p&gt;
&lt;p&gt;The overhead appears to minimal thanks to “git-flow”. Developing
hotfixes is actually easier, when done on the stable branch, because
problems cannot originate from the current development work that may or
may not be all that perfect yet.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay Hayen&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-git-flow.html"/>
    <summary>Hello there,</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="git" label="git"/>
    <published>2011-10-01T08:37:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0311.html</id>
    <title>Nuitka Release 0.3.11</title>
    <updated>2011-09-17T02:41:00+02:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-11"&gt;

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

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

&lt;p&gt;Hello everybody,&lt;/p&gt;
&lt;p&gt;my new vServer is now online, the old site blog redirects to it now, and
planets follow the new site already. The old site is redirecting with
301 error code for some more time, hopefully this will be good enough of
a migration. It felt smooth from here, clearly, and the new site is much
faster of course, because it’s not throttled through my poor DSL
upstream.&lt;/p&gt;
&lt;p&gt;I also registered it a domain name &lt;a class="reference external" href="https://nuitka.net"&gt;“nuitka.net”&lt;/a&gt;
for it finally. Originally I wanted to give it a DynDNS name, but I
already have 2, and the third was supposed to cost money, and I didn’t
feel like using another service, or cheating them if you consider that
an option, so that was it, I bought the domain name. Clearly it will
also be easier for people to remember.&lt;/p&gt;
&lt;p&gt;Moving things over was pretty painless. The Wordpress software has a
pretty good export feature, which only didn’t manage the custom menu and
appearance settings. But I guess it’s about content anyway, so probably
some way that would work too, but it was easy enough to reproduce that
by hand. I appreciate Wordpress even more now.&lt;/p&gt;
&lt;p&gt;Also I did some tuning of the system, to use less memory. Only 512M are
available, and so I run less Apache processes for less requests (memory
leaks), disabled IPv6 (yes, hate me for it), reduced amounts of gettys,
and so on. Nothing I am not familiar with, the ARM machine had 512M as
well, and to me no reason to use the bigger package just because of
that.&lt;/p&gt;
&lt;p&gt;The main difference is the faster CPU, I seem to get 3Ghz Intel now,
instead of my 1Ghz ARM, which together with faster internet speed, makes
the site extremely fast.&lt;/p&gt;
&lt;p&gt;Now U will dare to make the &lt;a class="reference external" href="/gitweb/?p=Nuitka.git;a=summary"&gt;gitweb interface&lt;/a&gt; public as well. The git repository
is already running there.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;This is obsolete information, we use GitHub for this now.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;And I took the chance to sanitize the old posts somewhat. Changed the
links to not use the old domain name anymore, and correct some broken
ones too.&lt;/p&gt;
&lt;p&gt;Only downside is that I currently haven’t got the &lt;a class="reference external" href="https://speedcenter.nuitka.net"&gt;“speedcenter”&lt;/a&gt; up and running again. After losing my
hardware, the old data cannot be compared with new one, and then it
doesn’t feel like a priority right now. I seem to be working instead on
XML based regression tests of the optimizer: The output of “–dump-xml”
should be compared for a large quantity of files, to discover
regressions of the optimizer as soon as possible, this will enable me to
make changes and not have to review the C++ as much, to find out if
something is compiled correctly. This way I should detect it when known
good cases degrade, and generally to demonstrate better, what actually
did improve.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay Hayen&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;PS: Oh, you people, who wonder, “but why are you not using
Google/github/gitorious?”, my counter question: “Did you read the
agreement?” I did. It basically says (from Google code):&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="mf"&gt;13.&lt;/span&gt; &lt;span class="n"&gt;INDEMNITY&lt;/span&gt;

&lt;span class="n"&gt;You&lt;/span&gt; &lt;span class="n"&gt;agree&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;hold&lt;/span&gt; &lt;span class="n"&gt;harmless&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;indemnify&lt;/span&gt; &lt;span class="n"&gt;Google&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;its&lt;/span&gt; &lt;span class="n"&gt;subsidiaries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;affiliates&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;officers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;advertisers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;licensors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;suppliers&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;partners&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;collectively&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Google and Partners&amp;quot;&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;and&lt;/span&gt; &lt;span class="n"&gt;against&lt;/span&gt; &lt;span class="nb"&gt;any&lt;/span&gt; &lt;span class="n"&gt;third&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;party&lt;/span&gt; &lt;span class="n"&gt;claim&lt;/span&gt; &lt;span class="n"&gt;arising&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;or&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;any&lt;/span&gt; &lt;span class="n"&gt;way&lt;/span&gt; &lt;span class="n"&gt;related&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;Google&lt;/span&gt; &lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;violation&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;Terms&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nb"&gt;any&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt; &lt;span class="n"&gt;actions&lt;/span&gt; &lt;span class="n"&gt;connected&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;Google&lt;/span&gt; &lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;including&lt;/span&gt; &lt;span class="nb"&gt;any&lt;/span&gt; &lt;span class="n"&gt;liability&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;expense&lt;/span&gt; &lt;span class="n"&gt;arising&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;all&lt;/span&gt; &lt;span class="n"&gt;claims&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;losses&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;damages&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actual&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;consequential&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;suits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;judgments&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;litigation&lt;/span&gt; &lt;span class="n"&gt;costs&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;attorneys&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; fees, of every kind and nature. In such a case, Google will provide you with written notice of such claim, suit or action.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;No thank you, instead I will run my own server, then I get to pay the
attorneys of my discretion - in the admittedly unlikely event that
somebody should sue me, because my Compiler violates some patent, or
whatever.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-has-a-new-home---nuitkanet.html"/>
    <summary>Hello everybody,</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="git" label="git"/>
    <published>2011-08-16T18:21:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-0310.html</id>
    <title>Nuitka Release 0.3.10</title>
    <updated>2011-07-31T17:12:00+02:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-10"&gt;

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


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


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

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

&lt;p&gt;This is the latest addition to the family, our beautiful, young and
lovely cat:&lt;/p&gt;
&lt;figure class="align-default" id="id1"&gt;
&lt;a class="reference external image-reference" href="/_images/IMG_3530-1.jpg"&gt;&lt;img alt="Image of Muska on her first day with us." src="https://nuitka.net/_images/IMG_3530-1.jpg" style="width: 80%;" /&gt;
&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;&lt;span class="caption-text"&gt;Muska on her first day with us.&lt;/span&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Her name is Muska, and she is with us for a week now. This is an image
from her first day in our house.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/the-new-cat.html"/>
    <summary>This is the latest addition to the family, our beautiful, young and
lovely cat:</summary>
    <category term="family" label="family"/>
    <published>2011-07-31T12:49:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-039.html</id>
    <title>Nuitka Release 0.3.9</title>
    <updated>2011-04-24T11:19:00+02:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-9"&gt;

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

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

&lt;p&gt;My wife has passed the final exams here in Germany finally. I am very
proud of her for managing that. It’s with 2 kids born, a new house
built, and lots of difficulties, like not living in a city with a
university that offers medicin as a study course.&lt;/p&gt;
&lt;p&gt;To celebrate, here is a picture of her from happy days (no photoshop
unlike the &lt;a class="reference external" href="/posts/family-photo.html"&gt;last time&lt;/a&gt;):&lt;/p&gt;
&lt;figure class="align-default" id="id1"&gt;
&lt;a class="reference external image-reference" href="/_images/Anna_Dithmarsia.jpg"&gt;&lt;img alt="Image of my wife" src="https://nuitka.net/_images/Anna_Dithmarsia.jpg" style="width: 80%;" /&gt;
&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;&lt;span class="caption-text"&gt;Anna in front of a bush in Dithmarsia (my home state).&lt;/span&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/shes-a-doctor-now.html"/>
    <summary>My wife has passed the final exams here in Germany finally. I am very
proud of her for managing that. It’s with 2 kids born, a new house
built, and lots of difficulties, like not living in a city with a
university that offers medicin as a study course.</summary>
    <category term="family" label="family"/>
    <published>2011-04-16T11:48:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-release-038---windows-support.html</id>
    <title>Nuitka Release 0.3.8</title>
    <updated>2011-04-03T00:30:00+02:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-release-0-3-8"&gt;

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

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

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

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

&lt;p&gt;Say you have the following code:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Bad bad float!&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;What value of “s” and then “x” can make the code complain? Do you see
the really bad side of it?&lt;/p&gt;
&lt;p&gt;The answer is in the next paragraph, so stop reading if you want to find
out yourself.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="solution"&gt;
&lt;h1&gt;Solution&lt;/h1&gt;
&lt;p&gt;The correct answer is that there is one float that is not equal to
itself and that is float(“nan”). Which I find terrible. It is so bad, it
spoils set, dict, and everything there is. Any container that has it
inside is no longer equal to itself.&lt;/p&gt;
&lt;p&gt;Surprised? I was too! I only learned it while doing my &lt;a class="reference external" href="/pages/overview.html"&gt;Python compiler
Nuitka&lt;/a&gt; and I made it a separate posting,
because it really surprised me how this could possibly happen. A builtin
type that breaks fundamental assumptions like “x == x”.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/python-float-quiz.html"/>
    <summary>Say you have the following code:</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="quiz" label="quiz"/>
    <published>2011-01-02T13:37:00+01:00</published>
  </entry>
</feed>
