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


165

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

Якщо коротко, то які основні недоліки PyPy змушують його залишатися окремим проектом?


4
Крім того, pypy ще не підтримують numpy. morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html
rthiago

І нумерова підтримка лише дряпає поверхню того, що знадобляться наукові обчислювальні програми, перш ніж перейти на PyPy. Ось кілька задумливих думок від оригінального немічного автора: 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 для управління пам’яттю, мабуть, має більш передбачувані ефекти на продуктивність, ніж різні системи GP 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 тепер поставляється з додатковою GC і, можливо, є більш придатною для ігор, як наслідок.
porgarmingduod

63

Для одного, він не на 100% сумісний з Python 2.x, і має лише попередню підтримку для 3.x.

Це також не те, що можна об'єднати - реалізація Python, що надається PyPy, генерується за допомогою створеної ними структури, яка надзвичайно крута, але також повністю розходиться з існуючою реалізацією CPython. Це мало б бути повноцінною заміною.

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

Варто також зазначити, що PyPy не є універсально швидшим.


54

Дивіться це відео Гідо ван Россума . Він розповідає про те саме питання, яке ви задали за 12 хв 33 сек.

Основні моменти:

  • відсутність сумісності Python 3
  • відсутність підтримки для розширення
  • не підходить як код клею
  • швидкість - це не все

Зрештою, він вирішує ...


3
+1 для посилання З прямим посиланням на відповідну частину відео! Також +1 для невідомого неправдивого опитування Гвідо ван Россума "як багато людей використовують PyPy у виробництві? ... немає рук? Кашляє. Ну, мабуть, є ще надія [на Крітон]".
Тревор Бойд Сміт

15

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


6
Зауважте, що резервний модуль ARM "майже є", а PowerPC - WIP. Також зауважте, що це стосується лише компілятора JIT, а перенесення JIT до нової архітектури просто вимагає впровадження генератора коду для відносно простого та низькорівневого ІК, не більше того.

1
Станом на 2018 рік, PyPy тепер працює на більшій кількості архітектур x86 (32/64 біт для Linunx, Windows, MacOS та BSD), а також на Linux, новіших апаратних засобів ARM (ARMv6 або ARMv7, з VFPv3), великих та малих ендіан варіанти PPC64 та s390x.
Фредерік Гроссханс


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/isissue/1447/ .


2
Станом на 2018 рік, я можу підтвердити, що я побачив скорочення приблизно на порядок у різних сферах використання
Frédéric Grosshans

1
@ FrédéricGrosshans цікаво. Мені доведеться спробувати його порівняльний аналіз ще раз.
asmeurer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.