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



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



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

404   6  

6 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

одной из причин может быть то, что по данным пользователей сайт, в настоящее время он работает только на 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/.

Comments

    Ничего не найдено.