Почему PyPy не был включен в стандартный Python?

Я смотрел на PyPy и мне просто интересно, почему он не был принят в основных дистрибутивах Python. Разве такие вещи, как компиляция JIT и меньший объем памяти, не улучшат скорость всего кода Python?

короче говоря, каковы основные недостатки PyPy, которые заставляют его оставаться отдельным проектом?

6 ответов


PyPy не является вилкой CPython, поэтому он никогда не может быть объединен непосредственно в CPython.

теоретически сообщество Python могло бы универсально принять PyPy, PyPy можно было бы сделать ссылочной реализацией, а CPython можно было бы прекратить. Однако у PyPy есть свои слабости:

  • CPython легко интегрируется с модулями Python, написанными на C, что традиционно является способом, которым приложения Python обрабатывали CPU-интенсивные задачи (см., например, SciPy проект.)
  • сам шаг компиляции PyPy JIT стоит CPU - только при повторном запуске скомпилированного кода он становится быстрее в целом. Это означает, что время запуска может быть выше, и поэтому PyPy не обязательно так эффективен для запуска кода клея или тривиальных скриптов.
  • поведение PyPy и CPython не идентично во всех отношениях, особенно когда речь идет о " деталях реализации "(поведение, которое не указано языком, но по-прежнему важно на практическом уровне).
  • CPython работает на большем количестве архитектур, чем PyPy, и успешно адаптирован для работы во встроенных архитектурах способами, которые могут быть непрактичными для PyPy.
  • схема подсчета ссылок CPython для управления памятью, возможно, имеет более предсказуемое влияние на производительность, чем различные системы GC PyPy, хотя это не обязательно верно для всех стратегий "чистого GC".
  • PyPy еще не полностью поддерживает Python 3.х, хотя это активный рабочий элемент.

PyPy-отличный проект, но скорость выполнения на CPU-интенсивных задачах-это не все, и во многих приложениях это наименьшая из многих проблем. Например, Django может работать на PyPy, и это делает шаблоны быстрее, но драйверы базы данных CPython быстрее, чем PyPy; в конце концов, какая реализация более эффективна, зависит от того, где узкое место в данном приложении.

другой пример: вы думаете, что PyPy будет отлично подходит для игры, но большинство стратегий GC, таких как те, которые используются в PyPy, вызывают заметное дрожание. Для CPython большая часть игрового материала с интенсивным процессором выгружается в библиотеку PyGame, которой PyPy не может воспользоваться, поскольку PyGame в основном реализован как расширение C (хотя см.: pygame-cffi). Я все еще думаю, что он может быть отличной платформой для игр, но я никогда не видел это на самом деле.

PyPy и CPython имеют радикально разные подходы к фундаментальным вопросам дизайна и делают разные компромиссы, поэтому ни один из них не "лучше" другого в каждом случае.


во-первых, это не 100% совместимое С Python 2.х, и только предварительная поддержка для 3.x.

Это также не то, что может быть объединено - реализация Python, предоставляемая PyPy, генерируется с использованием созданной ими структуры, что очень круто, но также полностью отличается от существующей реализации CPython. Это должна быть полная замена.

есть немного очень конкретные различия между PyPy и CPython, большой, как модули поддерживаются - что, если вы хотите выйти за рамки стандартной библиотеки, является крупной сделкой.

также стоит отметить, что PyPy не является универсальным быстрее.


посмотреть это видео от Guido van Rossum. Он говорит о том же вопрос вы задали в 12 мин 33 сек.

основные характеристики:

  • отсутствие совместимости с Python 3
  • отсутствие поддержки расширения
  • не подходит в качестве кода клея
  • скорость-это еще не все

В конце концов, это ему решать...


одной из причин может быть то, что по данным PyPy site, в настоящее время он работает только на 32 - и 64-разрядной архитектуре Intel x86, в то время как CPython работает и на других платформах. Вероятно, это связано с улучшением скорости платформы в PyPy. Хотя скорость-это хорошо, люди часто хотят, чтобы языковые реализации были как можно более "независимыми от платформы".


Я рекомендую смотреть этот доклад Дэвид Бизли дополнительные выводы. Он отвечает на ваш вопрос, давая ясность о природе и тонкостях PyPy.


в дополнение ко всему, что было сказано здесь, PyPy не так тверд, как CPython с точки зрения ошибок. С SymPy, мы нашли около дюжины ошибок в PyPy за последние пару лет, как в выпущенных версиях, так и в nightlies.

с другой стороны, мы нашли только одну ошибку в CPython, и это было в предварительной версии.

плюс, не скидка отсутствия на Python 3 поддержка. Никто в основном сообществе Python даже не заботится о Python 2 больше. Они работают над следующими большими вещами в Python 3.4, который станет пятым крупным выпуском Python 3. Парни из Пипи до сих пор не поймали ни одного из них. Поэтому им нужно наверстать упущенное, прежде чем они смогут стать соперниками.

Не поймите меня неправильно. В PyPy-это круто. Но это все еще далеко не лучше, чем CPython во многих очень важных отношениях.

и, кстати, если вы используете SymPy в PyPy, вы не увидите меньшего объема памяти (или ускорения любой.) См.https://bitbucket.org/pypy/pypy/issues/1447/.