<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEEARn47eyp7ImA9WhBbGEo.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152</id><updated>2013-05-18T12:24:07.003+02:00</updated><category term="arm" /><category term="speed" /><category term="cli" /><category term="valgrind" /><category term="extension modules" /><category term="sun" /><category term="ep2008" /><category term="cffi" /><category term="stm" /><category term="kcachegrind" /><category term="PyQt4" /><category term="parser" /><category term="CPython" /><category term="RPyC" /><category term="jython" /><category term="jit" /><category term="cpyext" /><category term="profiling" /><category term="pypy" /><category term="compiler" /><category term="sprint" /><category term="roadmap" /><title>PyPy Status Blog</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://morepypy.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Carl Friedrich Bolz</name><uri>http://www.blogger.com/profile/00518922641059511014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>265</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/PyPyStatusBlog" /><feedburner:info uri="pypystatusblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DkUESXo9eip7ImA9WhBbF08.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-6316445093061941482</id><published>2013-05-16T19:10:00.000+02:00</published><updated>2013-05-16T19:10:08.462+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-16T19:10:08.462+02:00</app:edited><title>PyPy 2.0.1 - Bohr Smørrebrød</title><content type="html">&lt;p&gt;We're pleased to announce PyPy 2.0.1.  This is a stable bugfix release
over &lt;a class="reference external" href="http://morepypy.blogspot.ch/2013/05/pypy-20-einstein-sandwich.html"&gt;2.0&lt;/a&gt;.  You can download it here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;a class="reference external" href="http://pypy.org/download.html"&gt;http://pypy.org/download.html&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;The fixes are mainly about fatal errors or crashes in our stdlib.  See
below for more details.&lt;/p&gt;
&lt;div class="section" id="what-is-pypy"&gt;
&lt;h1&gt;What is PyPy?&lt;/h1&gt;
&lt;p&gt;PyPy is a very compliant Python interpreter, almost a drop-in replacement for
CPython 2.7. It's fast (&lt;a class="reference external" href="http://speed.pypy.org"&gt;pypy 2.0 and cpython 2.7.3&lt;/a&gt; performance comparison)
due to its integrated tracing JIT compiler.&lt;/p&gt;
&lt;p&gt;This release supports x86 machines running Linux 32/64, Mac OS X 64 or
Windows 32.  Support for ARM is progressing but not bug-free yet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="highlights"&gt;
&lt;h1&gt;Highlights&lt;/h1&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;fix an occasional crash in the JIT that ends in &lt;a class="reference external" href="https://bugs.pypy.org/issue1482"&gt;RPython Fatal error:
NotImplementedError&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;id(x)&lt;/cite&gt; is now always a positive number (except on int/float/long/complex).
This fixes an issue in &lt;tt class="docutils literal"&gt;_sqlite.py&lt;/tt&gt; (mostly for 32-bit Linux).&lt;/li&gt;
&lt;li&gt;fix crashes of callback-from-C-functions (with cffi) when used together
with Stackless features, on asmgcc (i.e. Linux only).  Now &lt;a class="reference external" href="http://mail.python.org/pipermail/pypy-dev/2013-May/011362.html"&gt;gevent should
work better&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;work around an eventlet issue with &lt;a class="reference external" href="https://bugs.pypy.org/issue1468"&gt;socket._decref_socketios()&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cheers,
arigo et. al. for the PyPy team&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/q2ijxAdBLcQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/6316445093061941482/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=6316445093061941482" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/6316445093061941482?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/6316445093061941482?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/q2ijxAdBLcQ/pypy-201-bohr-smrrebrd.html" title="PyPy 2.0.1 - Bohr Smørrebrød" /><author><name>Armin Rigo</name><uri>http://www.blogger.com/profile/06300515270104686574</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/05/pypy-201-bohr-smrrebrd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUADR3Y9fCp7ImA9WhBbEkQ.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-4176018422530420763</id><published>2013-05-11T18:19:00.000+02:00</published><updated>2013-05-11T20:42:56.864+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-11T20:42:56.864+02:00</app:edited><title>Numpy Status Update</title><content type="html">Hello Everyone,&lt;br /&gt;
&lt;br /&gt;
I've started to work on NumPyPy since the end of April and here is a short update :&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;I implemented pickling support on ndarrays and dtypes, it will be compatible with numpy's pickling protocol when the "numpypy" module will be renamed to "numpy".&lt;/li&gt;
&lt;li&gt;I am now working on subarrays.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I would also like to thank everyone who donated and allowed me to work on this.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Cheers,&lt;/div&gt;
&lt;div&gt;
Romain Guillebert&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/MlBZ_KUQ3aI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/4176018422530420763/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=4176018422530420763" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4176018422530420763?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4176018422530420763?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/MlBZ_KUQ3aI/numpy-status-update.html" title="Numpy Status Update" /><author><name>Romain Guillebert</name><uri>http://www.blogger.com/profile/13855081749436495258</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/05/numpy-status-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEDQXwyeip7ImA9WhBbEU8.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-635158782365435530</id><published>2013-05-09T20:37:00.000+02:00</published><updated>2013-05-09T20:37:50.292+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-09T20:37:50.292+02:00</app:edited><title>PyPy 2.0 - Einstein Sandwich</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;We're pleased to announce PyPy 2.0. This is a stable release that brings
a swath of bugfixes, small performance improvements and compatibility fixes.
PyPy 2.0 is a big step for us and we hope in the future we'll be able to
provide stable releases more often.&lt;/p&gt;
&lt;p&gt;You can download the PyPy 2.0 release here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;a class="reference external" href="http://pypy.org/download.html"&gt;http://pypy.org/download.html&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;The two biggest changes since PyPy 1.9 are:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;stackless is now supported including greenlets, which means eventlet
and gevent should work (but read below about gevent)&lt;/li&gt;
&lt;li&gt;PyPy now contains release 0.6 of &lt;a class="reference external" href="http://cffi.readthedocs.org"&gt;cffi&lt;/a&gt; as a builtin module, which
is preferred way of calling C from Python that works well on PyPy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you're using PyPy for anything, it would help us immensely if you fill out
the following survey: &lt;a class="reference external" href="http://bit.ly/pypysurvey"&gt;http://bit.ly/pypysurvey&lt;/a&gt; This is for the developers
eyes and we will not make any information public without your agreement.&lt;/p&gt;
&lt;div class="section" id="what-is-pypy"&gt;
&lt;h3&gt;What is PyPy?&lt;/h3&gt;
&lt;p&gt;PyPy is a very compliant Python interpreter, almost a drop-in replacement for
CPython 2.7. It's fast (&lt;a class="reference external" href="http://speed.pypy.org"&gt;pypy 2.0 and cpython 2.7.3&lt;/a&gt; performance comparison)
due to its integrated tracing JIT compiler.&lt;/p&gt;
&lt;p&gt;This release supports x86 machines running Linux 32/64, Mac OS X 64 or
Windows 32.  Windows 64 work is still stalling, we would welcome a volunteer
to handle that. ARM support is on the way, as you can see from the recently
released alpha for ARM.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="highlights"&gt;
&lt;h3&gt;Highlights&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Stackless including greenlets should work. For gevent, you need to check
out &lt;a class="reference external" href="https://github.com/gevent-on-pypy/pypycore/"&gt;pypycore&lt;/a&gt; and use the &lt;a class="reference external" href="https://github.com/schmir/gevent/tree/pypy-hacks"&gt;pypy-hacks&lt;/a&gt; branch of gevent.&lt;/li&gt;
&lt;li&gt;cffi is now a module included with PyPy.  (&lt;a class="reference external" href="http://cffi.readthedocs.org"&gt;cffi&lt;/a&gt; also exists for
CPython; the two versions should be fully compatible.)  It is the
preferred way of calling C from Python that works on PyPy.&lt;/li&gt;
&lt;li&gt;Callbacks from C are now JITted, which means XML parsing is much faster.&lt;/li&gt;
&lt;li&gt;A lot of speed improvements in various language corners, most of them small,
but speeding up some particular corners a lot.&lt;/li&gt;
&lt;li&gt;The JIT was refactored to emit machine code which manipulates a &amp;quot;frame&amp;quot;
that lives on the heap rather than on the stack.  This is what makes
Stackless work, and it could bring another future speed-up (not done yet).&lt;/li&gt;
&lt;li&gt;A lot of stability issues fixed.&lt;/li&gt;
&lt;li&gt;Refactoring much of the numpypy array classes, which resulted in removal of
lazy expression evaluation. On the other hand, we now have more complete
dtype support and support more array attributes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
fijal, arigo and the PyPy team&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/6GxK0eWWxmM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/635158782365435530/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=635158782365435530" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/635158782365435530?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/635158782365435530?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/6GxK0eWWxmM/pypy-20-einstein-sandwich.html" title="PyPy 2.0 - Einstein Sandwich" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/05/pypy-20-einstein-sandwich.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUFQ3o-cSp7ImA9WhBUGU4.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-2318299473927531503</id><published>2013-05-07T14:35:00.002+02:00</published><updated>2013-05-07T14:36:52.459+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-07T14:36:52.459+02:00</app:edited><title>PyPy 2.0 alpha for ARM</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;

