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

165

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

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

KLee1
источник
4
Кроме того, Pypy пока не поддерживает numpy. morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html
rthiago
И поддержка numy только царапает поверхность того, что понадобится приложениям для научных вычислений, прежде чем перейти на PyPy. Вот некоторые убедительные мысли от оригинального автора numy: technicaldiscovery.blogspot.com/2011/10/…
Стюарт Берг
3
Я думаю, что эти ответы и комментарии устарели
Марлон Абейкун

Ответы:

249

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

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

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

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

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

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

Эндрю Горчестер
источник
4
Это неправда, что PyPy не подходит для запуска скриптов. Время его запуска почти такое же, как у CPython, и скорость интерпретации аналогична.
Люсьен
6
Стоит отметить, что PyPy теперь поставляется с инкрементным сборщиком мусора и, как следствие, потенциально больше подходит для игр.
porgarmingduod
63

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

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

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

Стоит также отметить, что PyPy не всегда быстрее.

Гарет Латти
источник
54

Посмотрите это видео Гвидо ван Россум . Он говорит о том же вопросе, который вы задали в 12 минут 33 секунды.

Особенности:

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

В конце концов, он сам решает ...

никто
источник
3
+1 за ссылку с прямой ссылкой на соответствующую часть видео! Также +1 для уморительно правдивого Гвидо ван Россум неформального опроса « как многие люди использует PyPy в производстве? ... нет руки? Кашляет Ну, я думаю , есть еще надежда [для CPython].»
Тревор Бойд Смит
15

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

побитовое
источник
6
Обратите внимание, что бэкэнд ARM почти готов, а бэкэнд PowerPC - WIP. Также обратите внимание, что это относится только к JIT-компилятору, а перенос JIT на новую архитектуру просто требует реализации генератора кода для относительно простого и низкоуровневого IR, не более того.
1
Начиная с 2018 года, PyPy теперь работает на большем количестве архитектур x86 (32/64 бита на Linunx, Windows, MacOS и BSD), а также на Linux, более новом оборудовании ARM (ARMv6 или ARMv7, с VFPv3), с большим и меньшим порядком байтов варианты PPC64 и s390x.
Фредерик Гроссханс
7

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

Абхишек Мишра
источник
6

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

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

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

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

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

asmeurer
источник
2
По состоянию на 2018 год я могу подтвердить, что я видел ускорения примерно на порядок при разных видах использования
Фредерик Гроссханс
1
@ FrédéricGrosshans интересно. Я должен попытаться снова сравнить его.
asmeurer