Завдяки залученню JIT-компілятора, на льоту транслюються деякі елементи в машинний код, PyPy при виконанні деяких операцій в кілька разів обганяє по продуктивності класичну реалізацію Python 2.7 на мові Сі (CPython). У середньому PyPy 2.0 на 4% швидша за PyPy 1.9 і в 5.7 разів швидше класичного CPython 2.7.3. Ціною високої продуктивності та використання JIT-компіляції є більш високе споживання пам'яті — загальне споживання пам'яті в складних та процесах, що довго працюють (наприклад, при трансляції PyPy силами самого PyPy) перевищує споживання CPython в півтора-два рази.
Стабільний випуск підтримує x86-системи, включаючи Linux (32/64 біт), Mac OS X (64 біт) і Windows (32 біт). Одночасно проходить альфа-тестування варіант PyPy 2.0 для платформи ARM. Випуск для ARM позиціонується як ознайомлювальний, так як версія для даної платформи ще не зовсім стабільна і не підтримує деякі можливості. Зокрема, ще не реалізована підтримка безстекового режиму і JIT не завжди коректно генерує асемблерний код. Тим не менш, незважаючи на ще до кінця не налагоджений і оптимізований JIT, версія для ARM показує досить непогані результати продуктивності лише трохи поступаючись варіанту для платформи x86 за співвідношенням продуктивності з CPython. PyPy для ARM доступний для ARMv6 (Raspberry Pi) і ARMv7 (Beagleboard, Chromebook, Cubieboard) і може працювати в режимах hard-float і soft-float.
Нововведення, додані в PyPy 2.0:
- Безстековий режим доведений до працездатного стану. У тому числі забезпечена підтримка елементів системи багатопотокового програмування «greenlet», а також можливість використання eventlet і gevent;
- До складу PyPy включений новий вбудований модуль cffi з реалізацією інтерфейсу для виклику функцій, написаних на мові Сі. Даний інтерфейс позиціонується як рекомендований метод звернення до функцій на мові Сі;
- Для зворотних викликів Python-функцій з Сі-коду тепер застосовується JIT-компіляція, що, наприклад, дозволило значно прискорити виконання модуля парсинга XML;
- Проведено рефакторінг JIT-компілятора для генерації машинного коду, що оперує областями в купі, замість стека. Подібна зміна дозволила забезпечити роботу безстекового режиму і відкрила нові шляхи подальшої оптимізації;
- Перероблена велика частина класів для роботи з масивами зі складу бібліотеки numpypy, що дозволило позбутися зайвих обчислень. Підготовлена більш повна реалізація dtype і забезпечена підтримка додаткових атрибутів масивів;
- Внесено безліч оптимізацій продуктивності.
Основні особливості PyPy:
- Підтримка безстекового (Stackless) режиму роботи, що дозволяє використовувати модель actor (erlang-подібне програмування з масою мікропотоків і відсилання сигналів один одному, але при цьому (на відміну від erlang) все відбувається в одному фізичному потоці операційної системи);
- Реалізація режиму ізольованого виконання коду, до якого немає довіри. Від sandbox в CPython даний режим відрізняється повною підтримкою всіх можливостей мови без виділення unsafe-функцій.
- Автоматична генерація і повна прозорість вбудованого JIT-компілятора;
- PyPy успішно проходить стандартний тестовий пакет Python і підтримує більшість із стандартних Python-модулів і фреймворків, таких як ctypes, django (з sqlite), twisted (без підтримки ssl), pylons, pyglet. PyPy може бути використаний для безшовної заміни CPython 2.7;
- Підтримка роботи на архітектурах x86 (IA-32), x86_64 та ARM. Ведеться робота з адаптації для архітектури PowerPC (PPC64), але вона ще не завершена;
- На базі технологій PyPy створено бекенд для генерації в PyPy байткода для LLVM і віртуальних машин .NET/CLI і Java.
- На базі PyPy ведеться розробка реалізацій на мові Python інтерпретаторів Prolog, Smalltalk, JavaScript, Io і Scheme.
Немає коментарів:
Дописати коментар