&lt;p&gt;Hello.&lt;/p&gt;
&lt;p&gt;We're pleased to announce an alpha release of PyPy 2.0 for ARM. This is mostly
a technology preview, as we know the JIT is not yet stable enough for the
full release. However please try your stuff on ARM and report back.&lt;/p&gt;
&lt;p&gt;This is the first release that supports a range of ARM devices - anything with
ARMv6 (like the Raspberry Pi) or ARMv7 (like Beagleboard, Chromebook,
Cubieboard, etc.) that supports VFPv3 should work. We provide builds with
support for both ARM EABI variants: hard-float and some older operating
systems soft-float.&lt;/p&gt;
&lt;p&gt;This release comes with a list of limitations, consider it alpha quality,
not suitable for production:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;stackless support is missing.&lt;/li&gt;
&lt;li&gt;assembler produced is not always correct, but we successfully managed to
run large parts of our extensive benchmark suite, so most stuff should work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can download the PyPy 2.0 alpha ARM release here (including a deb for raspbian):&lt;/p&gt;
&lt;blockquote&gt;
&lt;a class="reference external" href="http://pypy.org/download.html"&gt;http://pypy.org/download.html&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Part of the work was sponsored by the &lt;a class="reference external" href="http://www.raspberrypi.org/"&gt;Raspberry Pi foundation&lt;/a&gt;.&lt;/p&gt;
&lt;div class="section" id="what-is-pypy"&gt;
&lt;h3&gt;What is PyPy?&lt;/h3&gt;
&lt;p&gt;PyPy is a very compliant Python interpreter, almost a drop-in replacement for
CPython 2.7.3. It's fast due to its integrated tracing JIT compiler.&lt;/p&gt;
&lt;p&gt;This release supports ARM machines running Linux 32bit. Both hard-float
&lt;tt class="docutils literal"&gt;armhf&lt;/tt&gt; and soft-float &lt;tt class="docutils literal"&gt;armel&lt;/tt&gt; builds are provided.  &lt;tt class="docutils literal"&gt;armhf&lt;/tt&gt; builds are
created using the Raspberry Pi custom &lt;a class="reference external" href="https://github.com/raspberrypi"&gt;cross-compilation toolchain&lt;/a&gt; based on
gcc-arm-linux-gnueabihf and should work on ARMv6 and ARMv7 devices running at
least debian or ubuntu. &lt;tt class="docutils literal"&gt;armel&lt;/tt&gt; builds are built using gcc-arm-linux-gnuebi
toolchain provided by ubuntu and currently target ARMv7.  If there is interest
in other builds, such as gnueabi for ARMv6 or without requiring a VFP let us
know in the comments or in IRC.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="benchmarks"&gt;
&lt;h3&gt;Benchmarks&lt;/h3&gt;
&lt;p&gt;Everybody loves benchmarks. Here is a table of our benchmark suite
(for ARM we don't provide it yet on &lt;a class="reference external" href="http://speed.pypy.org"&gt;http://speed.pypy.org&lt;/a&gt;,
unfortunately).&lt;/p&gt;
&lt;p&gt;This is a comparison of Cortex A9 processor with 4M cache and Xeon W3580 with
8M of L3 cache. The set of benchmarks is a subset of what we run for
&lt;a class="reference external" href="http://speed.pypy.org"&gt;http://speed.pypy.org&lt;/a&gt; that finishes in reasonable time. The ARM machine
was provided by Calxeda.
Columns are respectively:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;benchmark name&lt;/li&gt;
&lt;li&gt;PyPy speedup over CPython on ARM (Cortex A9)&lt;/li&gt;
&lt;li&gt;PyPy speedup over CPython on x86 (Xeon)&lt;/li&gt;
&lt;li&gt;speedup on Xeon vs Cortex A9, as measured on CPython&lt;/li&gt;
&lt;li&gt;speedup on Xeon vs Cortex A9, as measured on PyPy&lt;/li&gt;
&lt;li&gt;relative speedup (how much bigger the x86 speedup is over ARM speedup)&lt;/li&gt;
&lt;/ul&gt;
&lt;table border="1" class="docutils"&gt;
&lt;colgroup&gt;
&lt;col width="16%" /&gt;
&lt;col width="18%" /&gt;
&lt;col width="18%" /&gt;
&lt;col width="15%" /&gt;
&lt;col width="18%" /&gt;
&lt;col width="14%" /&gt;
&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td&gt;Benchmark&lt;/td&gt;
&lt;td&gt;PyPy vs CPython (arm)&lt;/td&gt;
&lt;td&gt;PyPy vs CPython (x86)&lt;/td&gt;
&lt;td&gt;x86 vs arm (pypy)&lt;/td&gt;
&lt;td&gt;x86 vs arm (cpython)&lt;/td&gt;
&lt;td&gt;relative speedup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;ai&lt;/td&gt;
&lt;td&gt;3.61&lt;/td&gt;
&lt;td&gt;3.16&lt;/td&gt;
&lt;td&gt;7.70&lt;/td&gt;
&lt;td&gt;8.82&lt;/td&gt;
&lt;td&gt;0.87&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;bm_mako&lt;/td&gt;
&lt;td&gt;3.41&lt;/td&gt;
&lt;td&gt;2.11&lt;/td&gt;
&lt;td&gt;8.56&lt;/td&gt;
&lt;td&gt;13.82&lt;/td&gt;
&lt;td&gt;0.62&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;chaos&lt;/td&gt;
&lt;td&gt;21.82&lt;/td&gt;
&lt;td&gt;17.80&lt;/td&gt;
&lt;td&gt;6.93&lt;/td&gt;
&lt;td&gt;8.50&lt;/td&gt;
&lt;td&gt;0.82&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;crypto_pyaes&lt;/td&gt;
&lt;td&gt;22.53&lt;/td&gt;
&lt;td&gt;19.48&lt;/td&gt;
&lt;td&gt;6.53&lt;/td&gt;
&lt;td&gt;7.56&lt;/td&gt;
&lt;td&gt;0.86&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;django&lt;/td&gt;
&lt;td&gt;13.43&lt;/td&gt;
&lt;td&gt;11.16&lt;/td&gt;
&lt;td&gt;7.90&lt;/td&gt;
&lt;td&gt;9.51&lt;/td&gt;
&lt;td&gt;0.83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;eparse&lt;/td&gt;
&lt;td&gt;1.43&lt;/td&gt;
&lt;td&gt;1.17&lt;/td&gt;
&lt;td&gt;6.61&lt;/td&gt;
&lt;td&gt;8.12&lt;/td&gt;
&lt;td&gt;0.81&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;fannkuch&lt;/td&gt;
&lt;td&gt;6.22&lt;/td&gt;
&lt;td&gt;5.36&lt;/td&gt;
&lt;td&gt;6.18&lt;/td&gt;
&lt;td&gt;7.16&lt;/td&gt;
&lt;td&gt;0.86&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;float&lt;/td&gt;
&lt;td&gt;5.22&lt;/td&gt;
&lt;td&gt;6.00&lt;/td&gt;
&lt;td&gt;9.68&lt;/td&gt;
&lt;td&gt;8.43&lt;/td&gt;
&lt;td&gt;1.15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;go&lt;/td&gt;
&lt;td&gt;4.72&lt;/td&gt;
&lt;td&gt;3.34&lt;/td&gt;
&lt;td&gt;5.91&lt;/td&gt;
&lt;td&gt;8.37&lt;/td&gt;
&lt;td&gt;0.71&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;hexiom2&lt;/td&gt;
&lt;td&gt;8.70&lt;/td&gt;
&lt;td&gt;7.00&lt;/td&gt;
&lt;td&gt;7.69&lt;/td&gt;
&lt;td&gt;9.56&lt;/td&gt;
&lt;td&gt;0.80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;html5lib&lt;/td&gt;
&lt;td&gt;2.35&lt;/td&gt;
&lt;td&gt;2.13&lt;/td&gt;
&lt;td&gt;6.59&lt;/td&gt;
&lt;td&gt;7.26&lt;/td&gt;
&lt;td&gt;0.91&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;json_bench&lt;/td&gt;
&lt;td&gt;1.12&lt;/td&gt;
&lt;td&gt;0.93&lt;/td&gt;
&lt;td&gt;7.19&lt;/td&gt;
&lt;td&gt;8.68&lt;/td&gt;
&lt;td&gt;0.83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;meteor-contest&lt;/td&gt;
&lt;td&gt;2.13&lt;/td&gt;
&lt;td&gt;1.68&lt;/td&gt;
&lt;td&gt;5.95&lt;/td&gt;
&lt;td&gt;7.54&lt;/td&gt;
&lt;td&gt;0.79&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;nbody_modified&lt;/td&gt;
&lt;td&gt;8.19&lt;/td&gt;
&lt;td&gt;7.78&lt;/td&gt;
&lt;td&gt;6.08&lt;/td&gt;
&lt;td&gt;6.40&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;pidigits&lt;/td&gt;
&lt;td&gt;1.27&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;14.67&lt;/td&gt;
&lt;td&gt;19.66&lt;/td&gt;
&lt;td&gt;0.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;pyflate-fast&lt;/td&gt;
&lt;td&gt;3.30&lt;/td&gt;
&lt;td&gt;3.57&lt;/td&gt;
&lt;td&gt;10.64&lt;/td&gt;
&lt;td&gt;9.84&lt;/td&gt;
&lt;td&gt;1.08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;raytrace-simple&lt;/td&gt;
&lt;td&gt;46.41&lt;/td&gt;
&lt;td&gt;29.00&lt;/td&gt;
&lt;td&gt;5.14&lt;/td&gt;
&lt;td&gt;8.23&lt;/td&gt;
&lt;td&gt;0.62&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;richards&lt;/td&gt;
&lt;td&gt;31.48&lt;/td&gt;
&lt;td&gt;28.51&lt;/td&gt;
&lt;td&gt;6.95&lt;/td&gt;
&lt;td&gt;7.68&lt;/td&gt;
&lt;td&gt;0.91&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;slowspitfire&lt;/td&gt;
&lt;td&gt;1.28&lt;/td&gt;
&lt;td&gt;1.14&lt;/td&gt;
&lt;td&gt;5.91&lt;/td&gt;
&lt;td&gt;6.61&lt;/td&gt;
&lt;td&gt;0.89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;spambayes&lt;/td&gt;
&lt;td&gt;1.93&lt;/td&gt;
&lt;td&gt;1.27&lt;/td&gt;
&lt;td&gt;4.15&lt;/td&gt;
&lt;td&gt;6.30&lt;/td&gt;
&lt;td&gt;0.66&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;sphinx&lt;/td&gt;
&lt;td&gt;1.01&lt;/td&gt;
&lt;td&gt;1.05&lt;/td&gt;
&lt;td&gt;7.76&lt;/td&gt;
&lt;td&gt;7.45&lt;/td&gt;
&lt;td&gt;1.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;spitfire&lt;/td&gt;
&lt;td&gt;1.55&lt;/td&gt;
&lt;td&gt;1.58&lt;/td&gt;
&lt;td&gt;5.62&lt;/td&gt;
&lt;td&gt;5.49&lt;/td&gt;
&lt;td&gt;1.02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;spitfire_cstringio&lt;/td&gt;
&lt;td&gt;9.61&lt;/td&gt;
&lt;td&gt;5.74&lt;/td&gt;
&lt;td&gt;5.43&lt;/td&gt;
&lt;td&gt;9.09&lt;/td&gt;
&lt;td&gt;0.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;sympy_expand&lt;/td&gt;
&lt;td&gt;1.42&lt;/td&gt;
&lt;td&gt;0.97&lt;/td&gt;
&lt;td&gt;3.86&lt;/td&gt;
&lt;td&gt;5.66&lt;/td&gt;
&lt;td&gt;0.68&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;sympy_integrate&lt;/td&gt;
&lt;td&gt;1.60&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;4.24&lt;/td&gt;
&lt;td&gt;7.12&lt;/td&gt;
&lt;td&gt;0.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;sympy_str&lt;/td&gt;
&lt;td&gt;0.72&lt;/td&gt;
&lt;td&gt;0.48&lt;/td&gt;
&lt;td&gt;3.68&lt;/td&gt;
&lt;td&gt;5.56&lt;/td&gt;
&lt;td&gt;0.66&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;sympy_sum&lt;/td&gt;
&lt;td&gt;1.99&lt;/td&gt;
&lt;td&gt;1.19&lt;/td&gt;
&lt;td&gt;3.83&lt;/td&gt;
&lt;td&gt;6.38&lt;/td&gt;
&lt;td&gt;0.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;telco&lt;/td&gt;
&lt;td&gt;14.28&lt;/td&gt;
&lt;td&gt;9.36&lt;/td&gt;
&lt;td&gt;3.94&lt;/td&gt;
&lt;td&gt;6.02&lt;/td&gt;
&lt;td&gt;0.66&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;twisted_iteration&lt;/td&gt;
&lt;td&gt;11.60&lt;/td&gt;
&lt;td&gt;7.33&lt;/td&gt;
&lt;td&gt;6.04&lt;/td&gt;
&lt;td&gt;9.55&lt;/td&gt;
&lt;td&gt;0.63&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;twisted_names&lt;/td&gt;
&lt;td&gt;3.68&lt;/td&gt;
&lt;td&gt;2.83&lt;/td&gt;
&lt;td&gt;5.01&lt;/td&gt;
&lt;td&gt;6.50&lt;/td&gt;
&lt;td&gt;0.77&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;twisted_pb&lt;/td&gt;
&lt;td&gt;4.94&lt;/td&gt;
&lt;td&gt;3.02&lt;/td&gt;
&lt;td&gt;5.10&lt;/td&gt;
&lt;td&gt;8.34&lt;/td&gt;
&lt;td&gt;0.61&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;It seems that Cortex A9, while significantly slower than Xeon, has higher
slowdowns with a large interpreter (CPython) than a JIT compiler (PyPy). This
comes as a surprise to me, especially that our ARM assembler is not nearly
as polished as our x86 assembler. As for the causes, various people mentioned
branch predictor, but I would not like to speculate without actually knowing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="how-to-use-pypy"&gt;
&lt;h3&gt;How to use PyPy?&lt;/h3&gt;
&lt;p&gt;We suggest using PyPy from a &lt;a class="reference external" href="http://www.virtualenv.org/en/latest/"&gt;virtualenv&lt;/a&gt;. Once you have a virtualenv
installed, you can follow instructions from &lt;a class="reference external" href="http://doc.pypy.org/en/latest/getting-started.html#installing-using-virtualenv"&gt;pypy documentation&lt;/a&gt; on how
to proceed. This document also covers other &lt;a class="reference external" href="http://doc.pypy.org/en/latest/getting-started.html#installing-pypy"&gt;installation schemes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We would not recommend using in production PyPy on ARM just quite yet,
however the day of a stable PyPy ARM release is not far off.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
fijal, bivab, arigo and the whole PyPy team&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/vUdNH9c8Pao" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/2318299473927531503/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=2318299473927531503" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/2318299473927531503?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/2318299473927531503?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/vUdNH9c8Pao/pypy-20-alpha-for-arm.html" title="PyPy 2.0 alpha for ARM" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/05/pypy-20-alpha-for-arm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8ASHkzeip7ImA9WhBWE08.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-4858660312787995512</id><published>2013-04-07T10:19:00.002+02:00</published><updated>2013-04-07T10:20:49.782+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T10:20:49.782+02:00</app:edited><title>PyPy 2.0 beta 2 released</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;We're pleased to announce the 2.0 beta 2 release of PyPy. This is a major
release of PyPy and we're getting very close to 2.0 final, however it includes
quite a few new features that require further testing. Please test and report
issues, so we can have a rock-solid 2.0 final. It also includes a performance
regression of about 5% compared to 2.0 beta 1 that we hope to fix before
2.0 final. The ARM support is not working yet and we're working hard to
make it happen before the 2.0 final. The new major features are:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;JIT now supports stackless features, that is greenlets and stacklets. This
means that JIT can now optimize the code that switches the context. It enables
running &lt;a class="reference external" href="http://eventlet.net/"&gt;eventlet&lt;/a&gt; and &lt;a class="reference external" href="http://www.gevent.org/"&gt;gevent&lt;/a&gt; on PyPy (although gevent requires some
special support that's not quite finished, read below).&lt;/li&gt;
&lt;li&gt;This is the first PyPy release that includes &lt;a class="reference external" href="http://cffi.readthedocs.org/en/release-0.6/"&gt;cffi&lt;/a&gt; as a core library.
Version 0.6 comes included in the PyPy library. cffi has seen a lot of
adoption among library authors and we believe it's the best way to wrap
C libaries. You can see examples of cffi usage in &lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/src/aefddd47f224e3c12e2ea74f5c796d76f4355bdb/lib_pypy/_curses.py?at=default"&gt;_curses.py&lt;/a&gt; and
&lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/src/aefddd47f224e3c12e2ea74f5c796d76f4355bdb/lib_pypy/_sqlite3.py?at=default"&gt;_sqlite3.py&lt;/a&gt; in the PyPy source code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can download the PyPy 2.0 beta 2 release here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;a class="reference external" href="http://pypy.org/download.html"&gt;http://pypy.org/download.html&lt;/a&gt;&lt;/blockquote&gt;
&lt;div class="section" id="what-is-pypy"&gt;
&lt;h3&gt;What is PyPy?&lt;/h3&gt;
&lt;p&gt;PyPy is a very compliant Python interpreter, almost a drop-in replacement for
CPython 2.7.3. It's fast (&lt;a class="reference external" href="http://speed.pypy.org"&gt;pypy 2.0 beta 2 and cpython 2.7.3&lt;/a&gt;
performance comparison) due to its integrated tracing JIT compiler.&lt;/p&gt;
&lt;p&gt;This release supports x86 machines running Linux 32/64, Mac OS X 64 or
Windows 32. It also supports ARM machines running Linux, however this is
disabled for the beta 2 release.
Windows 64 work is still stalling, we would welcome a volunteer
to handle that.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="how-to-use-pypy"&gt;
&lt;h3&gt;How to use PyPy?&lt;/h3&gt;
&lt;p&gt;We suggest using PyPy from a &lt;a class="reference external" href="http://www.virtualenv.org/en/latest/"&gt;virtualenv&lt;/a&gt;. Once you have a virtualenv
installed, you can follow instructions from &lt;a class="reference external" href="http://doc.pypy.org/en/latest/getting-started.html#installing-using-virtualenv"&gt;pypy documentation&lt;/a&gt; on how
to proceed. This document also covers other &lt;a class="reference external" href="http://doc.pypy.org/en/latest/getting-started.html#installing-pypy"&gt;installation schemes&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="highlights"&gt;
&lt;h3&gt;Highlights&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;cffi&lt;/tt&gt; is officially supported by PyPy. It comes included in the standard
library, just use &lt;tt class="docutils literal"&gt;import cffi&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;stackless support - &lt;a class="reference external" href="http://eventlet.net/"&gt;eventlet&lt;/a&gt; just works and &lt;a class="reference external" href="http://www.gevent.org/"&gt;gevent&lt;/a&gt; requires &lt;a class="reference external" href="https://github.com/gevent-on-pypy/pypycore"&gt;pypycore&lt;/a&gt;
and &lt;a class="reference external" href="https://github.com/schmir/gevent/tree/pypy-hacks"&gt;pypy-hacks&lt;/a&gt; branch of gevent (which mostly disables cython-based
modules)&lt;/li&gt;
&lt;li&gt;callbacks from C are now much faster. pyexpat is about 3x faster, cffi
callbacks around the same&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;__length_hint__&lt;/tt&gt; is implemented (PEP 424)&lt;/li&gt;
&lt;li&gt;a lot of numpy improvements&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="improvements-since-1-9"&gt;
&lt;h3&gt;Improvements since 1.9&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://doc.pypy.org/en/latest/jit-hooks.html"&gt;JIT hooks&lt;/a&gt; are now a powerful tool to introspect the JITting process that
PyPy performs&lt;/li&gt;
&lt;li&gt;various performance improvements compared to 1.9 and 2.0 beta 1&lt;/li&gt;
&lt;li&gt;operations on &lt;tt class="docutils literal"&gt;long&lt;/tt&gt; objects are now as fast as in CPython (from
roughly 2x slower)&lt;/li&gt;
&lt;li&gt;we now have special strategies for &lt;tt class="docutils literal"&gt;dict&lt;/tt&gt;/&lt;tt class="docutils literal"&gt;set&lt;/tt&gt;/&lt;tt class="docutils literal"&gt;list&lt;/tt&gt; which contain
unicode strings, which means that now such collections will be both faster
and more compact.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/Q_ha2tGXhXY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/4858660312787995512/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=4858660312787995512" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4858660312787995512?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4858660312787995512?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/Q_ha2tGXhXY/pypy-20-beta-2-released.html" title="PyPy 2.0 beta 2 released" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>8</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/04/pypy-20-beta-2-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cBSHk9fSp7ImA9WhBXFEs.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-4702482800824669595</id><published>2013-03-28T09:57:00.001+01:00</published><updated>2013-03-28T09:57:39.765+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-28T09:57:39.765+01:00</app:edited><title>So, you want to try PyPy</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;Hello.&lt;/p&gt;
&lt;p&gt;During the PyCon trip multiple people asked me how exactly they could run
their stuff on PyPy to get the speedups. Now, in an ideal world,
you would just swap CPython with PyPy, everything would run tons of times
faster and everyone would live happily ever after. However, we don't live in
an ideal world and PyPy does not speed up &lt;em&gt;everything&lt;/em&gt; you could
potentially run. Chances are that you can run your stuff quite a bit faster, but
it requires quite a bit more R&amp;amp;D than just that. This blog post is an attempt to
explain certain steps that might help. So here we go:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Download and install PyPy. 2.0 beta 1 or upcoming 2.0 beta 2 would be a good
candidate; it's not called a beta for stability reasons.&lt;/li&gt;
&lt;li&gt;Run your tests on PyPy. There is absolutely no need for fast software that
does not work. There might be some failures. Usually they're harmless (e.g.
you forgot to close the file); either fix them or at least inspect them. In
short, make sure stuff works.&lt;/li&gt;
&lt;li&gt;Inspect your stack. In particular, C extensions, while sometimes working, are
a potential source of instability and slowness. Fortunately,
since the introduction of &lt;a class="reference external" href="http://cffi.readthedocs.org"&gt;cffi&lt;/a&gt;, the ecosystem of PyPy-compatible software
has been growing. Things I know are written with PyPy in mind:&lt;ul&gt;
&lt;li&gt;the new version of &lt;a class="reference external" href="https://launchpad.net/pyopenssl"&gt;pyOpenSSL&lt;/a&gt; will support PyPy via cffi&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/chtd/psycopg2cffi"&gt;psycopg2cffi&lt;/a&gt; is the most actively maintained postgres binding for PyPy,
with pg8000 reported working&lt;/li&gt;
&lt;li&gt;mysql has a &lt;a class="reference external" href="https://github.com/quora/mysql-ctypes"&gt;ctypes based implementation&lt;/a&gt; (although a cffi-based one would
be definitely better)&lt;/li&gt;
&lt;li&gt;PyPy 2.0 beta 2 will come with sqlite-using-cffi&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/amauryfa/lxml/tree/lxml-cffi"&gt;lxml-cffi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/unbit/uwsgi-docs"&gt;uWSGI&lt;/a&gt;, while working, is almost certainly not the best choice. Try
&lt;a class="reference external" href="http://www.tornadoweb.org/en/stable/"&gt;tornado&lt;/a&gt;, &lt;a class="reference external" href="http://twistedmatrix.com/trac/wiki/TwistedWeb"&gt;twisted.web&lt;/a&gt;, &lt;a class="reference external" href="http://cyclone.io/"&gt;cyclone.io&lt;/a&gt;, &lt;a class="reference external" href="http://gunicorn.org/"&gt;gunicorn&lt;/a&gt; or &lt;a class="reference external" href="http://www.gevent.org/"&gt;gevent&lt;/a&gt;
(note: gevent support for PyPy is not quite finished; will write about it
in a separate blog post, but you can't just use the main branch of gevent)&lt;/li&gt;
&lt;li&gt;consult (and contribute to) &lt;a class="reference external" href="https://bitbucket.org/pypy/compatibility/wiki/Home"&gt;pypy compatibility wiki&lt;/a&gt; for details (note
that it's community maintained, might be out of date)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Have benchmarks. If you don't have benchmarks, then performance does not
matter for you. Since PyPy's warm-up time is bad (and yes, we know, we're
working on it), you should leave ample time for warm-ups. Five to ten seconds
of continuous computation should be enough.&lt;/li&gt;
&lt;li&gt;Try them. If you get lucky, the next step might be to deploy and be happy.
If you're unlucky, profile and try to isolate bottlenecks. They might be in
a specific library or they might be in your code. The better you can isolate
them, the higher your chances of understanding what's going on.&lt;/li&gt;
&lt;li&gt;Don't take it for granted. PyPy's JIT is very good, but there is a variety
of reasons that it might not work how you expect it to. A lot of times it
starts off slow, but a little optimization can improve the speed as much as
10x. Since PyPy's runtime is less mature than CPython, there are higher
chances of finding an obscure corner of the standard library that might be
atrociously slow.&lt;/li&gt;
&lt;li&gt;Most importantly, if you run out of options and you have a reproducible
example, &lt;strong&gt;please report it&lt;/strong&gt;. A &lt;a class="reference external" href="http://mail.python.org/mailman/listinfo/pypy-dev"&gt;pypy-dev&lt;/a&gt; email, popping into &lt;tt class="docutils literal"&gt;#pypy&lt;/tt&gt;
on &lt;tt class="docutils literal"&gt;irc.freenode.net&lt;/tt&gt;, or getting hold of me on twitter are good ways.
You can also contact me directly at &lt;em&gt;fijall at gmail.com&lt;/em&gt; as well. While
it's cool if the example is slow, a lot of problems only show up on large
and convoluted examples. As long as I can reproduce it on my machine or I can
log in somewhere, I am usually happy to help.&lt;/li&gt;
&lt;li&gt;I typically use a combination of &lt;a class="reference external" href="https://bitbucket.org/pypy/jitviewer"&gt;jitviewer&lt;/a&gt;, &lt;a class="reference external" href="http://valgrind.org/"&gt;valgrind&lt;/a&gt; and
&lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/src/default/rpython/tool/lsprofcalltree.py?at=default"&gt;lsprofcalltree&lt;/a&gt; to try to guess what's going on. These tools are all
useful, but use them with care. They usually require quite a bit of
understanding before being useful. Also sometimes they're just plain useless
and you need to write your own analysis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I hope this summary of steps to take is useful. We hear a lot of stories
of people trying PyPy, most of them positive, but some of them negative.
If you just post &amp;quot;PyPy didn't work for me&amp;quot; on your blog, that's
cool too, but you're missing an opportunity. The reasons may vary from
something serious like &amp;quot;this is a bad pattern for PyPy GC&amp;quot; to something
completely hilarious like &amp;quot;oh, I left this &lt;tt class="docutils literal"&gt;sys._getframe()&lt;/tt&gt; somewhere
in my hot loops for debugging&amp;quot; or &amp;quot;I used the &lt;tt class="docutils literal"&gt;logging&lt;/tt&gt; module which uses
&lt;tt class="docutils literal"&gt;sys._getframe()&lt;/tt&gt; all over  the place&amp;quot;.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
fijal&lt;/p&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/bH8_jZs-DZA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/4702482800824669595/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=4702482800824669595" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4702482800824669595?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4702482800824669595?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/bH8_jZs-DZA/so-you-want-to-try-pypy.html" title="So, you want to try PyPy" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>8</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/03/so-you-want-to-try-pypy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EHR3YzeSp7ImA9WhBQFkk.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-1503421654591696377</id><published>2013-03-18T22:20:00.002+01:00</published><updated>2013-03-18T22:20:36.881+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-18T22:20:36.881+01:00</app:edited><title>Numpy status update and developer announcement</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;

&lt;p&gt;Hello, some good news!&lt;/p&gt;
&lt;p&gt;First the update:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;strong&gt;dtype support&lt;/strong&gt; - NumPy on PyPy now supports non-native storage formats.
Due to a lack of true support for longdoubles in rpython, we decided to back
out the support of longdouble-as-double which was misleading.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;missing ndarray attributes&lt;/strong&gt; - work has been made toward supporting the
complete set of attributes
on ndarrays. We are progressing alphabetically, and have made it to d.
Unsupported attributes, and unsupported arguments to attribute calls
will raise a NotImplementedError.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pickling support for numarray&lt;/strong&gt; - hasn't started yet, but next on the list&lt;/li&gt;
&lt;li&gt;There has been some work on exposing &lt;strong&gt;FFI routines&lt;/strong&gt; in numpypy.&lt;/li&gt;
&lt;li&gt;Brian Kearns has made progress in improving the &lt;strong&gt;numpypy namespace&lt;/strong&gt;.
The python numpypy submodules now more closely resemble their numpy
counterparts. Also, translated _numpypy submodules are now more properly
mapped to the numpy core c-based submodules, furthering the goal of being
able to install numpy as a pure-python module with few modifications.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And now the good news:&lt;/p&gt;
&lt;p&gt;While our funding drive over 2012 did not reach our goal, we still managed to
raise a fair amount of money in donations. So far we only managed to spend around $10 000 of it.
We issued a call for additional developers, and are glad to welcome Romain Guillebert and Ronan Lamy
to the numpypy team. Hopefully we will be able to report on speedier progress soon.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
Matti Picus, Maciej Fijalkowski&lt;/p&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/TFHgbbNUjL4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/1503421654591696377/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=1503421654591696377" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1503421654591696377?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1503421654591696377?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/TFHgbbNUjL4/numpy-status-update-and-developer.html" title="Numpy status update and developer announcement" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/03/numpy-status-update-and-developer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEBSHc5fCp7ImA9WhBRFUw.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-6681398990092286007</id><published>2013-03-05T21:00:00.000+01:00</published><updated>2013-03-05T21:00:59.924+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-05T21:00:59.924+01:00</app:edited><title>Py3k status update #10</title><content type="html">&lt;p&gt;This is the tenth status update about our work on the &lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/commits/all/tip/branch%28%22py3k%22%29"&gt;py3k branch&lt;/a&gt;, which we&lt;br /&gt;
can work on thanks to all of the people who &lt;a class="reference external" href="http://morepypy.blogspot.com/2012/01/py3k-and-numpy-first-stage-thanks-to.html"&gt;donated&lt;/a&gt; to the &lt;a class="reference external" href="http://pypy.org/py3donate.html"&gt;py3k proposal&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;There's been significant progress since the last update: the &lt;a class="reference external" href="http://buildbot.pypy.org/summary?branch=py3k"&gt;linux x86-32&lt;br /&gt;
buildbot&lt;/a&gt; now passes 289 out of approximately 354 modules (with 39 skips) of&lt;br /&gt;
CPython's regression test suite.&lt;/p&gt;&lt;p&gt;That means there's only 26 test module failures left! The list of major items&lt;br /&gt;
remaining for 3.2 compatibility are now short enough to list here, with their&lt;br /&gt;
related tests:&lt;/p&gt;&lt;ul class="simple"&gt;&lt;li&gt;Tokenizer support for non-ascii identifiers&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;test_importlib&lt;/li&gt;
&lt;li&gt;test_pep263&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;memoryview (Manuel Jacob's tackling this on the &lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/compare/py3k-memoryview..py3k"&gt;py3k-memoryview branch&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;test_memoryview&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;multiprocessing module currently deadlocks&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;test_multiprocessing&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;Buggy handling of the new extended unpacking syntax by the compiler:&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;test_unpack_ex&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;The new Global Interpreter Lock and new thread signal handling&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;test_threading&lt;/li&gt;
&lt;li&gt;test_threadsignals&lt;/li&gt;
&lt;li&gt;test_sys&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;Upgrade unicodedata to 6.0.0 (requires updates to the actual unicodedata&lt;br /&gt;
generation script)&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;test_ucn&lt;/li&gt;
&lt;li&gt;test_unicode&lt;/li&gt;
&lt;li&gt;test_unicodedata&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;&lt;a class="reference external" href="http://morepypy.blogspot.com/2010/04/using-cpython-extension-modules-with.html"&gt;CPyExt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;test_capi (currently crashes)&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;Update int's hash code to match to CPython (float's is already updated on the&lt;br /&gt;
&lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/compare/py3k-newhash..py3k"&gt;py3k-newhash branch&lt;/a&gt;. note that PyPy 2.x doesn't even totally match&lt;br /&gt;
CPython's hashing)&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;test_decimal&lt;/li&gt;
&lt;li&gt;test_fractions&lt;/li&gt;
&lt;li&gt;test_numeric_tower&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;Miscellaneous:&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;test_complex&lt;/li&gt;
&lt;li&gt;test_float&lt;/li&gt;
&lt;li&gt;test_peepholer&lt;/li&gt;
&lt;li&gt;test_range&lt;/li&gt;
&lt;li&gt;test_sqlite (a new cffi based version seems to be coming)&lt;/li&gt;
&lt;li&gt;test_ssl&lt;/li&gt;
&lt;li&gt;test_struct&lt;/li&gt;
&lt;li&gt;test_subprocess&lt;/li&gt;
&lt;li&gt;test_sys_settrace&lt;/li&gt;
&lt;li&gt;test_time&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;p&gt;Additionally there are still a number of failures in PyPy's internal test&lt;br /&gt;
suite. These tests are usually ran against untranslated versions of PyPy during&lt;br /&gt;
development. However we've now began running them against a fully translated&lt;br /&gt;
version of PyPy on the buildbot too (thanks to Amaury for setting this&lt;br /&gt;
up). This further ensures that our tests and implementation are sane.&lt;/p&gt;&lt;p&gt;We're getting closer to producing an initial alpha release. Before that happens&lt;br /&gt;
we'd like to see:&lt;/p&gt;&lt;ul class="simple"&gt;&lt;li&gt;further test fixes&lt;/li&gt;
&lt;li&gt;the results of test runs on other major platforms (e.g. linux x86-64 and osx&lt;br /&gt;
seem to have some additional failures as of now)&lt;/li&gt;
&lt;li&gt;some basic real world testing&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Finally I'd like to thank Manuel Jacob for his various contributions over the&lt;br /&gt;
past month, including fixing the array and ctypes modules among other things,&lt;br /&gt;
and also Amaury Forgeot d'Arc for his ongoing excellent contributions.&lt;/p&gt;&lt;p&gt;cheers,&lt;br /&gt;
Phil&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/9DSk226QgB4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/6681398990092286007/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=6681398990092286007" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/6681398990092286007?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/6681398990092286007?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/9DSk226QgB4/py3k-status-update-10.html" title="Py3k status update #10" /><author><name>Philip Jenvey</name><uri>http://www.blogger.com/profile/09838979615980113137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/03/py3k-status-update-10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUBQX0zeSp7ImA9WhBREEU.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-634401291726575821</id><published>2013-02-28T22:15:00.001+01:00</published><updated>2013-02-28T22:17:30.381+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-28T22:17:30.381+01:00</app:edited><title>10 years of PyPy</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;

&lt;p&gt;&lt;p style="font-style: italic;"&gt;From a software engineering perspective, 10 years is indistinguishable
from infinity, so I don't care what happens 10 years from now -- as
long as you don't blame me. :-)&lt;/p&gt; - Guido van Rossum, Python creator.&lt;/p&gt;
&lt;p&gt;10 years is indeed a long time. PyPy was created approximately 10 years ago,
with the exact date being lost in the annals of the version control system.
We've come a long way during those 10 years, from a &amp;quot;minimal Python&amp;quot; that
was supposed to serve mostly as an educational tool, through to a vehicle for
academic research to a high performance VM for Python and beyond.&lt;/p&gt;
&lt;p&gt;Some facts from the PyPy timeline:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;In 2007, at the end of the EU funding period, we promised the JIT was just around the corner.
It turned out we misjudged it pretty badly -- the first usable PyPy was released in 2010.&lt;/li&gt;
&lt;li&gt;At some point we decided to have a JavaScript backend so one could compile RPython programs
to JavaScript and run them in a browser. Turned out it was a horrible idea.&lt;/li&gt;
&lt;li&gt;Another option we tried was using RPython to write CPython C extensions. Again, it turned out RPython
is a bad language and instead we made a fast JIT, so you don't have to write C extensions.&lt;/li&gt;
&lt;li&gt;We made N attempts to use LLVM.  Seriously, N is 4 or 5.  But we haven't fully given up yet :-)
They all run into issues one way or another.&lt;/li&gt;
&lt;li&gt;We were huge fans of ctypes at the beginning. Up to the point where we tried to make
a restricted subset with static types, called rctypes for RPython. Turned out to be horrible.
Twice.&lt;/li&gt;
&lt;li&gt;We were very hopeful about creating a JIT generator from the beginning. But the first one failed miserably,
generating too much assembler. The second failed too. The third first burned down and then failed.
However, we managed to release a working JIT in 2010, against all odds.&lt;/li&gt;
&lt;li&gt;Martijn Faassen used to ask us &amp;quot;how fast is PyPy&amp;quot; so we decided to name an option enabling all
optimizations &amp;quot;--faassen&amp;quot;.  Then &amp;quot;--no-faassen&amp;quot; was naturally added too. Later we
decided to grow up and renamed it to &amp;quot;-O2&amp;quot;, and now &amp;quot;-Ojit&amp;quot;.&lt;/li&gt;
&lt;li&gt;The first time the Python interpreter successfully compiled to C, it segfaulted because the code generator used signed chars instead of unsigned chars...&lt;/li&gt;
&lt;li&gt;To make it more likely to be accepted, the proposal for the EU project contained basically every feature under the sun a language could have. This proved to be annoying, because we had to actually implement all that stuff. Then we had to do a cleanup sprint where we deleted 30% of codebase and 70% of features.&lt;/li&gt;
&lt;li&gt;At one sprint someone proposed a new software development methodology: 'Terminology-Driven Programming' means to pick a fancy name, then discuss what it could mean, then implement it. Examples: timeshifter, rainbow interpreter, meta-space bubble, hint annotations (all but one of these really existed).&lt;/li&gt;
&lt;li&gt;There is a conspiracy theory that the reason why translation is so slow is because time is stored away during it, which is later retrieved when an actual program runs to make them appear faster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Overall, it was a really long road.  However, 10 years later we are in
good shape.  A quick look on the immediate future: we are approaching
PyPy 2.0 with stackless+JIT and cffi support,
the support for Python 3 is taking shape, non-standard
extensions like STM are slowly getting ready (more soon), and there are
several non-Python interpreters around the corner (Hippy, Topaz and more).&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
fijal, arigo, hodgestar, cfbolz and the entire pypy team.&lt;/p&gt;


&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/EkdQE1utWAw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/634401291726575821/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=634401291726575821" title="24 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/634401291726575821?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/634401291726575821?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/EkdQE1utWAw/10-years-of-pypy.html" title="10 years of PyPy" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>24</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/02/10-years-of-pypy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UBQX87eCp7ImA9WhBRGEw.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-808802896237239604</id><published>2013-02-28T01:01:00.000+01:00</published><updated>2013-03-09T07:40:50.100+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-09T07:40:50.100+01:00</app:edited><title>cppyy status update</title><content type="html">The &lt;a href="http://doc.pypy.org/en/latest/cppyy.html"&gt;cppyy module&lt;/a&gt;
provides C++ bindings for PyPy by using the reflection information extracted
from C++ header files by means of the
&lt;a href="http://root.cern.ch/drupal/content/reflex"&gt;Reflex package&lt;/a&gt;.
In order to support C++11, the goal is to move away from Reflex and instead use
&lt;a href="http://root.cern.ch/drupal/content/cling"&gt;cling&lt;/a&gt;, an interactive
C++ interpreter, as the backend.
Cling is based on &lt;a href="http://llvm.org/"&gt;llvm&lt;/a&gt;'s
&lt;a href="http://clang.llvm.org/"&gt;clang&lt;/a&gt;.

The use of a real compiler under the hood has the advantage that it is now
possible to cover every conceivable corner case.
The disadvantage, however, is that every corner case actually has to be
covered.
Life is somewhat easier when calls come in from the python interpreter, as
those calls have already been vetted for syntax errors and all lookups are
well scoped.
Furthermore, the real hard work of getting sane responses from and for C++
in an interactive environment is done in cling, not in the bindings.
Nevertheless, it is proving a long road (but for that matter clang does not
support all of C++11 yet), so here's a quick status update showing that good 
progress is being made.

&lt;p&gt;The following example is on CPython, not PyPy, but moving a third
(after Reflex and
&lt;a href="http://root.cern.ch/root/Cint.html"&gt;CINT&lt;/a&gt;) backend into place
underneath cppyy is straightforward compared to developing the backend
in the first place.

Take this snippet of C++11 code
(&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;cpp11.C&lt;/span&gt;&lt;/tt&gt;):

&lt;p&gt;&lt;pre&gt;    constexpr int data_size() { return 5; }

    auto N = data_size();

    template&amp;lt;class L, class R&amp;gt;
    struct MyMath {
       static auto add(L l, R r) -&amp;gt; decltype(l+r) { return l + r; }
    };

    template class MyMath&amp;lt;int, int&amp;gt;;&lt;/pre&gt;

&lt;p&gt;As a practical matter, most usage of new C++11 features will live in
implementations, not in declarations, and are thus never seen by the bindings.
The above example is therefore somewhat contrived, but it will serve to show
that these new declarations actually work.
The new features used here are
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;constexpr&lt;/span&gt;&lt;/tt&gt;,
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;auto&lt;/span&gt;&lt;/tt&gt;, and
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;decltype&lt;/span&gt;&lt;/tt&gt;.
Here is how you could use these from CPython, using the
&lt;a href="http://root.cern.ch/viewvc/trunk/bindings/pyroot/"&gt;PyROOT&lt;/a&gt;
package, which has more than a passing resemblance to cppyy, as one is based
on the other:

&lt;p&gt;&lt;pre&gt;    import ROOT as gbl
    gbl.gROOT.LoadMacro('cpp11.C')

    print 'N =', gbl.N
    print '1+1 =', gbl.MyMath(int, int).add(1,1)&lt;/pre&gt;

which, when entered into a file
(&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;cpp11.py&lt;/span&gt;&lt;/tt&gt;) and executed,
prints the expected results:

&lt;p&gt;&lt;pre&gt;    $ python cpp11.py
    N = 5
    1+1 = 2&lt;/pre&gt;

In the example, the C++ code is compiled on-the-fly, rather than first generating
a dictionary as is needed with Reflex.
A deployment model that utilizes stored pre-compiled information is foreseen
to work with larger projects, which may have to pull in headers from many places.

&lt;p&gt;Work is going to continue first on C++03 on cling with CPython (about 85% of
unit tests currently pass), with a bit of work on C++11 support on the side.
Once fully in place, it can be brought into a new backend for cppyy, after 
which the remaining parts of C++11 can be fleshed out for both interpreters.

&lt;p&gt;Cheers,&lt;br&gt;
Wim Lavrijsen&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/xNfBRIjj5lM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/808802896237239604/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=808802896237239604" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/808802896237239604?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/808802896237239604?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/xNfBRIjj5lM/cppyy-status-update.html" title="cppyy status update" /><author><name>Wim Lavrijsen</name><uri>http://www.blogger.com/profile/07891333377712029026</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/02/cppyy-status-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcHQnc9fCp7ImA9WhBSFUk.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-4718797989680066222</id><published>2013-02-22T14:33:00.001+01:00</published><updated>2013-02-22T14:33:53.964+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-22T14:33:53.964+01:00</app:edited><title>PyCon Silicon Valley and San Francisco visit</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;

&lt;p&gt;Hello everyone.&lt;/p&gt;
&lt;p&gt;We (Armin Rigo and Maciej Fijalkowski) are visiting San Francisco/Silicon Valley
for PyCon and beyond. Alex Gaynor, another core PyPy dev is living there
permanently. My visiting dates are 12-28 of March, Armin's 11-21st.
If you want us to give a  talk at your company or simply catch up with us
for a dinner
please get in touch. Write to &lt;a class="reference external" href="mailto:pypy-dev&amp;#64;python.org"&gt;pypy-dev&amp;#64;python.org&lt;/a&gt;, if you want this publically
known or simply send me a mail at &lt;a class="reference external" href="mailto:fijall&amp;#64;gmail.com"&gt;fijall&amp;#64;gmail.com&lt;/a&gt; if you don't want it public.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
fijal&lt;/p&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/u5bVYqpcqFk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/4718797989680066222/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=4718797989680066222" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4718797989680066222?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4718797989680066222?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/u5bVYqpcqFk/hello-everyone.html" title="PyCon Silicon Valley and San Francisco visit" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/02/hello-everyone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08GQXkzfyp7ImA9WhBTFkU.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-6662407703061538341</id><published>2013-02-12T17:17:00.000+01:00</published><updated>2013-02-12T17:17:00.787+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-12T17:17:00.787+01:00</app:edited><title>Announcing Topaz, an RPython powered Ruby interpreter</title><content type="html">&lt;p&gt;Hello everyone&lt;/p&gt;

&lt;p&gt;Last week, &lt;a href="http://alexgaynor.net/"&gt;Alex Gaynor&lt;/a&gt; announced the first public release of
&lt;a href="http://topaz.readthedocs.org/en/latest/blog/announcing-topaz/"&gt;Topaz&lt;/a&gt;,
a Ruby interpreter written in RPython. This is the culmination of a
part-time effort over the past 10 months to provide a Ruby interpreter
that implements enough interesting constructs in Ruby to show that the
RPython toolchain can produce a Ruby implementation fast enough to
beat what is out there.&lt;/p&gt;

&lt;h4&gt;Disclaimer&lt;/h4&gt;

&lt;p&gt;Obviously the implementation is very incomplete currently in terms of
available standard library. We are working on getting it useable. If
you want to try it, grab a
&lt;a href="http://topazruby.com/builds/"&gt;nightly build&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We have run some benchmarks from the
&lt;a href="https://github.com/acangiano/ruby-benchmark-suite"&gt;Ruby benchmark suite&lt;/a&gt;
and the
&lt;a href="https://github.com/ltratt/metatracing_vms_experiment"&gt;metatracing VMs experiment&lt;/a&gt;. The
preliminary results are promising, but at this point we are missing so
many method implementations that most benchmarks won't run yet. So instead of
performance, I'm going to talk about the high-level structure of the
implementation.&lt;/p&gt;

&lt;h4&gt;Architecture&lt;/h4&gt;

&lt;p&gt;Topaz interprets a custom bytecode set. The basics are similar to
Smalltalk VMs, with bytecodes for loading and storing locals and
instance variables, sending messages, and stack management. Some
syntactical features of Ruby, such as defining classes and modules,
literal regular expressions, hashes, ranges, etc also have their own
bytecodes. The third kind of bytecodes are for control flow constructs
in Ruby, such as loops, exception handling, break, continue, etc.&lt;/p&gt;

&lt;p&gt;In trying to get from Ruby source code to bytecode, we found that the
easiest way to support all of the Ruby syntax is to write a custom
lexer and use an RPython port of &lt;a href="https://github.com/dabeaz/ply"&gt;PLY&lt;/a&gt;
(fittingly called &lt;a href="https://github.com/alex/rply"&gt;RPly&lt;/a&gt;) to create the
parser from the Ruby yacc grammar.&lt;/p&gt;

&lt;p&gt;The Topaz interpreter uses an &lt;code&gt;ObjectSpace&lt;/code&gt; (similar to how PyPy does
it), to interact with the Ruby world. The object space contains all
the logic for wrapping and interacting with Ruby objects from the
VM. It's &lt;code&gt;__init__&lt;/code&gt; method sets up the core classes, initial globals,
and creates the main thread (the only one right now, as we do not have
threading, yet).&lt;/p&gt;

&lt;p&gt;Classes are mostly written in Python. We use ClassDef objects to
define the Ruby hierarchy and attach RPython methods to Ruby via
ClassDef decorators. These two points warrant a little explanation.&lt;/p&gt;

&lt;h5&gt;Hierarchies&lt;/h5&gt;

&lt;p&gt;All Ruby classes ultimately inherit from &lt;code&gt;BasicObject&lt;/code&gt;. However, most
objects are below &lt;code&gt;Object&lt;/code&gt; (which is a direct subclass of
&lt;code&gt;BasicObject&lt;/code&gt;). This includes objects of type &lt;code&gt;Fixnum&lt;/code&gt;, &lt;code&gt;Float&lt;/code&gt;,
&lt;code&gt;Class&lt;/code&gt;, and &lt;code&gt;Module&lt;/code&gt;, which may not need all of the facilities of
full objects most of the time.&lt;/p&gt;

&lt;p&gt;Most VMs treat such objects specially, using tagged pointers to
represent Fixnums, for example. Other VMs (for example from the
&lt;a href="http://www.hpi.uni-potsdam.de/hirschfeld/projects/som/index.html#overview"&gt;SOM Family&lt;/a&gt;)
don't. In the latter case, the implementation hierarchy matches the
language hierarchy, which means that objects like Fixnum share a
representation with all other objects (e.g. they have class pointers
and some kind of instance variable storage).&lt;/p&gt;

&lt;p&gt;In Topaz, implementation hierarchy and language hierarchy are
separate. The first is defined through the Python inheritance. The
other is defined through the ClassDef for each Python class, where the
appropriate Ruby superclass is chosen. The diagram below shows how the
implementation class &lt;code&gt;W_FixnumObject&lt;/code&gt; inherits directly from
&lt;code&gt;W_RootObject&lt;/code&gt;.  Note that &lt;code&gt;W_RootObject&lt;/code&gt; doesn't have any attrs,
specifically no storage for instance variables and no map (for
determining the class - we'll get to that). These attributes are
instead defined on &lt;code&gt;W_Object&lt;/code&gt;, which is what most other implementation
classes inherit from. However, on the Ruby side, Fixnum correctly
inherits (via &lt;code&gt;Numeric&lt;/code&gt; and &lt;code&gt;Integer&lt;/code&gt;) from &lt;code&gt;Object&lt;/code&gt;.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-i-L-NdwW7I0/URpqZK9u8VI/AAAAAAAACJM/jseKbfD_wEw/s1600/Topaz-Parallel-Hierarchies.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="384" width="305" src="http://3.bp.blogspot.com/-i-L-NdwW7I0/URpqZK9u8VI/AAAAAAAACJM/jseKbfD_wEw/s400/Topaz-Parallel-Hierarchies.png" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;This simple structural optimization gives a huge speed boost, but
there are VMs out there that do not have it and suffer performance
hits for it.&lt;/p&gt;

&lt;h5&gt;Decorators&lt;/h5&gt;

&lt;p&gt;Ruby methods can have symbols in its names that are not allowed as
part of Python method names, for example &lt;strong&gt;!&lt;/strong&gt;, &lt;strong&gt;?&lt;/strong&gt;, or &lt;strong&gt;=&lt;/strong&gt;, so we
cannot simply define Python methods and expose them to Ruby by the
same name. &lt;/p&gt;

&lt;p&gt;For defining the Ruby method name of a function, as well as argument
number checking, Ruby type coercion and unwrapping of Ruby objects to
their Python equivalents, we use decorators defined on ClassDef. When
the ObjectSpace initializes, it builds all Ruby classes from their
respective ClassDef objects. For each method in an implementation
class that has a ClassDef decorator, a wrapper method is generated and
exposed to Ruby. These wrappers define the name of the Ruby method,
coerce Ruby arguments, and unwrap them for the Python method.&lt;/p&gt;

&lt;p&gt;Here is a simple example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@classdef.method("*", times="int")
def method_times(self, space, times):
    return self.strategy.mul(space, self.str_storage, times)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This defines the method &lt;code&gt;*&lt;/code&gt; on the Ruby String class. When this is
called, the first argument is converted into a Ruby Fixnum object
using the appropriate coercion method, and then unwrapped into a plain
Python int and passed as argument to &lt;code&gt;method_times&lt;/code&gt;. The wrapper
method also supplies the space argument.&lt;/p&gt;

&lt;h4&gt;Object Structure&lt;/h4&gt;

&lt;p&gt;Ruby objects have dynamically defined instance variables and may
change their class at any time in the program (a concept called
&lt;a href="http://ola-bini.blogspot.de/2006/09/ruby-singleton-class.html"&gt;singleton class&lt;/a&gt;
in Ruby - it allows each object to have unique behaviour). To still
efficiently access instance variables, you want to avoid dictionary
lookups and let the JIT know about objects of the same class that have
the same instance variables. Topaz, like PyPy (which got it from
Self), implements instances using maps, which transforms dictionary
lookups into array accesses. See the
&lt;a href="http://morepypy.blogspot.de/2010/11/efficiently-implementing-python-objects.html"&gt;blog post&lt;/a&gt;
for the details.&lt;/p&gt;

&lt;p&gt;This is only a rough overview of the architecture. If you're
interested, get in touch on
&lt;a href="https://botbot.me/freenode/topaz/"&gt;#topaz.freenode.net&lt;/a&gt;, follow the
Topaz &lt;a href="http://twitter.com/topazproject"&gt;Twitter account&lt;/a&gt; or contribute
on &lt;a href="https://github.com/topazproject/topaz"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;a href="http://blog.bithug.org"&gt;Tim Felgentreff&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/W3CMoi47knU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/6662407703061538341/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=6662407703061538341" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/6662407703061538341?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/6662407703061538341?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/W3CMoi47knU/announcing-topaz-rpython-powered-ruby.html" title="Announcing Topaz, an RPython powered Ruby interpreter" /><author><name>Carl Friedrich Bolz</name><uri>http://www.blogger.com/profile/00518922641059511014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-i-L-NdwW7I0/URpqZK9u8VI/AAAAAAAACJM/jseKbfD_wEw/s72-c/Topaz-Parallel-Hierarchies.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/02/announcing-topaz-rpython-powered-ruby.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08MRHc-eip7ImA9WhBTE0w.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-1630643916751622710</id><published>2013-02-08T10:31:00.000+01:00</published><updated>2013-02-08T10:31:25.952+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-08T10:31:25.952+01:00</app:edited><title>CFFI 0.5</title><content type="html">&lt;p&gt;Hi all,&lt;/p&gt;

&lt;p&gt;A short notice to tell you that &lt;a
href="http://cffi.readthedocs.org/"&gt;CFFI 0.5&lt;/a&gt; was released.  This
contains a number of small improvements from 0.4, but seems to otherwise
be quite stable since a couple of months --- no change since January 10,
apart from the usual last-minute fixes for Python 3 and for Windows.&lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

&lt;p&gt;Armin&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/xKjWpXnmQNE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/1630643916751622710/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=1630643916751622710" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1630643916751622710?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1630643916751622710?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/xKjWpXnmQNE/cffi-05.html" title="CFFI 0.5" /><author><name>Armin Rigo</name><uri>http://www.blogger.com/profile/06300515270104686574</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/02/cffi-05.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MR3c4eCp7ImA9WhNaEUQ.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-1547805593757893630</id><published>2013-01-26T12:16:00.002+01:00</published><updated>2013-01-26T12:16:26.930+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-26T12:16:26.930+01:00</app:edited><title>NumPyPy 2013 Developer Position</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="section" id="introduction"&gt;
&lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Proposed herein is a part-time fellowship for developing NumPy in PyPy.
The work will initially consist of 100 hours
with the possibility of extension, until the funds run out.
Development and improvement of PyPy's NumPyPy (as
with most Open Source and Free Software) is done as a collaborative process
between volunteer, paid, and academic contributors. Due to a successful funding
drive but a lack of contributors willing to work directly for PyPy, we find
ourselves in the enviable situation of being able to offer this position.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="background"&gt;
&lt;h3&gt;Background&lt;/h3&gt;
&lt;p&gt;PyPy's developers make all PyPy software available to the public
without charge, under PyPy's Open Source copyright license, the
permissive MIT License. PyPy's license assures that PyPy is equally
available to everyone freely on terms that allow both non-commercial
and commercial activity. This license allows for academics, for-profit
software developers, volunteers and enthusiasts alike to collaborate
together to make a better Python implementation for everyone.&lt;/p&gt;
&lt;p&gt;NumPy support for PyPy is licensed similarly, and therefore NumPy in
PyPy support can directly help researchers and developers who seek to
do numeric computing but want an easier programming language to use
than Fortan or C, which is typically used for these
applications. Being licensed freely to the general public means that
opportunities to use, improve and learn about how NumPy in PyPy works
itself will be generally available to everyone.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="the-need-for-a-part-time-developer"&gt;
&lt;h3&gt;The Need for a Part-Time Developer&lt;/h3&gt;
&lt;p&gt;NumPy project in PyPy has seen some slow, but steady progress since we started
working about a year ago.  On one hand,
it's actually impressive what we could deliver with the effort undertaken,
on the other hand, we would like to see the development accelerated.&lt;/p&gt;
&lt;p&gt;PyPy has strict coding, testing, documentation, and review standards,
which ensures excellent code quality, continually improving
documentation and code test coverage, and minimal regressions. A
part-time developer will be able to bring us closer to the goal of
full numpy-api implementation and speed improvements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="work-plan"&gt;
&lt;h3&gt;Work Plan&lt;/h3&gt;
&lt;p&gt;The current proposal is split into two parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;This part covers the core NumPy Python API. We'll implement most NumPy APIs
that are officially documented and we'll pass most of NumPy's tests that
cover documented APIs and are not implementation details.
Specifically, we don't plan to:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;implement NumPy's C API&lt;/li&gt;
&lt;li&gt;implement other scientific libraries, like SciPy, matplotlib or biopython&lt;/li&gt;
&lt;li&gt;implement details that are otherwise agreed by consensus to not have a place
in PyPy's implementation of NumPy or agreed with NumPy community
to be implementation details&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;&lt;strong&gt;Speed&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;This part will cover significant speed improvements in the JIT that would
make numeric computations faster. This includes, but is not necesarilly
limited to:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;write a set of benchmarks covering various use cases&lt;/li&gt;
&lt;li&gt;teaching the JIT backend (or multiple backends) how to deal with vector
operations, like SSE&lt;/li&gt;
&lt;li&gt;experiments with automatic parallelization using multiple threads, akin
to numexpr&lt;/li&gt;
&lt;li&gt;improving the JIT register allocator that will make a difference, especially
for tight loops&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As with all speed improvements, it's relatively hard to predict exactly
how it'll cope, however we expect the results to be withing an order
of magnitude of handwritten C equivalent.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="position-candidate"&gt;
&lt;h3&gt;Position Candidate&lt;/h3&gt;
&lt;p&gt;We would like people who are proficient in NumPy and PyPy (but don't have to be
core developers of either) to step up. The developer selection will be done
by consensus of PyPy core developers and consulted with the Software Freedom
Conservancy for lack of conflict of interest. The main criterium will be
past contributions to the PyPy project, but they don't have to be significant
in size.&lt;/p&gt;
&lt;p&gt;A candidate for the Developer position will demonstrate the following:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;The ability to write clear, stable, suitable and tested code&lt;/li&gt;
&lt;li&gt;The ability to understand and extend the JIT capabilities used in NumPyPy.&lt;/li&gt;
&lt;li&gt;A positive presence in PyPy's online community on IRC and the mailing
list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ideally the Developer will also:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Have familiarity with the infrastructure of the PyPy project (including
bug tracker and buildbot).&lt;/li&gt;
&lt;li&gt;Have Worked to provide education or outreach on PyPy in other forums such as
workshops, conferences, and user groups.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Conservancy and PyPy are excited to announce the Developer Position.
Renumeration for the position will be at the rate of 60 USD per hour, through
the Software Freedom Conservancy.&lt;/p&gt;
&lt;p&gt;PyPy community is promising to provide necessary guidance and help into
the current codebase, however we expect a successful candidate to be able
to review code and incorporate external patches within two months of the
starting date of the contract.&lt;/p&gt;
&lt;p&gt;Candidates should submit their proposal (including their CV) to:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="mailto:pypy-z&amp;#64;python.org"&gt;pypy-z&amp;#64;python.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The deadline for this initial round of proposals is February 1, 2013.&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/Z0SQfjCjpEs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/1547805593757893630/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=1547805593757893630" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1547805593757893630?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1547805593757893630?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/Z0SQfjCjpEs/numpypy-2013-developer-position.html" title="NumPyPy 2013 Developer Position" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>11</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/01/numpypy-2013-developer-position.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8NRXY9eip7ImA9WhNUF0Q.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-98332471264591773</id><published>2013-01-10T07:04:00.000+01:00</published><updated>2013-01-10T07:04:54.862+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-10T07:04:54.862+01:00</app:edited><title>Py3k status update #9</title><content type="html">&lt;p&gt;This is the ninth status update about our work on the &lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/commits/all/tip/branch%28%22py3k%22%29"&gt;py3k branch&lt;/a&gt;, which&lt;br /&gt;
we can work on thanks to all of the people who &lt;a class="reference external" href="http://morepypy.blogspot.com/2012/01/py3k-and-numpy-first-stage-thanks-to.html"&gt;donated&lt;/a&gt; to the &lt;a class="reference external" href="http://pypy.org/py3donate.html"&gt;py3k&lt;br /&gt;
proposal&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Just a very short update on December's work: we're now passing about 223 of&lt;br /&gt;
approximately 355 modules of CPython's regression test suite, up from passing&lt;br /&gt;
194 last month.&lt;/p&gt;&lt;p&gt;Some brief highlights:&lt;/p&gt;&lt;ul class="simple"&gt;&lt;li&gt;More encoding related issues were addressed. e.g. now most if not all the&lt;br /&gt;
multibytecodec test modules pass.&lt;/li&gt;
&lt;li&gt;Fixed some path handling issues (&lt;tt class="docutils literal"&gt;test_os&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;test_ntpath&lt;/tt&gt; and&lt;br /&gt;
&lt;tt class="docutils literal"&gt;test_posixpath&lt;/tt&gt; now pass)&lt;/li&gt;
&lt;li&gt;We now pass &lt;tt class="docutils literal"&gt;test_class&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;test_descr&lt;/tt&gt; and almost &lt;tt class="docutils literal"&gt;test_builtin&lt;/tt&gt; (among&lt;br /&gt;
other things): these are notable as they are fairly extensive test suites of&lt;br /&gt;
core aspects of the langauge.&lt;/li&gt;
&lt;li&gt;Amaury Forgeot d'Arc continued making progress on &lt;a class="reference external" href="http://morepypy.blogspot.com/2010/04/using-cpython-extension-modules-with.html"&gt;CPyExt&lt;/a&gt; (thanks again!)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;cheers,&lt;br /&gt;
Phil&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/d_NFAx1Y8cs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/98332471264591773/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=98332471264591773" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/98332471264591773?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/98332471264591773?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/d_NFAx1Y8cs/py3k-status-update-9.html" title="Py3k status update #9" /><author><name>Philip Jenvey</name><uri>http://www.blogger.com/profile/09838979615980113137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2013/01/py3k-status-update-9.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIHSX8_cSp7ImA9WhNXGEU.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-7412729710421119926</id><published>2012-12-07T14:55:00.001+01:00</published><updated>2012-12-07T14:55:38.149+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-07T14:55:38.149+01:00</app:edited><title>PyPy related internship at NCAR</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;Hello everyone&lt;/p&gt;
&lt;p&gt;I would like to advertise a PyPy-related summer internship at
the National Center for Atmospheric Research, which is located in lovely
Boulder, Colorado. As for the last year, the mentor will be Davide del Vento,
with my possible support on the PyPy side.&lt;/p&gt;
&lt;p&gt;The full details of the application are to be found on
&lt;a class="reference external" href="http://cisl.catsone.com/careers/index.php?m=portal&amp;amp;a=details&amp;amp;jobOrderID=1694159"&gt;the internship description&lt;/a&gt; and make sure you read &lt;a class="reference external" href="https://www2.cisl.ucar.edu/siparcs"&gt;the requirements&lt;/a&gt;
first. Important requirements:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Must currently be enrolled in a United States university.&lt;/li&gt;
&lt;li&gt;Only students authorized to work for any employer in the United
States will be considered for the SIParCS program.&lt;/li&gt;
&lt;li&gt;Must be a graduate or under graduate who has completed their sophomore year.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you happen to fulfill the requirements, to me this sounds like
a great opportunity to spend a summer at NCAR in Boulder hacking on atmospheric
models using PyPy.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/br&gt;
fijal&lt;/p&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/H6iPZ1t5qmM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/7412729710421119926/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=7412729710421119926" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/7412729710421119926?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/7412729710421119926?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/H6iPZ1t5qmM/pypy-related-internship-at-ncar.html" title="PyPy related internship at NCAR" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/12/pypy-related-internship-at-ncar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUFRX89cCp7ImA9WhNXFks.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-3932232806458251730</id><published>2012-12-04T23:30:00.000+01:00</published><updated>2012-12-04T23:30:14.168+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-04T23:30:14.168+01:00</app:edited><title>Py3k status update #8</title><content type="html">&lt;p&gt;This is the eight status update about our work on the &lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/commits/all/tip/branch%28%22py3k%22%29"&gt;py3k branch&lt;/a&gt;, which&lt;br /&gt;
we can work on thanks to all of the people who &lt;a class="reference external" href="http://morepypy.blogspot.com/2012/01/py3k-and-numpy-first-stage-thanks-to.html"&gt;donated&lt;/a&gt; to the &lt;a class="reference external" href="http://pypy.org/py3donate.html"&gt;py3k&lt;br /&gt;
proposal&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Just a short update on November's work: we're now passing about 194 of&lt;br /&gt;
approximately 355 modules of CPython's regression test suite, up from passing&lt;br /&gt;
160 last month. Many test modules only fail a small number of individual tests&lt;br /&gt;
now.&lt;/p&gt;&lt;p&gt;We'd like to thank Amaury Forgeot d'Arc for his contributions, in particular he&lt;br /&gt;
has made significant progress on updating &lt;a class="reference external" href="http://morepypy.blogspot.com/2010/04/using-cpython-extension-modules-with.html"&gt;CPyExt&lt;/a&gt; for Python 3 this month.&lt;/p&gt;&lt;p&gt;Some other highlights:&lt;/p&gt;&lt;ul class="simple"&gt;&lt;li&gt;&lt;tt class="docutils literal"&gt;test_marshal&lt;/tt&gt; now passes, and there's been significant progress on&lt;br /&gt;
pickling (thanks &lt;a class="reference external" href="https://twitter.com/Joushou"&gt;Kenny Levinsen&lt;/a&gt; and Amaury for implementing&lt;br /&gt;
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;int.{to,from}_bytes&lt;/span&gt;&lt;/tt&gt;)&lt;/li&gt;
&lt;li&gt;We now have a &lt;tt class="docutils literal"&gt;_posixsubprocess&lt;/tt&gt; module&lt;/li&gt;
&lt;li&gt;More encoding related fixes, which affects many failing tests&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;_sre&lt;/tt&gt; was updated and now &lt;tt class="docutils literal"&gt;test_re&lt;/tt&gt; almost passes&lt;/li&gt;
&lt;li&gt;Exception behavior is almost complete per the Python 3 specs, what's mostly&lt;br /&gt;
missing now are the new &lt;tt class="docutils literal"&gt;__context__&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;__traceback__&lt;/tt&gt; attributes (&lt;a class="reference external" href="http://www.python.org/dev/peps/pep-3134/"&gt;PEP&lt;br /&gt;
3134&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fixed some crashes and deadlocks occurring during the regression tests&lt;/li&gt;
&lt;li&gt;We merged the &lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/commits/all/tip/branch%28%22unicode-strategies%22%29"&gt;unicode-strategies&lt;/a&gt; branch both to default and to py3k: now we&lt;br /&gt;
have versions of lists, dictionaries and sets specialized for unicode&lt;br /&gt;
elements, as we already had for strings.&lt;/li&gt;
&lt;li&gt;However, for string-specialized containers are still faster in some cases&lt;br /&gt;
because there are shortcuts which have not been implemented for unicode yet&lt;br /&gt;
(e.g., constructing a set of strings from a list of strings). The plan is to&lt;br /&gt;
completely kill the shortcuts and improve the JIT to produce the fast&lt;br /&gt;
version automatically for both the string and unicode versions, to have a&lt;br /&gt;
more maintainable codebase without sacrificing the speed. The &lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/commits/all/tip/branch%28%22autoreds%22%29"&gt;autoreds&lt;/a&gt;&lt;br /&gt;
branch (already merged) was a first step in this direction.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;cheers,&lt;br /&gt;
Philip&amp;amp;Antonio&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/Xe7lonSRNtY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/3932232806458251730/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=3932232806458251730" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/3932232806458251730?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/3932232806458251730?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/Xe7lonSRNtY/py3k-status-update-8.html" title="Py3k status update #8" /><author><name>Philip Jenvey</name><uri>http://www.blogger.com/profile/09838979615980113137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/12/py3k-status-update-8.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkICRXczcSp7ImA9WhNXEEk.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-5133109101989613355</id><published>2012-11-27T20:29:00.000+01:00</published><updated>2012-11-27T20:29:24.989+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-27T20:29:24.989+01:00</app:edited><title>PyPy San Francisco Sprint Dec 1st - Dec 2nd 2012</title><content type="html">&lt;p&gt;The next PyPy sprint will be in San Francisco, California. It is a&lt;br /&gt;
public sprint, suitable for newcomers. It will run on Saturday December 1st and&lt;br /&gt;
Sunday December 2nd. The goals for the sprint are continued work towards the&lt;br /&gt;
2.0 release as well as code cleanup, we of course welcome any topic which&lt;br /&gt;
contributors are interested in working on.&lt;/p&gt;&lt;p&gt;Some other possible topics are:&lt;/p&gt;&lt;ul class="simple"&gt;&lt;li&gt;running your software on PyPy&lt;/li&gt;
&lt;li&gt;work on PyPy's numpy (&lt;a class="reference external" href="http://morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html"&gt;status&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;work on STM (&lt;a class="reference external" href="http://mail.python.org/pipermail/pypy-dev/2012-September/010513.html"&gt;status&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;JIT improvements&lt;/li&gt;
&lt;li&gt;any exciting stuff you can think of&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If there are newcomers, we'll run the usual introduction to hacking on&lt;br /&gt;
PyPy.&lt;/p&gt;&lt;br /&gt;
&lt;h1&gt;Location&lt;/h1&gt;&lt;p&gt;The sprint will be held at the Rackspace Office:&lt;/p&gt;&lt;p&gt;620 Folsom St, Ste 100&lt;br /&gt;
San Francisco&lt;/p&gt;&lt;p&gt;The doors will open at 10AM both days, and run until 6PM both days.&lt;/p&gt;&lt;p&gt;Thanks to David Reid for helping get everything set up!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/iEcPMwqkOPQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/5133109101989613355/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=5133109101989613355" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/5133109101989613355?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/5133109101989613355?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/iEcPMwqkOPQ/pypy-san-francisco-sprint-dec-1st-dec.html" title="PyPy San Francisco Sprint Dec 1st - Dec 2nd 2012" /><author><name>Alex</name><uri>http://www.blogger.com/profile/14054821112394577330</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/11/pypy-san-francisco-sprint-dec-1st-dec.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YCRXgycSp7ImA9WhNQFUU.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-2702952243260181341</id><published>2012-11-22T12:51:00.001+01:00</published><updated>2012-11-22T12:52:44.699+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-22T12:52:44.699+01:00</app:edited><title>PyPy 2.0 beta 1</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;We're pleased to announce the 2.0 beta 1 release of PyPy. This release is
not a typical beta, in a sense the stability is the same or better than 1.9
and can be used in production. It does however include a few performance
regressions documented below that don't allow us to label is as 2.0 final.
(It also contains many performance improvements.)&lt;/p&gt;
&lt;p&gt;The main features of this release are support for ARM processor and
compatibility with CFFI. It also includes
numerous improvements to the numpy in pypy effort, cpyext and performance.&lt;/p&gt;
&lt;p&gt;You can download the PyPy 2.0 beta 1 release here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;a class="reference external" href="http://pypy.org/download.html"&gt;http://pypy.org/download.html&lt;/a&gt;&lt;/blockquote&gt;
&lt;div class="section" id="what-is-pypy"&gt;
&lt;h3&gt;What is PyPy?&lt;/h3&gt;
&lt;p&gt;PyPy is a very compliant Python interpreter, almost a drop-in replacement for
CPython 2.7.3. It's fast (&lt;a class="reference external" href="http://bit.ly/USXqpP"&gt;pypy 2.0 beta 1 and cpython 2.7.3&lt;/a&gt;
performance comparison) due to its integrated tracing JIT compiler.&lt;/p&gt;
&lt;p&gt;This release supports x86 machines running Linux 32/64, Mac OS X 64 or
Windows 32. It also supports ARM machines running Linux.
Windows 64 work is still stalling, we would welcome a volunteer
to handle that.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="how-to-use-pypy"&gt;
&lt;h3&gt;How to use PyPy?&lt;/h3&gt;
&lt;p&gt;We suggest using PyPy from a &lt;a class="reference external" href="http://www.virtualenv.org/en/latest/"&gt;virtualenv&lt;/a&gt;. Once you have a virtualenv
installed, you can follow instructions from &lt;a class="reference external" href="http://doc.pypy.org/en/latest/getting-started.html#installing-using-virtualenv"&gt;pypy documentation&lt;/a&gt; on how
to proceed. This document also covers other &lt;a class="reference external" href="http://doc.pypy.org/en/latest/getting-started.html#installing-pypy"&gt;installation schemes&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="regressions"&gt;
&lt;h3&gt;Regressions&lt;/h3&gt;
&lt;p&gt;Reasons why this is not PyPy 2.0:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;the &lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; fast path is now slower than it used to be. In PyPy
1.9 &lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; was either incredibly faster or slower than CPython depending whether
you hit the fast path or not. Right now it's usually simply slower. We're
probably going to rewrite &lt;tt class="docutils literal"&gt;ctypes&lt;/tt&gt; using &lt;tt class="docutils literal"&gt;cffi&lt;/tt&gt;, which will make it
universally faster.&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;cffi&lt;/tt&gt; (an alternative to interfacing with C code) is very fast, but
it is missing one optimization that will make it as fast as a native
call from C.&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;numpypy&lt;/tt&gt; lazy computation was disabled for the sake of simplicity.
We should reenable this for the final 2.0 release.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="highlights"&gt;
&lt;h3&gt;Highlights&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;cffi&lt;/tt&gt; is officially supported by PyPy. You can install it normally by
using &lt;tt class="docutils literal"&gt;pip install cffi&lt;/tt&gt; once you have installed &lt;a class="reference external" href="http://doc.pypy.org/en/latest/getting-started.html#installing-pypy"&gt;PyPy and pip&lt;/a&gt;.
The corresponding &lt;tt class="docutils literal"&gt;0.4&lt;/tt&gt; version of &lt;tt class="docutils literal"&gt;cffi&lt;/tt&gt; has been released.&lt;/li&gt;
&lt;li&gt;ARM is now an officially supported processor architecture.
PyPy now work on soft-float ARM/Linux builds.  Currently ARM processors
supporting the ARMv7 and later ISA that include a floating-point unit are
supported.&lt;/li&gt;
&lt;li&gt;This release contains the latest Python standard library 2.7.3 and is fully
compatible with Python 2.7.3.&lt;/li&gt;
&lt;li&gt;It does not however contain hash randomization, since the solution present
in CPython is not solving the problem anyway. The reason can be
found on the &lt;a class="reference external" href="http://bugs.python.org/issue14621"&gt;CPython issue tracker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;gc.get_referrers()&lt;/tt&gt; is now faster.&lt;/li&gt;
&lt;li&gt;Various numpy improvements. The list includes:&lt;ul&gt;
&lt;li&gt;axis argument support in many places&lt;/li&gt;
&lt;li&gt;full support for fancy indexing&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;complex128&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;complex64&lt;/tt&gt; dtypes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://doc.pypy.org/en/latest/jit-hooks.html"&gt;JIT hooks&lt;/a&gt; are now a powerful tool to introspect the JITting process that
PyPy performs.&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;**kwds&lt;/tt&gt; usage is much faster in the typical scenario&lt;/li&gt;
&lt;li&gt;operations on &lt;tt class="docutils literal"&gt;long&lt;/tt&gt; objects are now as fast as in CPython (from
roughly 2x slower)&lt;/li&gt;
&lt;li&gt;We now have special strategies for &lt;tt class="docutils literal"&gt;dict&lt;/tt&gt;/&lt;tt class="docutils literal"&gt;set&lt;/tt&gt;/&lt;tt class="docutils literal"&gt;list&lt;/tt&gt; which contain
unicode strings, which means that now such collections will be both faster
and more compact.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="things-we-re-working-on"&gt;
&lt;h3&gt;Things we're working on&lt;/h3&gt;
&lt;p&gt;There are a few things that did not make it to the 2.0 beta 1, which
are being actively worked on. Greenlets support in the JIT is one
that we would like to have before 2.0 final. Two important items that
will not make it to 2.0, but are being actively worked on, are:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Faster JIT warmup time.&lt;/li&gt;
&lt;li&gt;Software Transactional Memory.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
Maciej Fijalkowski, Armin Rigo and the PyPy team&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/KowWSZaN-vo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/2702952243260181341/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=2702952243260181341" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/2702952243260181341?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/2702952243260181341?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/KowWSZaN-vo/pypy-20-beta-1.html" title="PyPy 2.0 beta 1" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>9</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/11/pypy-20-beta-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGRn44fip7ImA9WhNSGEo.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-6182140595418083307</id><published>2012-11-02T16:47:00.000+01:00</published><updated>2012-11-02T16:47:07.036+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-02T16:47:07.036+01:00</app:edited><title>Py3k status update #7</title><content type="html">&lt;p&gt;This is the seventh status update about our work on the &lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/src/py3k"&gt;py3k branch&lt;/a&gt;, which&lt;br /&gt;
we can work on thanks to all of the people who &lt;a class="reference external" href="http://morepypy.blogspot.com/2012/01/py3k-and-numpy-first-stage-thanks-to.html"&gt;donated&lt;/a&gt; to the &lt;a class="reference external" href="http://pypy.org/py3donate.html"&gt;py3k&lt;br /&gt;
proposal&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The biggest news is that this month Philip started to work on py3k in parallel&lt;br /&gt;
to Antonio. As such, there was an increased amount of activity.&lt;/p&gt;&lt;p&gt;The &lt;a class="reference external" href="http://buildbot.pypy.org/summary?branch=py3k"&gt;py3k buildbots&lt;/a&gt; now fully translate the branch every night and run the&lt;br /&gt;
Python standard library tests.&lt;/p&gt;&lt;p&gt;We currently pass 160 out of approximately 355 modules of CPython's standard&lt;br /&gt;
test suite, fail 144 and skip approximately 51.&lt;/p&gt;&lt;p&gt;Some highlights:&lt;/p&gt;&lt;ul class="simple"&gt;&lt;li&gt;dictviews (the objects returned by dict.keys/values/items) has been greatly&lt;br /&gt;
improved, and now they full support set operators&lt;/li&gt;
&lt;li&gt;a lot of tests has been fixed wrt complex numbers (and in particular the&lt;br /&gt;
&lt;tt class="docutils literal"&gt;__complex__&lt;/tt&gt; method)&lt;/li&gt;
&lt;li&gt;_csv has been fixed and now it correctly handles unicode instead of bytes&lt;/li&gt;
&lt;li&gt;more parser fixes, py3k list comprehension semantics; now you can no longer&lt;br /&gt;
access the list comprehension variable after it finishes&lt;/li&gt;
&lt;li&gt;2to3'd most of the lib_pypy modules (pypy's custom standard lib&lt;br /&gt;
replacements/additions)&lt;/li&gt;
&lt;li&gt;py3-enabled pyrepl: this means that finally readline works at the command&lt;br /&gt;
prompt, as well as builtins.input(). &lt;tt class="docutils literal"&gt;pdb&lt;/tt&gt; seems to work, as well as&lt;br /&gt;
&lt;a class="reference external" href="http://pypi.python.org/pypi/fancycompleter"&gt;fancycompleter&lt;/a&gt; to get colorful TAB completions :-)&lt;/li&gt;
&lt;li&gt;py3 round&lt;/li&gt;
&lt;li&gt;further tightening/cleanup of the unicode handling (more usage of&lt;br /&gt;
surrogateescape, surrogatepass among other things)&lt;/li&gt;
&lt;li&gt;as well as keeping up with some big changes happening on the default branch&lt;br /&gt;
and of course various other fixes.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Finally, we would like to thank Amaury Forgeot d'Arc for his significant&lt;br /&gt;
contributions.&lt;/p&gt;&lt;p&gt;cheers,&lt;br /&gt;
Philip&amp;amp;Antonio&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/N-wdXCdlSpc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/6182140595418083307/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=6182140595418083307" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/6182140595418083307?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/6182140595418083307?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/N-wdXCdlSpc/py3k-status-update-7.html" title="Py3k status update #7" /><author><name>Philip Jenvey</name><uri>http://www.blogger.com/profile/09838979615980113137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>11</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/11/py3k-status-update-7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUFRH4zcSp7ImA9WhNSF0U.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-5489198414356844587</id><published>2012-11-01T17:43:00.001+01:00</published><updated>2012-11-01T17:43:35.089+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-01T17:43:35.089+01:00</app:edited><title>NumPy status update #5</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;

