Я смотрел на PyPy, и мне было просто интересно, почему он не был принят в основные дистрибутивы Python. Разве такие вещи, как JIT-компиляция и меньший объем памяти, не улучшат скорость всего кода Python?
Короче говоря, каковы основные недостатки PyPy, которые заставляют его оставаться отдельным проектом?
Ответы:
PyPy не является форком CPython, поэтому его нельзя объединить напрямую с CPython.
Теоретически сообщество Python может повсеместно принять PyPy, PyPy может стать эталонной реализацией, а CPython может быть прекращен. Тем не менее, PyPy имеет свои недостатки:
PyPy - отличный проект, но скорость выполнения задач с интенсивным использованием процессора - это еще не все, и во многих приложениях это меньше всего проблем. Например, Django может работать на PyPy, что ускоряет создание шаблонов, но драйверы базы данных CPython работают быстрее, чем PyPy; в конце концов, какая реализация будет более эффективной, зависит от того, где узкое место в данном приложении.
Другой пример: вы могли бы подумать, что PyPy отлично подойдет для игр, но большинство стратегий GC, подобных тем, которые используются в PyPy, вызывают заметное дрожание. Для CPython большая часть загружаемых процессором игр загружается в библиотеку PyGame, которой PyPy не может воспользоваться, поскольку PyGame в основном реализован как расширение C (хотя см. Pygame-cffi). Я все еще думаю, что PyPy может быть отличной платформой для игр, но я никогда не видел, чтобы это использовалось.
PyPy и CPython имеют принципиально разные подходы к фундаментальным вопросам проектирования и делают разные компромиссы, поэтому ни один из них не «лучше», чем другой в каждом случае.
источник
Во-первых, он не на 100% совместим с Python 2.x и имеет только предварительную поддержку 3.x.
Это также не то, что может быть объединено - реализация Python, предоставляемая PyPy, генерируется с использованием созданной ими инфраструктуры, что чрезвычайно круто, но также совершенно несопоставимо с существующей реализацией CPython. Это должна быть полная замена.
Есть некоторые очень конкретные различия между PyPy и CPython, большая из которых заключается в том, как поддерживаются модули расширения - что, если вы хотите выйти за рамки стандартной библиотеки, является большим делом.
Стоит также отметить, что PyPy не всегда быстрее.
источник
Посмотрите это видео Гвидо ван Россум . Он говорит о том же вопросе, который вы задали в 12 минут 33 секунды.
Особенности:
В конце концов, он сам решает ...
источник
Одной из причин может быть то, что, согласно сайту PyPy , в настоящее время он работает только на 32- и 64-битной архитектуре Intel x86, в то время как CPython работает и на других платформах. Вероятно, это связано с повышением скорости в PyPy для конкретной платформы. Хотя скорость - это хорошо, люди часто хотят, чтобы языковые реализации были как можно более «независимыми от платформы».
источник
Я рекомендую посмотреть этот лейтмотив Дэвида Бизли, чтобы узнать больше. Он отвечает на ваш вопрос, давая ясность о природе и тонкостях PyPy.
источник
В дополнение ко всему, что здесь было сказано, 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/ .
источник