Показ дописів із міткою PyPy. Показати всі дописи
Показ дописів із міткою PyPy. Показати всі дописи

субота, 28 грудня 2013 р.

Випуск PyPy 2.1

Представлено реліз PyPy 2.1, реалізації мови Python, що написана мовою Python (використовується статично типізована підмножина RPython, Restricted Python). Одночасно доступна для тестування бета-версія PyPy3 2.1 з підтримкою Python 3. Версія PyPy 2.1 примітна забезпеченням офіційної підтримки процесорів ARM в JIT-компіляторі. Крім того, до коду внесено чергові оптимізації — новий випуск в середньому на 10% швидше минулої версії PyPy і в 6.12 разів швидше класичного CPython 2.7.3.

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

Нововведення, додані в PyPy 2.1:

  • Повноцінна підтримка генерації коду для архітектури ARM в JIT-компіляторі. Підтримуються системи на базі ARMv6 (Raspberry Pi) і ARMv7 (Beagleboard, Chromebook, Cubieboard тощо) в режимах ABI hard-float (armhf/gnueabihf) і soft-float (armel/gnueabi);
  • Підтримка Stacklet для ARM;
  • Реалізація бібліотек os.statvfs і os.fstatvfs для Unix-систем;
  • Збільшення продуктивності ведення логу;
  • Прискорення виконання операцій з множинами в об'єктах;
  • При формуванні пакета забезпечена збірка розширення TK з використанням інтерфейсу CFFI;
  • Для Numpy покращена підтримка масивів і dtype, додана підтримка субмасивів, проведена робота над помилками;
  • Експериментальна підтримка сумісності з Python 3 (CPython 3.2.3), реалізована в окремій гілці PyPy3;

Основні особливості 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, Ruby, JavaScript, Io і Scheme.

Випуск PyPy 2.0, реалізації Python, яка написана мовою Python

Після одинадцяти місяців розробки побачив світ випуск PyPy 2.0. В рамках проекту розробляється реалізація мови Python, яка написана мовою Python (використовується статично типізована підмножина RPython, Restricted Python).

Завдяки залученню 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.