&lt;p&gt;Hello.&lt;/p&gt;
&lt;p&gt;I'm quite excited to inform that work on NumPy in PyPy has been restarted
and there has been quite a bit of progress on the NumPy front in PyPy in the
past two months. Things that happened:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;strong&gt;complex dtype support&lt;/strong&gt; - thanks to matti picus, NumPy on PyPy now supports
complex dtype (only complex128 so far, there is work on the other part)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;big refactoring&lt;/strong&gt; - probably the biggest issue we did was finishing
a big refactoring that disabled some speedups (notably lazy computation
of arrays), but lowered the barrier of implementing cool new features.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fancy indexing support&lt;/strong&gt; - all fancy indexing tricks should now work,
including &lt;tt class="docutils literal"&gt;a[b]&lt;/tt&gt; where &lt;tt class="docutils literal"&gt;b&lt;/tt&gt; is an array of integers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;newaxis support&lt;/strong&gt; - now you can use newaxis features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;improvements to ``intp``, ``uintp``, ``void``, ``string`` and record dtypes&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Features that have active branches, but hasn't been merged:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;strong&gt;float16 dtype support&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;missing ndarray attributes&lt;/strong&gt; - this is a branch to finish all attributes
on ndarray, hence ending one chapter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pickling support for numarray&lt;/strong&gt; - hasn't started yet, but next on the list&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More importantly, we're getting very close to able to import the python part
of the original numpy with only import modifications and running it's tests.
Most tests will fail at this point, however it'll be a good start for another
chapter :-)&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
fijal&lt;/p&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/qY0D9xVFF9o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/5489198414356844587/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=5489198414356844587" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/5489198414356844587?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/5489198414356844587?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/qY0D9xVFF9o/numpy-status-update-5.html" title="NumPy status update #5" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/11/numpy-status-update-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQARn45fyp7ImA9WhNTGUU.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-1612771358321767072</id><published>2012-10-23T12:15:00.002+02:00</published><updated>2012-10-23T12:15:47.027+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-23T12:15:47.027+02:00</app:edited><title>Cape Town 2012 sprint report</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;Hello.&lt;/p&gt;
&lt;p&gt;We're about to finish a PyPy sprint in Cape Town, South Africa that was
one of the smallest done so far, only having Armin Rigo and Maciej Fijalkowski
with Alex Gaynor joining briefly at the beginning, however also one of the
longest, lasting almost 3 weeks. The sprint theme seems to be predominantly
&amp;quot;no new features&amp;quot; and &amp;quot;spring cleaning&amp;quot;. We overall removed about 20k lines
of code in the PyPy source tree. The breakdown of things done and worked on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;We killed &lt;cite&gt;SomeObject&lt;/cite&gt; support in annotation and rtyper. This is a modest
code saving, however, it reduces the complexity of RPython and also,
hopefully, improves compile errors from RPython. We're far from done
on the path to have comprehensible compile-time errors, but the first
step is always the hardest :)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;We killed some magic in specifying the interface between builtin functions
and Python code. It used to be possible to write builtin functions like this:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
def f(space, w_x='xyz'):
&lt;/pre&gt;
&lt;p&gt;which will magically wrap &lt;cite&gt;'xyz'&lt;/cite&gt; into a W_StringObject. Right now, instead,
you have to write:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
&amp;#64;unwrap_spec(w_x=WrappedDefault('xyz'))
def f(space, w_x):
&lt;/pre&gt;
&lt;p&gt;which is more verbose, but less magical.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;We killed the &lt;cite&gt;CExtModuleBuilder&lt;/cite&gt; which is the last remaining part of
infamous extension compiler that could in theory build C extensions
for CPython in RPython. This was never working very well and the main
part was killed long ago.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;We killed various code duplications in the C backend.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;We killed &lt;cite&gt;microbench&lt;/cite&gt; and a bunch of other small-to-medium unused
directories.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;We killed llgraph JIT backend and rewrote it from scratch. Now the llgraph
backend is not translatable, but this feature was rarely used and caused
a great deal of complexity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;We progressed on &lt;cite&gt;continulet-jit-3&lt;/cite&gt; branch, up to the point of merging
it into &lt;cite&gt;result-in-resops&lt;/cite&gt; branch, which also has seen a bit of progress.&lt;/p&gt;
&lt;p&gt;Purpose of those two branches:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;cite&gt;continulet-jit-3&lt;/cite&gt;: enable stackless to interact with the JIT by killing
global state while resuming from the JIT into the interpreter. This has
multiple benefits. For example it's one of the stones on the path to
enable STM for PyPy. It also opens new possibilities for other optimizations
including Python-Python calls and generators.&lt;/li&gt;
&lt;li&gt;&lt;cite&gt;result-in-resops&lt;/cite&gt;: the main goal is to speed up the tracing time of PyPy.
We found out the majority of time is spent in the optimizer chain,
which faces an almost complete rewrite. It also simplifies the storage
of the operations as well as the number of implicit invariants that have
to be kept in mind while developing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;We finished and merged the excellent work by Ronan Lamy which makes the
flow object space (used for abstract interpretation during RPython
compilation) independent from the Python interpreter. This means
we've achieved an important milestone on the path of separating the RPython
translation toolchain from the PyPy Python interpreter.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
fijal &amp;amp; armin&lt;/p&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/nDm4Cc0o3xE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/1612771358321767072/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=1612771358321767072" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1612771358321767072?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1612771358321767072?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/nDm4Cc0o3xE/cape-town-2012-sprint-report.html" title="Cape Town 2012 sprint report" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/10/cape-town-2012-sprint-report.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcBSHs-eCp7ImA9WhJbFkg.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-4049281716377789914</id><published>2012-09-26T11:50:00.001+02:00</published><updated>2012-09-26T11:50:59.550+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-26T11:50:59.550+02:00</app:edited><title>Py3k status update #6</title><content type="html">&lt;p&gt;This is the sixth status update about our work on the &lt;a class="reference external" href="https://bitbucket.org/pypy/pypy/src/py3k"&gt;py3k branch&lt;/a&gt;, which we&lt;br /&gt;
can work on thanks to all of the people who &lt;a class="reference external" href="http://morepypy.blogspot.com/2012/01/py3k-and-numpy-first-stage-thanks-to.html"&gt;donated&lt;/a&gt; to the &lt;a class="reference external" href="http://pypy.org/py3donate.html"&gt;py3k proposal&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The coolest news is not about what we did in the past weeks, but what we will&lt;br /&gt;
do in the next: I am pleased to announce that &lt;a class="reference external" href="https://twitter.com/pjenvey"&gt;Philip Jenvey&lt;/a&gt; has been&lt;br /&gt;
selected by the PyPy communitiy to be funded for his upcoming work on py3k,&lt;br /&gt;
thanks to your generous donations. He will start to work on it shortly, and he&lt;br /&gt;
will surely help the branch to make faster progress.  I am also particularly&lt;br /&gt;
happy of this because Philip is the first non-core developer who is getting&lt;br /&gt;
paid with donations: he demonstrated over the past months to be able to work&lt;br /&gt;
effectively on PyPy, and so we were happy to approve his application for the&lt;br /&gt;
job.  This means that anyone can potentially be selected in the future, the&lt;br /&gt;
only strict requirement is to have a deep interest in working on PyPy and to&lt;br /&gt;
prove to be able to do so by contributing to the project.&lt;/p&gt;&lt;p&gt;Back to the status of the branch. Most of the work since the last status&lt;br /&gt;
update has been done in the area of, guess what? Unicode strings. As usual,&lt;br /&gt;
this is one of the most important changes between Python 2 and Python 3, so&lt;br /&gt;
it's not surprising.  The biggest news is that now PyPy internally supports&lt;br /&gt;
unicode identifiers (such as names of variables, functions, attributes, etc.),&lt;br /&gt;
whereas earlier it supported only ASCII bytes strings.  The changes is still&lt;br /&gt;
barely visible from the outside, because the parser still rejects non-ASCII&lt;br /&gt;
identifiers, however you can see it with a bit of creativity:&lt;/p&gt;&lt;pre class="literal-block"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; def foo(x): pass
&amp;gt;&amp;gt;&amp;gt;&amp;gt; foo(**{'àèìòù': 42})
Traceback (most recent call last):
  File &amp;quot;&amp;lt;console&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;
