[PATCH 0 of 3 V2] posixfile for Windows in pure Python

Dan Villiom Podlaski Christiansen danchr at gmail.com
Wed May 18 01:37:25 CDT 2011

On 18 May 2011, at 01:11, Adrian Buehlmann wrote:

> Looks like Mercurial on PyPy isn't yet *that* much fun then.
> I'm wondering if they have a framework/API for writing modules in C.
> This one sounds interesting:
> http://morepypy.blogspot.com/2010/04/using-cpython-extension-modules-with.html

PyPy provides two extension APIs: cpyext and ctypes. cpyext is a  
compatibility layer for the CPython API. Ironically however, their  
performance characteristics in PyPy are the opposite of what they are  
in CPython. cpyext is fairly slow, due to bridging between the  
internal representations in PyPy and what the CPython API expects.  
ctypes should be faster, and there's work ongoing which would allow  
the JIT to compile it into direct function calls.

A brief benchmarking:

PyPy, pure:         17.041s
CPython, pure:      10.385s
PyPy, optimized:    15.805s
CPython, optimized: 6.280s

(I did a single run of ‘hg verify’ on the Mercurial repository itself  
on Linux, and took the user-space time to eliminate noise.)

So, in other words: if we want to use the optimized C implementation  
on PyPy, our best bet is probably to use ctypes. The performance of  
PyPy & cpyext is unlikely to ever rival CPython. Tuning the pure  
modules would be nice, of course, but I don't know how much there is  
to gain.


Dan Villiom Podlaski Christiansen
danchr at gmail.com

More information about the Mercurial-devel mailing list