diff --git a/archive.html b/archive.html index b01ac125cfcf89e4c32447587371a7501ead8c38_YXJjaGl2ZS5odG1s..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_YXJjaGl2ZS5odG1s 100644 --- a/archive.html +++ b/archive.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/compat.html b/compat.html index b01ac125cfcf89e4c32447587371a7501ead8c38_Y29tcGF0Lmh0bWw=..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_Y29tcGF0Lmh0bWw= 100644 --- a/compat.html +++ b/compat.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> @@ -71,7 +68,6 @@ language, passing Python test suite (with minor modifications that were already accepted in the main python in newer versions). It supports most of the commonly used Python <a class="reference external" href="http://docs.python.org/library/">standard library modules</a>; details below.</p> -<p>(PyPy3 implements the Python language version 3.5.3. It is beta right now, -and it is quite possible that a few things are missing. The rest of this -document only describes the situation of the 2.7.x implementation.)</p> +<p>PyPy3 implements the Python language version 3.5.3. It has been released, +but Python is a large language and it is quite possible that a few things are missing.</p> <p class="download-menu"><a class="reference external" href="http://packages.pypy.org">List of installable top 1000 PyPI packages</a></p> @@ -77,6 +73,6 @@ <p class="download-menu"><a class="reference external" href="http://packages.pypy.org">List of installable top 1000 PyPI packages</a></p> -<p>PyPy has <strong>alpha/beta-level</strong> support for the <a class="reference external" href="http://docs.python.org/c-api/">CPython C API</a>, however, -this feature is not yet complete. We strongly advise use of <a class="reference external" href="http://cffi.readthedocs.org/">CFFI</a> +<p>PyPy has support for the <a class="reference external" href="http://docs.python.org/c-api/">CPython C API</a>, however there are constructs +that are <cite>not compatible</cite>. We strongly advise use of <a class="reference external" href="http://cffi.readthedocs.org/">CFFI</a> instead. CFFI come builtin with PyPy. Many libraries will require a bit of effort to work, but there are known success stories. Check out PyPy blog for updates, as well as the <a class="reference external" href="https://bitbucket.org/pypy/compatibility/wiki/Home">Compatibility Wiki</a>.</p> @@ -106,8 +102,9 @@ <li>pyglet</li> <li>Pillow (the PIL fork)</li> <li><a class="reference external" href="https://github.com/amauryfa/lxml/tree/cffi/">lxml</a></li> +<li>NumPy</li> </ul> <p>The main difference that is not going to be fixed is that PyPy does not support refcounting semantics. The following code won't fill the file immediately, but only after a certain period of time, when the GC does a collection:</p> @@ -109,7 +106,7 @@ </ul> <p>The main difference that is not going to be fixed is that PyPy does not support refcounting semantics. The following code won't fill the file immediately, but only after a certain period of time, when the GC does a collection:</p> -<div class="syntax python"><pre><span class="nb">open</span><span class="p">(</span><span class="s">"filename"</span><span class="p">,</span> <span class="s">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">"stuff"</span><span class="p">)</span><br/></pre></div> +<div class="syntax python"><pre><span></span><span class="nb">open</span><span class="p">(</span><span class="s2">"filename"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"stuff"</span><span class="p">)</span><br/></pre></div> <p>The proper fix is</p> @@ -115,3 +112,3 @@ <p>The proper fix is</p> -<div class="syntax python"><pre><span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">"filename"</span><span class="p">,</span> <span class="s">"w"</span><span class="p">)</span><br/><span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">"stuff"</span><span class="p">)</span><br/><span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span><br/></pre></div> +<div class="syntax python"><pre><span></span><span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"filename"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span><br/><span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"stuff"</span><span class="p">)</span><br/><span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span><br/></pre></div> <p>or using the <tt class="docutils literal">with</tt> keyword</p> @@ -117,5 +114,5 @@ <p>or using the <tt class="docutils literal">with</tt> keyword</p> -<div class="syntax python"><pre><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">"filename"</span><span class="p">,</span> <span class="s">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span><br/> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">"stuff"</span><span class="p">)</span><br/></pre></div> +<div class="syntax python"><pre><span></span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"filename"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span><br/> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"stuff"</span><span class="p">)</span><br/></pre></div> <p>The same problem–not closing your files–can also show up if your program opens a large number of files without closing them explicitly. In that case, you can easily hit the system limit on the number of file @@ -129,7 +126,7 @@ <p>Similarly, remember that you must <tt class="docutils literal">close()</tt> a non-exhausted generator in order to have its pending <tt class="docutils literal">finally</tt> or <tt class="docutils literal">with</tt> clauses executed immediately:</p> -<div class="syntax python"><pre><span class="k">def</span> <span class="nf">mygen</span><span class="p">():</span><br/> <span class="k">with</span> <span class="n">foo</span><span class="p">:</span><br/> <span class="k">yield</span> <span class="mi">42</span><br/><br/><span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mygen</span><span class="p">():</span><br/> <span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">42</span><span class="p">:</span><br/> <span class="k">break</span> <span class="c"># foo.__exit__ is not run immediately!</span><br/><br/><span class="c"># fixed version:</span><br/><span class="n">gen</span> <span class="o">=</span> <span class="n">mygen</span><span class="p">()</span><br/><span class="k">try</span><span class="p">:</span><br/> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">gen</span><span class="p">:</span><br/> <span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">42</span><span class="p">:</span><br/> <span class="k">break</span><br/><span class="k">finally</span><span class="p">:</span><br/> <span class="n">gen</span><span class="o">.</span><span class="n">close</span><span class="p">()</span><br/></pre></div> +<div class="syntax python"><pre><span></span><span class="k">def</span> <span class="nf">mygen</span><span class="p">():</span><br/> <span class="k">with</span> <span class="n">foo</span><span class="p">:</span><br/> <span class="k">yield</span> <span class="mi">42</span><br/><br/><span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mygen</span><span class="p">():</span><br/> <span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">42</span><span class="p">:</span><br/> <span class="k">break</span> <span class="c1"># foo.__exit__ is not run immediately!</span><br/><br/><span class="c1"># fixed version:</span><br/><span class="n">gen</span> <span class="o">=</span> <span class="n">mygen</span><span class="p">()</span><br/><span class="k">try</span><span class="p">:</span><br/> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">gen</span><span class="p">:</span><br/> <span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">42</span><span class="p">:</span><br/> <span class="k">break</span><br/><span class="k">finally</span><span class="p">:</span><br/> <span class="n">gen</span><span class="o">.</span><span class="n">close</span><span class="p">()</span><br/></pre></div> <p>More generally, <tt class="docutils literal">__del__()</tt> methods are not executed as predictively as on CPython: they run “some time later” in PyPy (or not at all if the program finishes running in the meantime). See <a class="reference external" href="http://pypy.readthedocs.org/en/latest/cpython_differences.html#differences-related-to-garbage-collection-strategies">more details diff --git a/contact.html b/contact.html index b01ac125cfcf89e4c32447587371a7501ead8c38_Y29udGFjdC5odG1s..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_Y29udGFjdC5odG1s 100644 --- a/contact.html +++ b/contact.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/don2.html b/don2.html index b01ac125cfcf89e4c32447587371a7501ead8c38_ZG9uMi5odG1s..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_ZG9uMi5odG1s 100644 --- a/don2.html +++ b/don2.html @@ -1,7 +1,7 @@ <ul> <li> - <a href="#" onclick="stm_donate(); return false;">Donate towards STM in pypy</a><br/> - <a href="#" onclick="py3k_donate(); return false;">Donate towards py3k in pypy</a><br/> + <!-- <a href="#" onclick="stm_donate(); return false;">Donate towards STM in pypy</a><br/> --> + <!-- <a href="#" onclick="py3k_donate(); return false;">Donate towards py3k in pypy</a><br/> --> <a href="#" onclick="general_donate(); return false;"><b>Donate towards general pypy progress</b></a><br/> <!-- a href="#" onclick="numpy_donate(); return false;">Donate towards NumPy in pypy</a><br/ --!> </li> diff --git a/download.html b/download.html index b01ac125cfcf89e4c32447587371a7501ead8c38_ZG93bmxvYWQuaHRtbA==..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_ZG93bmxvYWQuaHRtbA== 100644 --- a/download.html +++ b/download.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/features.html b/features.html index b01ac125cfcf89e4c32447587371a7501ead8c38_ZmVhdHVyZXMuaHRtbA==..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_ZmVhdHVyZXMuaHRtbA== 100644 --- a/features.html +++ b/features.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/howtohelp.html b/howtohelp.html index b01ac125cfcf89e4c32447587371a7501ead8c38_aG93dG9oZWxwLmh0bWw=..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_aG93dG9oZWxwLmh0bWw= 100644 --- a/howtohelp.html +++ b/howtohelp.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/index.html b/index.html index b01ac125cfcf89e4c32447587371a7501ead8c38_aW5kZXguaHRtbA==..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_aW5kZXguaHRtbA== 100644 --- a/index.html +++ b/index.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/js/script2.js b/js/script2.js index b01ac125cfcf89e4c32447587371a7501ead8c38_anMvc2NyaXB0Mi5qcw==..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_anMvc2NyaXB0Mi5qcw== 100644 --- a/js/script2.js +++ b/js/script2.js @@ -21,7 +21,6 @@ /* if (location.href.indexOf("numpydonate.html") >= 0) f = numpy_donate; -*/ if (location.href.indexOf("py3donate.html") >= 0) f = py3k_donate; else @@ -25,5 +24,6 @@ if (location.href.indexOf("py3donate.html") >= 0) f = py3k_donate; else +*/ f = general_donate; $(document).ready(f); diff --git a/numpydonate.html b/numpydonate.html index b01ac125cfcf89e4c32447587371a7501ead8c38_bnVtcHlkb25hdGUuaHRtbA==..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_bnVtcHlkb25hdGUuaHRtbA== 100644 --- a/numpydonate.html +++ b/numpydonate.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/people.html b/people.html index b01ac125cfcf89e4c32447587371a7501ead8c38_cGVvcGxlLmh0bWw=..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_cGVvcGxlLmh0bWw= 100644 --- a/people.html +++ b/people.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/performance.html b/performance.html index b01ac125cfcf89e4c32447587371a7501ead8c38_cGVyZm9ybWFuY2UuaHRtbA==..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_cGVyZm9ybWFuY2UuaHRtbA== 100644 --- a/performance.html +++ b/performance.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/py3donate.html b/py3donate.html index b01ac125cfcf89e4c32447587371a7501ead8c38_cHkzZG9uYXRlLmh0bWw=..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_cHkzZG9uYXRlLmh0bWw= 100644 --- a/py3donate.html +++ b/py3donate.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/source/_layouts/site.genshi b/source/_layouts/site.genshi index b01ac125cfcf89e4c32447587371a7501ead8c38_c291cmNlL19sYXlvdXRzL3NpdGUuZ2Vuc2hp..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_c291cmNlL19sYXlvdXRzL3NpdGUuZ2Vuc2hp 100644 --- a/source/_layouts/site.genshi +++ b/source/_layouts/site.genshi @@ -13,8 +13,6 @@ ('Blog', 'http://morepypy.blogspot.com'), ('People', 'people.html'), ('Contact', 'contact.html'), - ('Py3k donations', 'py3donate.html'), - ('STM donations', 'tmdonate2.html'), ], } diff --git a/source/compat.txt b/source/compat.txt index b01ac125cfcf89e4c32447587371a7501ead8c38_c291cmNlL2NvbXBhdC50eHQ=..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_c291cmNlL2NvbXBhdC50eHQ= 100644 --- a/source/compat.txt +++ b/source/compat.txt @@ -8,11 +8,10 @@ already accepted in the main python in newer versions). It supports most of the commonly used Python `standard library modules`_; details below. -(PyPy3 implements the Python language version 3.5.3. It is beta right now, -and it is quite possible that a few things are missing. The rest of this -document only describes the situation of the 2.7.x implementation.) +PyPy3 implements the Python language version 3.5.3. It has been released, +but Python is a large language and it is quite possible that a few things are missing. .. class:: download_menu `List of installable top 1000 PyPI packages`_ @@ -14,10 +13,10 @@ .. class:: download_menu `List of installable top 1000 PyPI packages`_ -PyPy has **alpha/beta-level** support for the `CPython C API`_, however, -this feature is not yet complete. We strongly advise use of `CFFI`_ +PyPy has support for the `CPython C API`_, however there are constructs +that are `not compatible`. We strongly advise use of `CFFI`_ instead. CFFI come builtin with PyPy. Many libraries will require a bit of effort to work, but there are known success stories. Check out PyPy blog for updates, as well as the `Compatibility Wiki`__. @@ -62,6 +61,8 @@ * `lxml`_ +* NumPy + The main difference that is not going to be fixed is that PyPy does not support refcounting semantics. The following code won't fill the file immediately, but only after a certain period of time, when the GC @@ -140,6 +141,7 @@ .. _`CPython C API`: http://docs.python.org/c-api/ .. _`CFFI`: http://cffi.readthedocs.org/ +.. _`not compatible`: http://doc.pypy.org/en/latest/cpython_differences.html#c-api-differences .. _`standard library modules`: http://docs.python.org/library/ .. _`our dev site`: http://pypy.readthedocs.org/en/latest/cpython_differences.html .. _`more details here`: http://pypy.readthedocs.org/en/latest/cpython_differences.html#differences-related-to-garbage-collection-strategies diff --git a/sponsor.html b/sponsor.html index b01ac125cfcf89e4c32447587371a7501ead8c38_c3BvbnNvci5odG1s..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_c3BvbnNvci5odG1s 100644 --- a/sponsor.html +++ b/sponsor.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/success.html b/success.html index b01ac125cfcf89e4c32447587371a7501ead8c38_c3VjY2Vzcy5odG1s..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_c3VjY2Vzcy5odG1s 100644 --- a/success.html +++ b/success.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/tmdonate.html b/tmdonate.html index b01ac125cfcf89e4c32447587371a7501ead8c38_dG1kb25hdGUuaHRtbA==..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_dG1kb25hdGUuaHRtbA== 100644 --- a/tmdonate.html +++ b/tmdonate.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div> diff --git a/tmdonate2.html b/tmdonate2.html index b01ac125cfcf89e4c32447587371a7501ead8c38_dG1kb25hdGUyLmh0bWw=..55c8463bf7f9b1254cef853d4743ea5be64c1ec5_dG1kb25hdGUyLmh0bWw= 100644 --- a/tmdonate2.html +++ b/tmdonate2.html @@ -57,9 +57,6 @@ <span class="menu-sub-sep"> | </span> <a href="contact.html">Contact</a> <br /> - <a href="py3donate.html">Py3k donations</a> - <span class="menu-sub-sep"> | </span> - <a href="tmdonate2.html">STM donations</a> </div> <hr class="clear" /> </div>