Skip to content
Snippets Groups Projects
Commit a6456ff7279d authored by Matti Picus's avatar Matti Picus
Browse files

remove yatiblog content, update the READMEs

parent de90045ba162
No related merge requests found
......@@ -4,5 +4,5 @@
See source/README.
The site is pull into pypy.org by a cron job on a psf-hosted instance,
see https://github.com/python/psf-chef/blob/master/cookbooks/pypy-home/recipes/default.rb
see https://github.com/python/psf-salt/tree/master/salt/pypy-web
The people with access to the instance are the ones in
......@@ -8,3 +8,3 @@
The people with access to the instance are the ones in
https://github.com/python/psf-chef/tree/master/data_bags/users
with pypy-home access
https://github.com/python/psf-salt/blob/master/pillar/base/users.sls
with pypy-web access
These html files are not written by hand!
See source/README.
The content of public is not written by hand!
It are generated via a Makefile.
The files in source/* are the old yatiblog sources.
<!DOCTYPE html>
<html>
<head>
<title>PyPy</title>
<meta http-equiv="content-language" content="en" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="PyPy Team" />
<meta name="description" content="PyPy" />
<meta name="copyright" content="MIT" />
<meta name="document-rating" content="general" />
<link rel="stylesheet" type="text/css" media="screen" title="default" href="css/site.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed for PyPy" href="http://feeds.feedburner.com/PyPyStatusBlog" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" />
<script type="text/javascript" src="https://use.typekit.com/hdt8sni.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/script2.js?bust=1"></script>
</head>
<body>
<script type="text/javascript">
var _gaq = [['_setAccount', 'UA-7778406-3'], ['_trackPageview']];
if (document.location.protocol !== 'file:') {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
}
</script>
<div id="body-outer"><div id="body-inner"><div id="body" class="clearfix">
<div id="header">
<div id="menu-follow">
<div><a href="https://bitbucket.org/pypy/pypy"><img src="https://www.selenic.com/hg-logo/logo-droplets-25.png" width="14px" height="14px" /></a></div>
<div><a href="http://feeds.feedburner.com/PyPyStatusBlog" title="Subscribe to the RSS Feed"><img src="https://feedburner.google.com/fb/lib/images/icons/feed-icon-12x12-orange.gif" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div>
</div>
<div id="logo"><a href="http://pypy.org"><img src="image/pypy-logo.png" alt="PyPy" height="110px" /></a></div>
<hr class="clear-left" />
<div id="menu-sub">
<a href="index.html">Home</a>
<span class="menu-sub-sep"> | </span>
<a href="features.html">What is PyPy?</a>
<span class="menu-sub-sep"> | </span>
<a href="download.html">Download</a>
<span class="menu-sub-sep"> | </span>
<a href="compat.html">Compatibility</a>
<span class="menu-sub-sep"> | </span>
<a href="performance.html">Performance</a>
<span class="menu-sub-sep"> | </span>
<a href="http://doc.pypy.org">Dev Documentation</a>
<span class="menu-sub-sep"> | </span>
<a href="http://morepypy.blogspot.com">Blog</a>
<span class="menu-sub-sep"> | </span>
<a href="people.html">People</a>
<span class="menu-sub-sep"> | </span>
<a href="contact.html">Contact</a>
<br />
</div>
<hr class="clear" />
</div>
<div id="content">
<div>
<div class="section-info" id="all-articles"><strong>Blog Posts Archive</strong></div>
<ul>
</ul>
<br />
<div class="section-info" id="all-articles"><strong>Other Articles</strong></div>
<ul>
</ul>
</div>
</div>
</div></div></div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>PyPy - Python compatibility</title>
<meta http-equiv="content-language" content="en" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="PyPy Team" />
<meta name="description" content="PyPy" />
<meta name="copyright" content="MIT" />
<meta name="document-rating" content="general" />
<link rel="stylesheet" type="text/css" media="screen" title="default" href="css/site.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed for PyPy" href="http://feeds.feedburner.com/PyPyStatusBlog" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" />
<script type="text/javascript" src="https://use.typekit.com/hdt8sni.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/script2.js?bust=1"></script>
</head>
<body>
<script type="text/javascript">
var _gaq = [['_setAccount', 'UA-7778406-3'], ['_trackPageview']];
if (document.location.protocol !== 'file:') {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
}
</script>
<div id="body-outer"><div id="body-inner"><div id="body" class="clearfix">
<div id="header">
<div id="menu-follow">
<div><a href="https://bitbucket.org/pypy/pypy"><img src="https://www.selenic.com/hg-logo/logo-droplets-25.png" width="14px" height="14px" /></a></div>
<div><a href="http://feeds.feedburner.com/PyPyStatusBlog" title="Subscribe to the RSS Feed"><img src="https://feedburner.google.com/fb/lib/images/icons/feed-icon-12x12-orange.gif" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div>
</div>
<div id="logo"><a href="http://pypy.org"><img src="image/pypy-logo.png" alt="PyPy" height="110px" /></a></div>
<hr class="clear-left" />
<div id="menu-sub">
<a href="index.html">Home</a>
<span class="menu-sub-sep"> | </span>
<a href="features.html">What is PyPy?</a>
<span class="menu-sub-sep"> | </span>
<a href="download.html">Download</a>
<span class="menu-sub-sep"> | </span>
<a href="compat.html">Compatibility</a>
<span class="menu-sub-sep"> | </span>
<a href="performance.html">Performance</a>
<span class="menu-sub-sep"> | </span>
<a href="http://doc.pypy.org">Dev Documentation</a>
<span class="menu-sub-sep"> | </span>
<a href="http://morepypy.blogspot.com">Blog</a>
<span class="menu-sub-sep"> | </span>
<a href="people.html">People</a>
<span class="menu-sub-sep"> | </span>
<a href="contact.html">Contact</a>
<br />
</div>
<hr class="clear" />
</div>
<div id="content">
<div>
<div id="main">
<h1 class="title">Python compatibility</h1>
<p>PyPy implements the Python language version 2.7.13. It supports all of the core
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.6.9. 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>
<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>
<p>C extensions need to be recompiled for PyPy in order to work. Depending on
your build system, it might work out of the box or will be slightly harder.</p>
<p>Standard library modules supported by PyPy. Note that large parts of python
library are implemented in pure python, so they don't have to be listed
there. Please just check if it imports. If it imports, it should work.</p>
<ul class="simple">
<li><tt class="docutils literal">__builtin__, __pypy__, _ast, _cffi_backend, _codecs, _collections, _continuation, _csv, _file, _hashlib, _io, _locale, _lsprof, _md5, _minimal_curses, _multibytecodec, _multiprocessing, _numpypy, _pickle_support, _pypyjson, _random, _rawffi, _sha, _socket, _sre, _ssl, _struct, _testing, _warnings, _weakref, array, binascii, bz2, cStringIO, cmath, cppyy, cpyext, crypt, errno, exceptions, fcntl, gc, imp, itertools, marshal, math, mmap, operator, parser, posix, pwd, pyexpat, pypyjit, select, signal, symbol, sys, termios, thread, time, token, unicodedata, zipimport, zlib</tt></li>
</ul>
<p>Supported, but written in pure Python:</p>
<ul class="simple">
<li><tt class="docutils literal">cPickle, ctypes, datetime, dbm, _functools, grp, readline, resource, sqlite3, syslog</tt></li>
</ul>
<p>All modules that are pure python in CPython of course work.</p>
<p>Python libraries known to work under PyPy (the list is not exhaustive).
A <a class="reference external" href="http://packages.pypy.org">fuller list</a> is available.</p>
<ul class="simple">
<li>ctypes</li>
<li>django</li>
<li>sqlalchemy</li>
<li>flask</li>
<li>twisted</li>
<li>pylons</li>
<li>divmod's nevow</li>
<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>
<div class="syntax python"><pre><span></span><span class="nb">open</span><span class="p">(</span><span class="s2">&quot;filename&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;stuff&quot;</span><span class="p">)</span><br/></pre></div>
<p>The proper fix is</p>
<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">&quot;filename&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</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">&quot;stuff&quot;</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>
<div class="syntax python"><pre><span></span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;filename&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</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">&quot;stuff&quot;</span><span class="p">)</span><br/></pre></div>
<p>The same problem&ndash;not closing your files&ndash;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
descriptors that are allowed to be opened at the same time.</p>
<p>Since release 5.4, PyPy can be run with the command-line option <tt class="docutils literal"><span class="pre">-X</span>
<span class="pre">track-resources</span></tt> (as in, <tt class="docutils literal">pypy <span class="pre">-X</span> <span class="pre">track-resources</span> myprogram.py</tt>).
This produces a ResourceWarning when the GC closes a non-closed file or
socket. The traceback for the place where the file or socket was
allocated is given as well, which aids finding places where <tt class="docutils literal">close()</tt>
is missing.</p>
<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></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 &ldquo;some time later&rdquo; 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
here</a>.</p>
<p>Note that PyPy returns unused memory to the operating system if there
is a madvise() system call (at least Linux, OS X, BSD) or on Windows. It is
important to realize that you may not see this in <tt class="docutils literal">top</tt>. The unused
pages are marked with <tt class="docutils literal">MADV_FREE</tt>, which tells the system &ldquo;if you
need more memory at some point, grab this page&rdquo;. As long as memory is
plentiful, the <tt class="docutils literal">RES</tt> column in <tt class="docutils literal">top</tt> might remains high. (Exceptions to
this rule are systems with no <tt class="docutils literal">MADV_FREE</tt>, where we use
<tt class="docutils literal">MADV_DONTNEED</tt>, which forcefully lowers the <tt class="docutils literal">RES</tt>. This includes
Linux &lt;= 4.4.)</p>
<p>A more complete list of known differences is available at <a class="reference external" href="http://pypy.readthedocs.org/en/latest/cpython_differences.html">our dev site</a>.</p>
</div>
<div id="sidebar">
</div>
</div>
</div>
</div></div></div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>PyPy - Contact</title>
<meta http-equiv="content-language" content="en" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="PyPy Team" />
<meta name="description" content="PyPy" />
<meta name="copyright" content="MIT" />
<meta name="document-rating" content="general" />
<link rel="stylesheet" type="text/css" media="screen" title="default" href="css/site.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed for PyPy" href="http://feeds.feedburner.com/PyPyStatusBlog" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" />
<script type="text/javascript" src="https://use.typekit.com/hdt8sni.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/script2.js?bust=1"></script>
</head>
<body>
<script type="text/javascript">
var _gaq = [['_setAccount', 'UA-7778406-3'], ['_trackPageview']];
if (document.location.protocol !== 'file:') {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
}
</script>
<div id="body-outer"><div id="body-inner"><div id="body" class="clearfix">
<div id="header">
<div id="menu-follow">
<div><a href="https://bitbucket.org/pypy/pypy"><img src="https://www.selenic.com/hg-logo/logo-droplets-25.png" width="14px" height="14px" /></a></div>
<div><a href="http://feeds.feedburner.com/PyPyStatusBlog" title="Subscribe to the RSS Feed"><img src="https://feedburner.google.com/fb/lib/images/icons/feed-icon-12x12-orange.gif" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div>
</div>
<div id="logo"><a href="http://pypy.org"><img src="image/pypy-logo.png" alt="PyPy" height="110px" /></a></div>
<hr class="clear-left" />
<div id="menu-sub">
<a href="index.html">Home</a>
<span class="menu-sub-sep"> | </span>
<a href="features.html">What is PyPy?</a>
<span class="menu-sub-sep"> | </span>
<a href="download.html">Download</a>
<span class="menu-sub-sep"> | </span>
<a href="compat.html">Compatibility</a>
<span class="menu-sub-sep"> | </span>
<a href="performance.html">Performance</a>
<span class="menu-sub-sep"> | </span>
<a href="http://doc.pypy.org">Dev Documentation</a>
<span class="menu-sub-sep"> | </span>
<a href="http://morepypy.blogspot.com">Blog</a>
<span class="menu-sub-sep"> | </span>
<a href="people.html">People</a>
<span class="menu-sub-sep"> | </span>
<a href="contact.html">Contact</a>
<br />
</div>
<hr class="clear" />
</div>
<div id="content">
<div>
<div id="main">
<h1 class="title">Contact</h1>
<ul class="simple">
<li>irc: <strong>#pypy</strong> on <strong>irc.freenode.net</strong></li>
<li>mailing list: <a class="reference external" href="http://mail.python.org/mailman/listinfo/pypy-dev">pypy-dev at python.org</a></li>
<li>for security related issues, non-public funding enquiries etc. please contact <a class="reference external" href="mailto:pypy-z&#64;python.org">pypy-z&#64;python.org</a></li>
<li>the bitbucket <a class="reference external" href="https://bitbucket.org/pypy/pypy/issues?status=new&amp;status=open">bug tracker</a> (registration required to open new issues or to comment)</li>
<li>more on our <a class="reference external" href="http://doc.pypy.org">dev site</a>.</li>
<li>code on <a class="reference external" href="https://bitbucket.org/pypy/pypy/overview">bitbucket</a>.</li>
</ul>
</div>
<div id="sidebar">
</div>
</div>
</div>
</div></div></div>
</body>
</html>
\ No newline at end of file
<ul>
<li>
<a href="#" onclick="stm_donate(); return false;">Donate towards STM in pypy</a><br/>
<a href="#" onclick="py3k_donate(); return false;"><b>Donate towards py3k in pypy</b></a><br/>
<a href="#" onclick="general_donate(); return false;">Donate towards general pypy progress</a><br/>
<!-- a href="#" onclick="numpy_donate(); return false;">Donate towards NumPy in pypy</a><br/ --!>
</li>
<li>
<script>
$(function() {
$("#progressbar").progressbar({
value: 65.2
});
});
</script>
<!-- Income:PyPy:Donations:Py3k / 0.95 -->
$68455 of $105000 (65.2%)
<div id="progressbar">
</div>
</li>
<li>
<span id="donate_text">This donation goes towards supporting Python 3 in PyPy.
Current status:
we have $4093 left
in the account.</br> <a href="py3donate.html">Read proposal</a></span>
</li>
<li>
<div class="sidepic">
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick"/>
<input type="hidden" name="hosted_button_id" value="XBG5EK3URC5G8"/>
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"/>
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1"/>
</form>
</div>
</li>
<li>
<div class="sidepic">
<a id="main_download" href="download.html">Download PyPy</a>
</div>
</li>
</ul>
<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/> -->
<b>Donate towards general PyPy progress</b><br/>
<!-- a href="#" onclick="numpy_donate(); return false;">Donate towards NumPy in pypy</a><br/ --!>
</li>
<li>
<!--
<span id="donate_text">This donation will go towards general PyPy progress
--!>
<span id="donate_text">PyPy cannot accept donations at the moment
</li>
<li>
<div class="sidepic">
<!--
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick" />
<input type="hidden" name="hosted_button_id" value="J268ZTLRE2BW8" />
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!" />
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1" />
</form>
--!>
</div>
</li>
<li>
<div class="sidepic">
<a id="main_download" href="download.html">Download PyPy</a>
</div>
</li>
</ul>
<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="general_donate(); return false;">Donate towards general pypy progress</a><br/>
<!-- a href="#" onclick="numpy_donate(); return false;"><b>Donate towards NumPy in pypy</b></a><br/ --!>
</li>
<li>
<script>
$(function() {
$("#progressbar").progressbar({
value: 88.7
});
});
</script>
<!-- Income:PyPy:Donations:Numpy / 0.95 -->
$53247 of $60000 (88.7%)
<div id="progressbar">
</div>
</li>
<li>
<span id="donate_text">This donation goes towards supporting NumPy in PyPy.
Current status:
we have $8029 left
in the account.</br> <a href="numpydonate.html">Read proposal</a></span>
</li>
<li>
<div class="sidepic">
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="7SMJUEAP83RFQ">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</div>
</li>
<li>
<div class="sidepic">
<a id="main_download" href="download.html">Download PyPy</a>
</div>
</li>
</ul>
<ul>
<li>
<a href="#" onclick="stm_donate(); return false;"><b>Donate towards STM in pypy</b></a><br/>
<a href="#" onclick="py3k_donate(); return false;">Donate towards py3k in pypy</a><br/>
<a href="#" onclick="general_donate(); return false;">Donate towards general pypy progress</a><br/>
<!-- a href="#" onclick="numpy_donate(); return false;">Donate towards NumPy in pypy</a><br/ --!>
</li>
<li>
<script>
$(function() {
$("#progressbar").progressbar({
value: 74.0
});
});
</script>
2nd call:
<!-- Income:PyPy:Donations:Transactional Memory from April 8, 2014,
divided by 0.9 -->
$59201 of $80000 (74.0%)
<div id="progressbar">
</div>
</li>
<li>
<span id="donate_text">At this time, donations towards supporting the
Transactional Memory in PyPy are closed. <a href="tmdonate2.html">Read
more...</a></span>
<!--
Current status:
we have $47383 left
in the account.</br> <a href="tmdonate2.html">Read proposal (2nd call)</a></span>
</li>
<li>
<li>
<div class="sidepic">
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="XU6QHLK6CZX6E">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</div>
</li>
<li>
<div class="sidepic">
<a id="main_download" href="download.html">Download PyPy</a>
</div-->
</li>
</ul>
This diff is collapsed.
<!DOCTYPE html>
<html>
<head>
<title>PyPy - What is PyPy?</title>
<meta http-equiv="content-language" content="en" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="PyPy Team" />
<meta name="description" content="PyPy" />
<meta name="copyright" content="MIT" />
<meta name="document-rating" content="general" />
<link rel="stylesheet" type="text/css" media="screen" title="default" href="css/site.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed for PyPy" href="http://feeds.feedburner.com/PyPyStatusBlog" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" />
<script type="text/javascript" src="https://use.typekit.com/hdt8sni.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/script2.js?bust=1"></script>
</head>
<body>
<script type="text/javascript">
var _gaq = [['_setAccount', 'UA-7778406-3'], ['_trackPageview']];
if (document.location.protocol !== 'file:') {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
}
</script>
<div id="body-outer"><div id="body-inner"><div id="body" class="clearfix">
<div id="header">
<div id="menu-follow">
<div><a href="https://bitbucket.org/pypy/pypy"><img src="https://www.selenic.com/hg-logo/logo-droplets-25.png" width="14px" height="14px" /></a></div>
<div><a href="http://feeds.feedburner.com/PyPyStatusBlog" title="Subscribe to the RSS Feed"><img src="https://feedburner.google.com/fb/lib/images/icons/feed-icon-12x12-orange.gif" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div>
</div>
<div id="logo"><a href="http://pypy.org"><img src="image/pypy-logo.png" alt="PyPy" height="110px" /></a></div>
<hr class="clear-left" />
<div id="menu-sub">
<a href="index.html">Home</a>
<span class="menu-sub-sep"> | </span>
<a href="features.html">What is PyPy?</a>
<span class="menu-sub-sep"> | </span>
<a href="download.html">Download</a>
<span class="menu-sub-sep"> | </span>
<a href="compat.html">Compatibility</a>
<span class="menu-sub-sep"> | </span>
<a href="performance.html">Performance</a>
<span class="menu-sub-sep"> | </span>
<a href="http://doc.pypy.org">Dev Documentation</a>
<span class="menu-sub-sep"> | </span>
<a href="http://morepypy.blogspot.com">Blog</a>
<span class="menu-sub-sep"> | </span>
<a href="people.html">People</a>
<span class="menu-sub-sep"> | </span>
<a href="contact.html">Contact</a>
<br />
</div>
<hr class="clear" />
</div>
<div id="content">
<div>
<div id="main">
<h1 class="title">What is PyPy?</h1>
<p>PyPy is a replacement for CPython. It is built using the RPython
language that was co-developed with it. The main reason to use it
instead of CPython is speed: it runs generally faster (see next section).</p>
<p><strong>PyPy</strong> implements <strong>Python 2.7.13 and 3.6.9</strong>.
It supports all of the core language, passing the Python 2.7 test suite
and most of the 3.6 test suite (with minor modifications) It supports most of
the commonly used Python standard library modules. For known differences with
CPython, see our <a class="reference external" href="compat.html">compatibility</a> page.</p>
<p>The following CPU architectures are supported and maintained:</p>
<ul class="simple">
<li><a class="reference external" href="http://en.wikipedia.org/wiki/IA-32">x86 (IA-32)</a> and <a class="reference external" href="http://en.wikipedia.org/wiki/X86_64">x86_64</a></li>
<li><a class="reference external" href="http://en.wikipedia.org/wiki/ARM">ARM</a> platforms (ARMv6 or ARMv7, with VFPv3)</li>
<li><a class="reference external" href="http://en.wikipedia.org/wiki/AArch64">AArch64</a></li>
<li><a class="reference external" href="https://de.wikipedia.org/wiki/PowerPC">PowerPC</a> 64bit both little and big endian</li>
<li><a class="reference external" href="https://de.wikipedia.org/wiki/System/390">System Z (s390x)</a></li>
</ul>
<p>PyPy's x86 version runs on several operating systems, such as Linux
(32/64 bits), Mac OS X (64 bits), Windows (32 bits), OpenBSD, FreeBSD.
All non-x86 versions are only supported on Linux.</p>
<p>If you are interested in helping to move forward, see our <a class="reference external" href="howtohelp.html">howtohelp</a> page.</p>
<div class="section" id="the-main-features-of-pypy">
<h1>The main features of PyPy:</h1>
</div>
<div class="section" id="speed">
<h1>Speed</h1>
<p>Our <a class="reference external" href="download.html#with-a-jit-compiler">main executable</a> comes with a Just-in-Time compiler. It is
<a class="reference external" href="http://speed.pypy.org/">really fast</a> in running most benchmarks &ndash; including very large and
complicated Python applications, not just 10-liners.</p>
<p>There are two cases that you should be aware where PyPy will <em>not</em> be
able to speed up your code:</p>
<ul class="simple">
<li>Short-running processes: if it doesn't run for at least a few seconds,
then the JIT compiler won't have enough time to warm up.</li>
<li>If all the time is spent in run-time libraries (i.e. in C functions),
and not actually running Python code, the JIT compiler will not help.</li>
</ul>
<p>So the case where PyPy works best is when executing long-running
programs where a significant fraction of the time is spent executing
Python code. This is the case covered by the majority of <a class="reference external" href="http://speed.pypy.org/">our
benchmarks</a>, but not all of them &ndash; the goal of PyPy is to get speed
but still support (ideally) any Python program.</p>
</div>
<div class="section" id="memory-usage">
<h1>Memory usage</h1>
<p>Memory-hungry Python programs (several hundreds of MBs or more) might
end up taking less space than they do in CPython. It is not always
the case, though, as it depends on a lot of details. Also note that
the baseline is higher than CPython's.</p>
</div>
<div class="section" id="stackless">
<h1>Stackless</h1>
<p>Support for <a class="reference external" href="http://www.stackless.com/">Stackless</a> and greenlets are now integrated in the normal
PyPy. More detailed information is available <a class="reference external" href="http://doc.pypy.org/en/latest/stackless.html">here</a>.</p>
</div>
<div class="section" id="other-features">
<h1>Other features</h1>
<p>PyPy has many secondary features and semi-independent
projects. We will mention here:</p>
<ul>
<li><p class="first"><strong>Other languages:</strong> we also implemented other languages that makes
use of our RPython toolchain: <a class="reference external" href="https://bitbucket.org/cfbolz/pyrolog/">Prolog</a> (almost complete), as
well as <a class="reference external" href="https://bitbucket.org/pypy/lang-smalltalk/">Smalltalk</a>, <a class="reference external" href="https://bitbucket.org/pypy/lang-js/">JavaScript</a>, <a class="reference external" href="https://bitbucket.org/pypy/lang-io/">Io</a>, <a class="reference external" href="https://bitbucket.org/pypy/lang-scheme/">Scheme</a> and <a class="reference external" href="https://bitbucket.org/pypy/lang-gameboy/">Gameboy</a>.</p>
<p>There is also a Ruby implementation called <a class="reference external" href="http://topazruby.com/">Topaz</a> and a PHP implementation
called <a class="reference external" href="http://www.hippyvm.com/">HippyVM</a>.</p>
</li>
</ul>
</div>
<div class="section" id="sandboxing">
<h1>Sandboxing</h1>
<p>PyPy's <em>sandboxing</em> is a working prototype for the idea of running untrusted
user programs. Unlike other sandboxing approaches for Python, PyPy's does not
try to limit language features considered &ldquo;unsafe&rdquo;. Instead we replace all
calls to external libraries (C or platform) with a stub that communicates
with an external process handling the policy.</p>
<table class="docutils">
<colgroup>
<col width="100%" />
</colgroup>
<tbody valign="top">
<tr><td><strong>Please be aware that it is a prototype only.</strong> <em>It needs work to become
more complete, and you are welcome to help. In particular, almost none
of the extension modules work (not even</em> <tt class="docutils literal">time</tt> <em>), and</em> <tt class="docutils literal">pypy_interact</tt>
<em>is merely a demo. Also, a more complete system would include a way
to do the same as</em> <tt class="docutils literal">pypy_interact</tt> <em>from other languages than Python,
to embed a sandboxed interpreter inside programs written in other
languages.</em></td>
</tr>
</tbody>
</table>
<p>To run the sandboxed process, you need to get the full sources and
build <tt class="docutils literal"><span class="pre">pypy-sandbox</span></tt> from it (see <a class="reference external" href="download.html#building-from-source">Building from source</a>). These
instructions give you a <tt class="docutils literal"><span class="pre">pypy-c</span></tt> that you should rename to
<tt class="docutils literal"><span class="pre">pypy-sandbox</span></tt> to avoid future confusion. Then run:</p>
<pre class="literal-block">
cd pypy/sandbox
pypy_interact.py path/to/pypy-sandbox
# don't confuse it with pypy/goal/pyinteractive.py!
</pre>
<p>You get a fully sandboxed interpreter, in its own filesystem hierarchy
(try <tt class="docutils literal"><span class="pre">os.listdir('/')</span></tt>). For example, you would run an untrusted
script as follows:</p>
<pre class="literal-block">
mkdir virtualtmp
cp untrusted.py virtualtmp/
pypy_interact.py --tmp=virtualtmp pypy-sandbox /tmp/untrusted.py
</pre>
<p>Note that the path <tt class="docutils literal">/tmp/untrusted.py</tt> is a path inside the sandboxed
filesystem. You don't have to put <tt class="docutils literal">untrusted.py</tt> in the real <tt class="docutils literal">/tmp</tt>
directory at all.</p>
<p>To read more about its features, try <tt class="docutils literal">pypy_interact.py <span class="pre">--help</span></tt> or go to
<a class="reference external" href="http://pypy.readthedocs.org/en/latest/sandbox.html">our documentation site</a>.</p>
</div>
</div>
<div id="sidebar">
</div>
</div>
</div>
</div></div></div>
</body>
</html>
\ No newline at end of file
files/favicon2.png

9.5 KiB

<!DOCTYPE html>
<html>
<head>
<title>PyPy - How to help?</title>
<meta http-equiv="content-language" content="en" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="PyPy Team" />
<meta name="description" content="PyPy" />
<meta name="copyright" content="MIT" />
<meta name="document-rating" content="general" />
<link rel="stylesheet" type="text/css" media="screen" title="default" href="css/site.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed for PyPy" href="http://feeds.feedburner.com/PyPyStatusBlog" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" />
<script type="text/javascript" src="https://use.typekit.com/hdt8sni.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/script2.js?bust=1"></script>
</head>
<body>
<script type="text/javascript">
var _gaq = [['_setAccount', 'UA-7778406-3'], ['_trackPageview']];
if (document.location.protocol !== 'file:') {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
}
</script>
<div id="body-outer"><div id="body-inner"><div id="body" class="clearfix">
<div id="header">
<div id="menu-follow">
<div><a href="https://bitbucket.org/pypy/pypy"><img src="https://www.selenic.com/hg-logo/logo-droplets-25.png" width="14px" height="14px" /></a></div>
<div><a href="http://feeds.feedburner.com/PyPyStatusBlog" title="Subscribe to the RSS Feed"><img src="https://feedburner.google.com/fb/lib/images/icons/feed-icon-12x12-orange.gif" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div>
</div>
<div id="logo"><a href="http://pypy.org"><img src="image/pypy-logo.png" alt="PyPy" height="110px" /></a></div>
<hr class="clear-left" />
<div id="menu-sub">
<a href="index.html">Home</a>
<span class="menu-sub-sep"> | </span>
<a href="features.html">What is PyPy?</a>
<span class="menu-sub-sep"> | </span>
<a href="download.html">Download</a>
<span class="menu-sub-sep"> | </span>
<a href="compat.html">Compatibility</a>
<span class="menu-sub-sep"> | </span>
<a href="performance.html">Performance</a>
<span class="menu-sub-sep"> | </span>
<a href="http://doc.pypy.org">Dev Documentation</a>
<span class="menu-sub-sep"> | </span>
<a href="http://morepypy.blogspot.com">Blog</a>
<span class="menu-sub-sep"> | </span>
<a href="people.html">People</a>
<span class="menu-sub-sep"> | </span>
<a href="contact.html">Contact</a>
<br />
</div>
<hr class="clear" />
</div>
<div id="content">
<div>
<div id="main">
<h1 class="title">How to help?</h1>
<p>Here are some ideas to help PyPy development:</p>
<ul class="simple">
<li>use pypy for your projects and provide detailed <a class="reference external" href="contact.html">feedback</a></li>
<li>talk to us about how to support Python 3.x</li>
<li>write blog posts or tweets about your experiences</li>
<li>help porting to new platforms</li>
<li><a class="reference external" href="contact.html">contact</a> us and get involved</li>
<li><a class="reference external" href="http://morepypy.blogspot.com/2010/11/speeding-up-pypy-by-donations.html">donate</a> some money to enable others to help</li>
</ul>
</div>
<div id="sidebar">
</div>
</div>
</div>
</div></div></div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>PyPy - Welcome to PyPy</title>
<meta http-equiv="content-language" content="en" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="PyPy Team" />
<meta name="description" content="PyPy" />
<meta name="copyright" content="MIT" />
<meta name="document-rating" content="general" />
<link rel="stylesheet" type="text/css" media="screen" title="default" href="css/site.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed for PyPy" href="http://feeds.feedburner.com/PyPyStatusBlog" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" />
<script type="text/javascript" src="https://use.typekit.com/hdt8sni.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/script2.js?bust=1"></script>
</head>
<body>
<script type="text/javascript">
var _gaq = [['_setAccount', 'UA-7778406-3'], ['_trackPageview']];
if (document.location.protocol !== 'file:') {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
}
</script>
<div id="body-outer"><div id="body-inner"><div id="body" class="clearfix">
<div id="header">
<div id="menu-follow">
<div><a href="https://bitbucket.org/pypy/pypy"><img src="https://www.selenic.com/hg-logo/logo-droplets-25.png" width="14px" height="14px" /></a></div>
<div><a href="http://feeds.feedburner.com/PyPyStatusBlog" title="Subscribe to the RSS Feed"><img src="https://feedburner.google.com/fb/lib/images/icons/feed-icon-12x12-orange.gif" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div>
</div>
<div id="logo"><a href="http://pypy.org"><img src="image/pypy-logo.png" alt="PyPy" height="110px" /></a></div>
<hr class="clear-left" />
<div id="menu-sub">
<a href="index.html">Home</a>
<span class="menu-sub-sep"> | </span>
<a href="features.html">What is PyPy?</a>
<span class="menu-sub-sep"> | </span>
<a href="download.html">Download</a>
<span class="menu-sub-sep"> | </span>
<a href="compat.html">Compatibility</a>
<span class="menu-sub-sep"> | </span>
<a href="performance.html">Performance</a>
<span class="menu-sub-sep"> | </span>
<a href="http://doc.pypy.org">Dev Documentation</a>
<span class="menu-sub-sep"> | </span>
<a href="http://morepypy.blogspot.com">Blog</a>
<span class="menu-sub-sep"> | </span>
<a href="people.html">People</a>
<span class="menu-sub-sep"> | </span>
<a href="contact.html">Contact</a>
<br />
</div>
<hr class="clear" />
</div>
<div id="content">
<div>
<div id="main">
<h1 class="title">Welcome to PyPy</h1>
<p>PyPy is a <a class="reference external" href="http://speed.pypy.org/">fast</a>, <a class="reference external" href="compat.html">compliant</a> alternative implementation of the <a class="reference external" href="http://python.org/">Python</a>
language (2.7.13 and 3.6.9). It has several advantages and distinct features:</p>
<blockquote>
<ul>
<li><p class="first"><strong>Speed:</strong> thanks to its Just-in-Time compiler, Python programs
often run <a class="reference external" href="http://speed.pypy.org/">faster</a> on PyPy. <a class="reference external" href="http://en.wikipedia.org/wiki/Just-in-time_compilation">(What is a JIT compiler?)</a></p>
<p>&ldquo;If you want your code to run faster, you should probably just use PyPy.&rdquo;
&mdash; Guido van Rossum (creator of Python)</p>
</li>
<li><p class="first"><strong>Memory usage:</strong> memory-hungry Python programs (several hundreds of
MBs or more) might end up taking <a class="reference external" href="http://morepypy.blogspot.com/2009/10/gc-improvements.html">less space</a> than they do in CPython.</p>
</li>
<li><p class="first"><strong>Compatibility:</strong> PyPy is <a class="reference external" href="compat.html">highly compatible</a> with existing python code.
It supports <a class="reference external" href="https://cffi.readthedocs.org">cffi</a> and can run popular python libraries like <a class="reference external" href="https://twistedmatrix.com/">twisted</a>
and <a class="reference external" href="https://www.djangoproject.com/">django</a>.</p>
</li>
<li><p class="first"><strong>Stackless:</strong> PyPy comes by default with support for <a class="reference external" href="features.html#stackless">stackless mode</a>,
providing micro-threads for massive concurrency.</p>
</li>
<li><p class="first">As well as other <a class="reference external" href="features.html">features</a>.</p>
</li>
</ul>
</blockquote>
<p class="download"><a class="reference external" href="download.html">Download and try out PyPy</a></p>
<p>Want to know more? A good place to start is our detailed <a class="reference external" href="http://speed.pypy.org/">speed</a> and
<a class="reference external" href="compat.html">compatibility</a> reports!</p>
</div>
<div id="sidebar">
</div>
</div>
</div>
</div></div></div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>PyPy - Call for donations - PyPy to support Numpy!</title>
<meta http-equiv="content-language" content="en" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="PyPy Team" />
<meta name="description" content="PyPy" />
<meta name="copyright" content="MIT" />
<meta name="document-rating" content="general" />
<link rel="stylesheet" type="text/css" media="screen" title="default" href="css/site.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed for PyPy" href="http://feeds.feedburner.com/PyPyStatusBlog" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" />
<script type="text/javascript" src="https://use.typekit.com/hdt8sni.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/script2.js?bust=1"></script>
</head>
<body>
<script type="text/javascript">
var _gaq = [['_setAccount', 'UA-7778406-3'], ['_trackPageview']];
if (document.location.protocol !== 'file:') {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
}
</script>
<div id="body-outer"><div id="body-inner"><div id="body" class="clearfix">
<div id="header">
<div id="menu-follow">
<div><a href="https://bitbucket.org/pypy/pypy"><img src="https://www.selenic.com/hg-logo/logo-droplets-25.png" width="14px" height="14px" /></a></div>
<div><a href="http://feeds.feedburner.com/PyPyStatusBlog" title="Subscribe to the RSS Feed"><img src="https://feedburner.google.com/fb/lib/images/icons/feed-icon-12x12-orange.gif" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div>
</div>
<div id="logo"><a href="http://pypy.org"><img src="image/pypy-logo.png" alt="PyPy" height="110px" /></a></div>
<hr class="clear-left" />
<div id="menu-sub">
<a href="index.html">Home</a>
<span class="menu-sub-sep"> | </span>
<a href="features.html">What is PyPy?</a>
<span class="menu-sub-sep"> | </span>
<a href="download.html">Download</a>
<span class="menu-sub-sep"> | </span>
<a href="compat.html">Compatibility</a>
<span class="menu-sub-sep"> | </span>
<a href="performance.html">Performance</a>
<span class="menu-sub-sep"> | </span>
<a href="http://doc.pypy.org">Dev Documentation</a>
<span class="menu-sub-sep"> | </span>
<a href="http://morepypy.blogspot.com">Blog</a>
<span class="menu-sub-sep"> | </span>
<a href="people.html">People</a>
<span class="menu-sub-sep"> | </span>
<a href="contact.html">Contact</a>
<br />
</div>
<hr class="clear" />
</div>
<div id="content">
<div>
<div id="main">
<h1 class="title">Call for donations - PyPy to support Numpy!</h1>
<p>UPDATE (Febuary 2016):</p>
<blockquote>
<em>We have closed this campaign. We have achieved most of the goals
of the orignal work plan while raising most of the funds. Work
will continue to make Numpy and the rest of the numeric stack more
usable on PyPy.</em></blockquote>
<p>UPDATE (May 2014):</p>
<blockquote>
<em>Thanks to our donors, we have raised 80% of
the total so far. Work on this topic has been happening, and
continues to happen, within the budget &ndash; even if not within the
timeline described below. We have simply not found enough time to
work on it as much as we wanted, and thus did not consume the money as
quickly as predicted. The ratio &ldquo;progress / $ used&rdquo; so far
corresponds roughly to what we expected. The document below is the
original call for proposal, and we still accept donations for this
topic. See the</em> <a class="reference external" href="http://morepypy.blogspot.com/search/label/numpy">latest status reports</a> <em>on our blog for updates.
There is also an automatically generated</em> <a class="reference external" href="http://buildbot.pypy.org/numpy-status/latest.html">coverage dashboard</a> <em>showing
what parts of NumPy are already usable.</em></blockquote>
<p>This is a proposal to provide a fully compatible working <a class="reference external" href="http://numpy.scipy.org/">NumPy</a> implementation
for PyPy. This has long be en a very commonly <a class="reference external" href="http://morepypy.blogspot.com/2011/06/report-back-from-our-survey.html">requested feature</a> for PyPy
as well as a worthy goal given that PyPy performs extremely well on numeric
workloads.</p>
<p>We already had some success providing a very basic <a class="reference external" href="http://morepypy.blogspot.com/2011/05/numpy-in-pypy-status-and-roadmap.html">NumPy implementation</a>,
however we believe that raising funds can significantly speed up its
development, by paying people to work full time on it.</p>
<p>Below you'll find the <a class="reference internal" href="#work-plan">work plan</a> and the associated
fundraising targets we need to make things happen. Once we reach the
necessary target for each stage, we will start contracting
developers. Contracts and money are managed by the non-profit
<a class="reference external" href="http://sfconservancy.org/">Software Freedom Conservancy</a> of which the PyPy project is a member.
The current elected representatives are Carl Friedrich Bolz, Holger
Krekel and Jacob Hallen and they will – in close collaboration with
Conservancy and the core developers – select the best developers for
implementing NumPy among well known PyPy contributors.</p>
<p>Should we not receive enough donations to complete all stages by 1st March 2012
at the latest, we will try our best to make PyPy support NumPy anyway. We
however reserve the right to shift any unused funds to other PyPy activities
when that date is reached. Of course, since the Conservancy is a
501(c)(3) charitable organization incorporated in NY, USA, all funds will,
regardless of their use, be spent in a way that benefits the general
public, the advancement of Open Source and Free Software,
and in particular the PyPy community and the PyPy codebase.</p>
<p><strong>Note</strong> For donations higher than $1,000, we can arrange for an invoice
and a different payment method to avoid the high Paypal fees. Please
contact pypy at sfconservancy.org if you want to know details on how
to donate via other means.</p>
<div class="section" id="what-is-numpy">
<h1>What is NumPy?</h1>
<p><a class="reference external" href="http://numpy.scipy.org/">NumPy</a> is a framework for doing numerical calculations in Python. It has
become the de-facto standard for doing any kinds of computations that involve
n-dimensional arrays. Please consult the NumPy website for more details.</p>
</div>
<div class="section" id="why-does-numpy-on-pypy-make-sense">
<h1>Why does NumPy on PyPy make sense?</h1>
<p>NumPy on PyPy makes sense for a couple of reasons: Firstly, it is by
far the most requested feature from PyPy. Secondly, PyPy <a class="reference external" href="http://morepypy.blogspot.com/2011/07/realtime-image-processing-in-python.html">performs
well</a> on numerical loads already. Therefore bringing NumPy into the
equation is a reasonable next step - as it's a very convenient and popular tool
for doing this kind of work. The resulting implementation should move
Python in scientific world from being a merely &ldquo;glue&rdquo; language into
being the main implementation language for a lot of people in
the scientific/numeric worlds. This will benefit current users of NumPy as
well as people who so far have to cope with lower level languages like C
or Fortran for speed purposes.</p>
</div>
<div class="section" id="speed">
<h1>Speed</h1>
<p>The current implementation of NumPy on PyPy is reasonably fast - it ranges
from roughly the same speed to 2-5x faster for stacked large array operations
to 100-300x for accessing NumPy array elements one by one. The exact speed
depends very much how NumPy is used, but the target would be to be within an
order of magnitude from handwritten C.
To achieve this, we would
need to teach our JIT backends how to use modern vector instructions, like SSE
or AVX. Hence, we split the proposal into two parts, first part covers compatibility
with a reasonable approach to keeping current speed achievements, second part
is about teaching the JIT how to vectorize certain operations, which should bring
PyPy's NumPy as a very competitive tool compared to other available
solutions for numerical computations, like matlab or C++ array libraries.</p>
<div class="section" id="id1">
<span id="work-plan"></span><h2>Work plan</h2>
</div>
</div>
<div class="section" id="about-estimates-and-costs">
<h1>About estimates and costs</h1>
<p>For each step, we estimated the time that it would take to complete for an
experienced developer who is already familiar with the PyPy codebase. From
this number, the money is calculated considering an hourly rate of $60, and a
5% general donation which goes to the <a class="reference external" href="http://sfconservancy.org/">Software Freedom Conservancy</a> itself, the non-profit
organization of which the PyPy project is a member and which manages all the
issues related to donations, payments, and tax-exempt status.</p>
<p>We split the proposal into two parts - we plan to implement them in the same
order, starting by the time we raise the corresponding funding targets:</p>
<ul>
<li><p class="first"><strong>Compatibility</strong>:</p>
<p>This part covers the core NumPy Python API. We'll implement all NumPy APIs
that are officially documented and we'll pass all of NumPy's tests that
cover documented APIs and are not implementation details.
Specifically, we don't plan to:</p>
<ul class="simple">
<li>implement NumPy's C API</li>
<li>implement other scientific libraries, like SciPy, matplotlib or biopython</li>
</ul>
<p>Estimated costs: USD$30,000. Estimated duration: 3 months.</p>
</li>
<li><p class="first"><strong>Speed</strong>:</p>
<p>This part will cover significant speed improvements in the JIT that would
make numeric computations faster. This includes, but is not necesarilly
limited to:</p>
<ul class="simple">
<li>write a set of benchmarks covering various use cases</li>
<li>teaching the JIT backend (or multiple backends) how to deal with vector
operations, like SSE</li>
<li>experiments with automatic parallelization using multiple threads, akin
to numexpr</li>
<li>improving the JIT register allocator that will make a difference, especially
for tight loops</li>
</ul>
<p>As with all speed improvements, it's relatively hard to predict exactly
how it'll cope, however we expect the results to be within an order
of magnitude of handwritten C equivalent.</p>
<p>Estimated costs: USD$30,000. Estimated duration: 3 months.</p>
</li>
</ul>
<div class="section" id="benefits-of-this-work-to-the-python-community-and-the-general-public">
<h2>Benefits of This Work to the Python Community and the General Public</h2>
<p>Python has become one of the most popular dynamic programming languages in
the world. Web developers, educators, and scientific programmers alike
all value Python because Python code is often more readable and because
Python often increases programmer productivity.</p>
<p>Traditionally, languages like Python ran more slowly than static, compiled
languages; Python developers chose to sacrifice execution speed for ease
of programming. The PyPy project created a substantially improved Python
language implementation, including a fast Just-in-time (JIT) compiler.
The increased execution speed that PyPy provides has attracted many users,
who now find their Python code runs up to four times faster under PyPy
than under the reference implementation written in C.</p>
<p>Meanwhile, adoption of Python is already underway for those researchers
and developers who work specifically on computing that requires fast
numeric operations. Numpy support in PyPy will allow for Python's use by
those developers and researchers who want the ease of programming that
Python provides, the speed of PyPy, <em>and</em> the speedups for numerical work
that Numpy can provide.</p>
<p>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.</p>
<p>NumPy support for PyPy will be licensed similarly, and therefore NumPy
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 works itself will be generally available
to everyone.</p>
</div>
</div>
</div>
<div id="sidebar">
</div>
</div>
</div>
</div></div></div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>PyPy - People of PyPy</title>
<meta http-equiv="content-language" content="en" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="PyPy Team" />
<meta name="description" content="PyPy" />
<meta name="copyright" content="MIT" />
<meta name="document-rating" content="general" />
<link rel="stylesheet" type="text/css" media="screen" title="default" href="css/site.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed for PyPy" href="http://feeds.feedburner.com/PyPyStatusBlog" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" />
<script type="text/javascript" src="https://use.typekit.com/hdt8sni.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="js/script2.js?bust=1"></script>
</head>
<body>
<script type="text/javascript">
var _gaq = [['_setAccount', 'UA-7778406-3'], ['_trackPageview']];
if (document.location.protocol !== 'file:') {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
}
</script>
<div id="body-outer"><div id="body-inner"><div id="body" class="clearfix">
<div id="header">
<div id="menu-follow">
<div><a href="https://bitbucket.org/pypy/pypy"><img src="https://www.selenic.com/hg-logo/logo-droplets-25.png" width="14px" height="14px" /></a></div>
<div><a href="http://feeds.feedburner.com/PyPyStatusBlog" title="Subscribe to the RSS Feed"><img src="https://feedburner.google.com/fb/lib/images/icons/feed-icon-12x12-orange.gif" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div>
</div>
<div id="logo"><a href="http://pypy.org"><img src="image/pypy-logo.png" alt="PyPy" height="110px" /></a></div>
<hr class="clear-left" />
<div id="menu-sub">
<a href="index.html">Home</a>
<span class="menu-sub-sep"> | </span>
<a href="features.html">What is PyPy?</a>
<span class="menu-sub-sep"> | </span>
<a href="download.html">Download</a>
<span class="menu-sub-sep"> | </span>
<a href="compat.html">Compatibility</a>
<span class="menu-sub-sep"> | </span>
<a href="performance.html">Performance</a>
<span class="menu-sub-sep"> | </span>
<a href="http://doc.pypy.org">Dev Documentation</a>
<span class="menu-sub-sep"> | </span>
<a href="http://morepypy.blogspot.com">Blog</a>
<span class="menu-sub-sep"> | </span>
<a href="people.html">People</a>
<span class="menu-sub-sep"> | </span>
<a href="contact.html">Contact</a>
<br />
</div>
<hr class="clear" />
</div>
<div id="content">
<div>
<div id="main">
<h1 class="title">People of PyPy</h1>
<div class="section" id="armin-rigo">
<h1>Armin Rigo</h1>
<img alt="image/people/arigo.png" src="image/people/arigo.png" />
<p>Armin Rigo is a former researcher at the Heinrich-Heine Universitat
Düsseldorf (Germany). He studied Mathematics at the University
of Lausanne (Switzerland), obtained his Ph.D. in Logic and Set
Theory at the Free University of Brussels (Belgium) in 2002, and
worked at the University of Southampton (UK) until 2005. He is
the author of Psyco, the first just-in-time compiler for Python.
He is one of the founders and lead developers of the PyPy project
which began in 2003. He has taken part in all areas, from the Python
language definition to the RPython translation framework,
including the garbage collector and the tracing just-in-time
compiler.</p>
</div>
<div class="section" id="maciej-fijalkowski">
<h1>Maciej Fijałkowski</h1>
<img alt="image/people/fijal_thumb.png" src="image/people/fijal_thumb.png" />
<p>Maciej is a freelancer working mostly on PyPy for the past several years.
He's a core developer since 2006, working on all kinds of parts in
the entire codebase including JIT, GC and assembler backends.
Maciej has been going to many conferences, advertising PyPy to a broader
audience for the past several years, including a keynote at Pycon 2010.
He's also the main maintainer of
<a class="reference external" href="https://bitbucket.org/pypy/jitviewer">jitviewer</a>, a tool for analyzing performance of your python programs under
PyPy.</p>
</div>
<div class="section" id="carl-friedrich-bolz">
<h1>Carl Friedrich Bolz</h1>
<img alt="image/people/cfbolz.jpg" src="image/people/cfbolz.jpg" />
<p>Carl Friedrich is a core developer since 2005, currently doing his PhD at the
Heinrich-Heine Universität Düsseldorf (Germany). He has worked on most aspects
of PyPy, from the core interpreter to the GC to the JIT. He has published
several papers about the inner workings of PyPy, presenting them at various
scientific conferences. Carl Friedrich is also interested in other dynamic
language implementation and was the original author of the Prolog
implementation.</p>
<p>Carl Friedrich likes science fiction novels and sometimes plays the bassoon.</p>
</div>
<div class="section" id="antonio-cuni">
<h1>Antonio Cuni</h1>
<img alt="image/people/antocuni.png" src="image/people/antocuni.png" />
<p>Antonio Cuni loves skiing, mountains and programming languages. He studied
Computer Science at the University of Genova (Italy), and then at the same
university he obtained his Ph.D. in Computer Science in 2010, with a
dissertation about the PyPy CLI JIT backend. He has been a core PyPy
developer since 2006, working in various areas including the &ldquo;object oriented
backends&rdquo; for the CLI and JVM, the RPython translation framework, the Python
interpreter and the JIT compiler generator. Apart from PyPy, he is the author of
other popular tools such as <tt class="docutils literal">pdb++</tt>.</p>
</div>
<div class="section" id="benjamin-peterson">
<h1>Benjamin Peterson</h1>
<p>Both a PyPy and CPython core developer, Benjamin knows way too much about the
nooks and cranies of the Python language. He is driven by a fascination with
interpreters and compilers of all shapes and sizes. Around the PyPy project, he
tries to be generally useful and has taken on major projects including rewriting
PyPy's Python compiler and porting PyPy to Python 2.7.</p>
</div>
<div class="section" id="alex-gaynor">
<h1>Alex Gaynor</h1>
<img alt="image/people/alex.jpg" src="image/people/alex.jpg" />
<p>Alex is software engineer living in Washington, DC. He's been a PyPy developer
since 2010, and has worked on many parts of the codebase, including the JIT
compiler's optimizers, the RPython translation toolchain, and the Python
interpreter. In addition to his work on PyPy, Alex is also the creator of
Topaz, a Ruby VM built on RPython and a core developer of Django (a Python web
framework) and CPython, as well as a retired member of the board of directors
of the Python Software Foundation.</p>
</div>
<div class="section" id="hakan-ardo">
<h1>Håkan Ardö</h1>
<img alt="image/people/hakanardo.jpg" src="image/people/hakanardo.jpg" />
<p>Håkan Ardö received his master of science degree in electrical
engineering from Lund University in 2002. He specialized in
VLSI-design and Image Processing. He worked as a software
engineer at Axis Communications 2002-2003 before doing his
PhD at the Centre for Mathematical Sciences of Lund University
2003-2009 in the Mathematical Imaging Group. His thesis work consisted
of designing image processing algorithms for traffic surveillance,
aiming for a system that automatically measures the safety of an
intersection or road segment. He is currently working part-time as a
postdoc at the Centre for Mathematical Sciences of Lund University
continuing this work and part-time as CTO with a spinoff company
Cognimatics. His contributions to PyPy started 2010 and consists of
the array module as well as work on the JIT compiler's trace optimizers.</p>
</div>
<div class="section" id="holger-krekel">
<h1>Holger Krekel</h1>
<img alt="image/people/holger1.jpg" src="image/people/holger1.jpg" />
<p>Holger Krekel is a founder of the PyPy project and has participated in
PyPy core developement for several years as well as maintained much of
its infrastructure. He also is the author of the popular <a class="reference external" href="http://pytest.org">py.test</a> and
<a class="reference external" href="http://codespeak.net/tox">tox</a> testing tools as well as <a class="reference external" href="http://codespeak.net/execnet">execnet</a>, a library for easily deploying
different interacting Python interpreters side by side. He helped
manage multiple PyPy funding contracts through his company merlinux and is a
PyPy representative within the Software Freedom Conservancy (SFC). He
holds a summa cum laude degree in computer science with a thesis about
artificial intelligence applied to the game of Go. As of 2011 he is on
another sabbatical-ish leave, caring for his newborn son, travelling
and pondering what comes next. Other than that he continues to care
for testing and some PyPy co-ordination bits behind the scene.</p>
</div>
<div class="section" id="samuele-pedroni">
<h1>Samuele Pedroni</h1>
<p>Samuele Pedroni got involved with PyPy almost at its inception in the
spring of 2003. One of the design contributors to PyPy, his help has
ranged from infrastructure and processes, through building out
RPython&#8230; optimizing the Python interpreter, to compressing resume
data in the last incarnation of the JIT compiler. Tempted away into the
application side of the software equation, these days he contributes
some words and wisdom to PyPy's paper writing.</p>
</div>
<div class="section" id="many-more-people">
<h1>Many more people</h1>
<p>PyPy is and has always been an effort of many volunteers. Consult the <a class="reference external" href="https://bitbucket.org/pypy/pypy/src/tip/LICENSE">LICENSE</a>
file for details.</p>
</div>
</div>
<div id="sidebar">
</div>
</div>
</div>
</div></div></div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
public/favicon2.png

9.5 KiB

This diff is collapsed.
<html>
<body>
<h1>PyPy Issue tracker</h1>
<p>The issue tracker for PyPy moved here:
<a href="https://bitbucket.org/pypy/pypy/issues?status=new&status=open">https://bitbucket.org/pypy/pypy/issues</a></p>
<p>You should be redirected automatically.</p>
<script type="text/javascript">
go_to = "https://bitbucket.org/pypy/pypy/issues?status=new&status=open";
re = /[/]issue([0123456789]+)/g;
if (tokens = re.exec(document.location.href)) {
num = tokens[1];
go_to = "https://bitbucket.org/pypy/pypy/issue/" + num + "/";
}
document.location.href = go_to;
</script>
</body>
</html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment