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

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

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

Ответ 1

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 имеют радикально разные подходы к фундаментальным вопросам проектирования и делают разные компромиссы, поэтому ни один из них не "лучше", чем другой в каждом случае.

Ответ 2

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

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

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

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

Ответ 3

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

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

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

В конце концов, он тот, кто решил...

Ответ 4

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

Ответ 5

Я рекомендую посмотреть эту заметку David Beazley для получения дополнительной информации. Он отвечает на ваш вопрос, давая ясность в отношении природы и тонкостей PyPy.

Ответ 6

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

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

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

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

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