PyPy теперь умеет загружать и запускать расширения CPython'а (то есть,
.pyd
и
.so
файлы) напрямую, при помощи новой подсистемы, которая называется CPyExt. В отличие от решения, представленного в
другом блог-посте (в котором модули расширения типа numpy запускались на CPython и проксировались через TCP), новое решение больше не требует запущенного CPython. Мы пока ещё не достигли полной бинарной совместимости (как Ironclad), но, в большинстве случаев, достаточно просто перекомпилировать расширение.
Единственное требование — необходимые функции C API из CPython должны быть реализованы в PyPy. Если вы пользователь или автор модуля, и вам не хватает некоторых функций в PyPy, мы приглашаем вас их реализовать. Уже довольно много людей (включая много новых контрибьюторов) уже включились в разработку и реализовали некоторые функции для того, чтоб их любимые модули заработали. В конце поста — список имён.
Кстати о скорости. Несмотря на то, что существуют накладные расходы на запуск этих модулей, когда мы запускаем движок регулярных выражений из CPython (
_sre.so
) и проходим бенчмарк spambayes из набора бенчмарков Unladen Swallow (см
speed.pypy.org), то получаем значительное ускорение: тест стал
вдвое быстрее по сравнению с движком регулярок, встроенным в PyPy. Из
закона Амдала следует, что
_sre.so
должен работать в несколько раз быстрее, чем встроенный движок.
В данный момент идёт работа над
PIL и другими модулями. Например, поддержка distutils уже почти завершена. И если вы хотите участвовать в этом или получить больше информации о том, как использовать эту новую возможность, заходите на наш IRC-канал
#pypy
на
freenode.