После трёхлетнего затишья в разработке опубликован релиз проекта Pyston 2, развивающего высокопроизводительную реализацию языка Python, использующую наработки проекта LLVM. Реализация примечательна применением современных технологий JIT-компиляции и нацелена на достижение высокой производительности, близкой к производительности традиционных системных языков, таких как C++.
Код прошлых выпусков Pyston распространялся под лицензией Apache, но код Pyston 2 пока недоступен, а опубликованы лишь готовые сборки для Ubuntu 18.04 и 20.04 (для загрузки доступен архив с кодом, но в нём лишь заглушка с информацией, что проект пока является закрытым). Публикация кода входит в планы разработчиков, но это будет сделано после завершения формирования бизнес-модели новой компании, решившей продолжить разработку Pyston без финансовой поддержки Dropbox.
В отличие от прошлых выпусков версия Pyston 2 помечена как стабильный, а не тестовый выпуск. Проведена большая работа по оптимизации производительности и Pyston 2 теперь быстрее штатного Python 3.8 примерно на 20% при прохождении тестового набора python-macrobenchmarks. Наиболее заметный выигрыш в производительности отмечается для нагрузок, свойственных web-приложениям. В отдельных тестах, таких как chaos.py и nbody.py, Pyston 2 опережает Python 3.8 в два раза. Ценой использования JIT является незначительное увеличение потребления памяти.
С точки зрения совместимости со штатным Python, проект Pyston преподносится как наиболее совместимая с CPython альтернативная реализация, так как Pyston является ответвлением от основной кодовой базы CPython. В Pyston поддерживаются все возможности CPython, в том числе C API для разработки расширений на языке Си. Изначально Pyston развивался компанией Dropbox, которая в 2017 году приняла решение прекратить разработку своими силами. В начале 2020 года основные разработчики Pyston основали свою компанию, полностью переосмыслили проект и стали заниматься Pyston полный рабочий день.
Технические подробности о начинке Pyston 2 пока не приводятся, упомянуто только использование DynASM JIT, inline-кэширования и общих оптимизаций CPython. Прошлая версия Pyston использовала JIT на основе трансляции отдельных методов (method-at-a-time), близкий к JIT современных JavaScript-движков. В JIT код на языке Python разбирался и транслировался в промежуточное представление LLVM (IR, Intermediate Representation). Далее IR-представление проходило обработку в оптимизаторе LLVM и передавалось для исполнения в JIT-движок LLVM, который преобразовывал IR-представление в машинный код.
Для получения информации о типах переменных для программ на динамическом языке Python применялась техника вероятностного предсказания типов объектов с последующим уточнением правильности выбора типа в процессе выполнения. Таким образом Pyston постоянно варьировал выполнение между двумя ветками - быстрой, когда данные о предсказанных типах подтверждаются, и медленной, используемой в случае рассогласования данных о типе. Работа могла осуществляться в многопоточном режиме, допускающем параллельное выполнение нескольких нитей кода на языке Python и избавленном от глобальной блокировки интерпретатора (GIL, global interpreter lock).
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=53987
Код прошлых выпусков Pyston распространялся под лицензией Apache, но код Pyston 2 пока недоступен, а опубликованы лишь готовые сборки для Ubuntu 18.04 и 20.04 (для загрузки доступен архив с кодом, но в нём лишь заглушка с информацией, что проект пока является закрытым). Публикация кода входит в планы разработчиков, но это будет сделано после завершения формирования бизнес-модели новой компании, решившей продолжить разработку Pyston без финансовой поддержки Dropbox.
В отличие от прошлых выпусков версия Pyston 2 помечена как стабильный, а не тестовый выпуск. Проведена большая работа по оптимизации производительности и Pyston 2 теперь быстрее штатного Python 3.8 примерно на 20% при прохождении тестового набора python-macrobenchmarks. Наиболее заметный выигрыш в производительности отмечается для нагрузок, свойственных web-приложениям. В отдельных тестах, таких как chaos.py и nbody.py, Pyston 2 опережает Python 3.8 в два раза. Ценой использования JIT является незначительное увеличение потребления памяти.
С точки зрения совместимости со штатным Python, проект Pyston преподносится как наиболее совместимая с CPython альтернативная реализация, так как Pyston является ответвлением от основной кодовой базы CPython. В Pyston поддерживаются все возможности CPython, в том числе C API для разработки расширений на языке Си. Изначально Pyston развивался компанией Dropbox, которая в 2017 году приняла решение прекратить разработку своими силами. В начале 2020 года основные разработчики Pyston основали свою компанию, полностью переосмыслили проект и стали заниматься Pyston полный рабочий день.
CPython 3.8.5 | Pyston 2.0 | PyPy 7.3.2 | |
flaskblogging mean latency | 5.1ms | 4.1ms | 2.5ms |
flaskblogging p99 latency | 6.3ms | 5.2ms | 5.8ms |
flaskblogging memory usage | 47MB | 54MB | 228MB |
djangocms warmup time | n/a | n/a | 105s |
djangocms mean latency | 14.1ms | 11.8ms | 15.9ms |
djangocms p99 latency | 15.0ms | 12.8ms | 179ms |
djangocms memory usage | 84MB | 91MB | 279MB |
pylint performance | 1x | 1.16x | 0.50x |
mypy performance | 1x | 1.07x | unsupported |
pytorch performance | 1x | 1.00x | unsupported |
pypy benchmark suite | 1x | 1.36x | 2.48x |
Технические подробности о начинке Pyston 2 пока не приводятся, упомянуто только использование DynASM JIT, inline-кэширования и общих оптимизаций CPython. Прошлая версия Pyston использовала JIT на основе трансляции отдельных методов (method-at-a-time), близкий к JIT современных JavaScript-движков. В JIT код на языке Python разбирался и транслировался в промежуточное представление LLVM (IR, Intermediate Representation). Далее IR-представление проходило обработку в оптимизаторе LLVM и передавалось для исполнения в JIT-движок LLVM, который преобразовывал IR-представление в машинный код.
Для получения информации о типах переменных для программ на динамическом языке Python применялась техника вероятностного предсказания типов объектов с последующим уточнением правильности выбора типа в процессе выполнения. Таким образом Pyston постоянно варьировал выполнение между двумя ветками - быстрой, когда данные о предсказанных типах подтверждаются, и медленной, используемой в случае рассогласования данных о типе. Работа могла осуществляться в многопоточном режиме, допускающем параллельное выполнение нескольких нитей кода на языке Python и избавленном от глобальной блокировки интерпретатора (GIL, global interpreter lock).
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=53987