TypeError: foo() got an unexpected keyword argument 'àèìòù'
&lt;/pre&gt;&lt;p&gt;Before the latest changes, you used to get question marks instead of the&lt;br /&gt;
proper name for the keyword argument.  Although this might seem like a small&lt;br /&gt;
detail, it is a big step towards a proper working Python 3 interpreter and it&lt;br /&gt;
required a couple of days of headaches.  A spin-off of this work is that now&lt;br /&gt;
RPython has better built-in support for unicode (also in the default branch):&lt;br /&gt;
for example, it now supports unicode string formatting (using the percent&lt;br /&gt;
operator) and the methods &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;.encode/.decode('utf-8')&lt;/span&gt;&lt;/tt&gt;.&lt;/p&gt;&lt;p&gt;Other than that there is the usual list of smaller issues and bugs that got&lt;br /&gt;
fixed, including (but not limited to):&lt;/p&gt;&lt;blockquote&gt;&lt;ul class="simple"&gt;&lt;li&gt;teach the compiler when to emit the new opcode &lt;tt class="docutils literal"&gt;DELETE_DEREF&lt;/tt&gt; (and&lt;br /&gt;
implement it!)&lt;/li&gt;
&lt;li&gt;detect when we use spaces and TABs inconsistently in the source code, as&lt;br /&gt;
CPython does&lt;/li&gt;
&lt;li&gt;fix yet another bug related to the new lexically scoped exceptions (this&lt;br /&gt;
is the last one, hopefully)&lt;/li&gt;
&lt;li&gt;port some of the changes that we did to the standard CPython 2.7 tests to&lt;br /&gt;
3.2, to mark those which are implementation details and should not be run on&lt;br /&gt;
PyPy&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;p&gt;Finally, I would like to thank Amaury Forgeot d'Arc and Ariel Ben-Yehuda for&lt;br /&gt;
their work on the branch; among other things, Amaury recently worked on&lt;br /&gt;
&lt;tt class="docutils literal"&gt;cpyext&lt;/tt&gt; and on the PyPy &lt;tt class="docutils literal"&gt;_cffi_backend&lt;/tt&gt;, while Ariel submitted a patch to&lt;br /&gt;
implement &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-3138/"&gt;PEP 3138&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/NARs5lVu200" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/4049281716377789914/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=4049281716377789914" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4049281716377789914?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/4049281716377789914?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/NARs5lVu200/py3k-status-update-6.html" title="Py3k status update #6" /><author><name>Antonio Cuni</name><uri>http://www.blogger.com/profile/17017456817083804792</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://3.bp.blogspot.com/-L5bYMW7FznA/Tb3Ms8nMvRI/AAAAAAAAANI/dbKVSIc2dzk/s220/anto-bn3.jpg" /></author><thr:total>7</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/09/py3k-status-update-6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4GSHk8fyp7ImA9WhJVGEs.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-5757682347636918027</id><published>2012-09-05T20:15:00.001+02:00</published><updated>2012-09-05T20:15:29.777+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-05T20:15:29.777+02:00</app:edited><title>PyPy Cape Town Sprint Oct 7th - Oct 21st 2012</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;The next PyPy sprint will be in Cape Town, South Africa. It is a
public sprint, suitable for newcomers. It starts a couple of days
after &lt;a class="reference external" href="http://za.pycon.org"&gt;PyCon South Africa&lt;/a&gt;, which is on the 4th and 5th of October.
This is a relatively unusual sprint in that it is hosted halfway
across the world from where most contributors live, so we plan to
spend some time during those two weeks doing sprinting and some time
doing touristy stuff. The goals for the sprint are general progress
and whatever people are interested in.&lt;/p&gt;
&lt;p&gt;Possible topics:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;PyPy release 2.0&lt;/li&gt;
&lt;li&gt;running your software on PyPy&lt;/li&gt;
&lt;li&gt;work on PyPy's numpy (&lt;a class="reference external" href="http://morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html"&gt;status&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;work on STM (&lt;a class="reference external" href="http://mail.python.org/pipermail/pypy-dev/2012-September/010513.html"&gt;status&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;JIT improvements&lt;/li&gt;
&lt;li&gt;any exciting stuff you can think of&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If there are newcomers, we'll run the usual introduction to hacking on
PyPy.&lt;/p&gt;
&lt;div class="section" id="location"&gt;
&lt;h3&gt;Location&lt;/h3&gt;
&lt;p&gt;The sprint will be held either in the apartment of fijal, which is in
Tamboerskloof, Cape Town, or in the offices of the Praekelt
Foundation, located in Woodstock, Cape Town. The Praekelt Foundation
has offered to host us, if needed.&lt;/p&gt;
&lt;p&gt;Cape Town, as a very touristy place, has tons of accomodation ranging
in quality from good to amazing. Depending on the sprint location you
might need a car.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="good-to-know"&gt;
&lt;h3&gt;Good to Know&lt;/h3&gt;
&lt;p&gt;You probably don't need visa for South Africa -- consult Wikipedia.
South Africa is a lovely place with lots of stuff to do. You can see
penguins, elephants, lions and sharks all on one day (or better yet,
on multiple days).&lt;/p&gt;
&lt;p&gt;There is a wide selection of good restaurants within a reasonable
distance of the sprint venue (depending on the venue, either walking
or driving).&lt;/p&gt;
&lt;p&gt;The power plug is some weird derivative of an old-english standard,
but adapters are easily acquired.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="who-s-coming"&gt;
&lt;h3&gt;Who's Coming?&lt;/h3&gt;
&lt;p&gt;If you'd like to come, please let us know when you will be arriving
and leaving, as well as what your interests are. We'll keep a list of
&lt;a class="reference external" href="https://bitbucket.org/pypy/extradoc/src/tip/sprintinfo/cape-town-2012/people.txt"&gt;people&lt;/a&gt; which we'll update (or you can do so yourself if you have
bitbucket pypy commit rights).&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
fijal
&lt;/p&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/5UsahbdBmvs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/5757682347636918027/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=5757682347636918027" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/5757682347636918027?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/5757682347636918027?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/5UsahbdBmvs/pypy-cape-town-sprint-oct-7th-oct-21st.html" title="PyPy Cape Town Sprint Oct 7th - Oct 21st 2012" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>10</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/09/pypy-cape-town-sprint-oct-7th-oct-21st.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUMSXc8fyp7ImA9WhJVF0g.&quot;"><id>tag:blogger.com,1999:blog-3971202189709462152.post-1605312600799448094</id><published>2012-09-04T11:18:00.000+02:00</published><updated>2012-09-04T11:18:08.977+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-04T11:18:08.977+02:00</app:edited><title>NumPy on PyPy status update</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;Hello everyone.&lt;/p&gt;
&lt;p&gt;It's been a while since we posted a numpy work update, but I'm pleased to
inform you that work on it has been restarted. A lot of the work has been
done by Matti Picus, who is one of the newest contributors to the PyPy
project. None of the work below has been merged so far, it's work in progress:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Complex dtype support.&lt;/li&gt;
&lt;li&gt;Fixing incompatibilities between numpy and pypy's version.&lt;/li&gt;
&lt;li&gt;Refactoring numpypy to simplify the code and make it easier for new
contributors.&lt;/li&gt;
&lt;li&gt;Reuse most of the numpy's pure python code without modifications.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finishing this is also the plan for the next month.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br/&gt;
fijal&lt;/p&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PyPyStatusBlog/~4/0yhwKCCjf_g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://morepypy.blogspot.com/feeds/1605312600799448094/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3971202189709462152&amp;postID=1605312600799448094" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1605312600799448094?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3971202189709462152/posts/default/1605312600799448094?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PyPyStatusBlog/~3/0yhwKCCjf_g/numpy-on-pypy-status-update.html" title="NumPy on PyPy status update" /><author><name>Maciej Fijalkowski</name><uri>http://www.blogger.com/profile/11410841070239382771</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://morepypy.blogspot.com/2012/09/numpy-on-pypy-status-update.html</feedburner:origLink></entry></feed>
