Интерпретаторы, компиляторы, трансляторы Python

Основы

Python – это интерпретируемый язык программирования. Это означает, что код исполняется «на лету», строка за строкой. К примеру, используя Python Shell, можно вводить код по одной строке, и каждая из них будет тут же выполнена интерпретатором. Есть и альтернативные реализации интерпретатора и даже компиляторы.

Интерпретатор Питона работает следующим образом:

— сперва исходный код, который написан программистом и хранится в файлах с расширением .py, преобразуется в байт-код (файлы с расширением .pyc). Байт-код – это промежуточный слой между человеко-читаемым кодом и кодом на языке процессора.

— затем байт-код исполняется виртуальной машиной.

Как Вы видите, процесс разбит на два шага. Это сделано с единственной целью – ускорение. Так работает стандартная реализация – CPython, но есть и другие.

CPython

Эта реализация интерпретатора – эталон, поскольку именно она поставляется в составе языка с официального сайта Пайтона. Как можно догадаться по названию, написан он на языке C, а разработан при поддержке Python Software Foundation.

Отличительной чертой CPython можно назвать глобальную блокировку интерпретатора (GIL). Это архитектурное решение вызвало огромное количество споров. Суть заключается в следующем: эта блокировка не позволяет выполнять потоки параллельно. Это избавляет разработчика от многих головных болей, таких как синхронизация, совместное использование памяти и тому подобное. С другой стороны, из-за GIL, параллельное программирование доступно только при использовании отдельных процессов, что ощутимо медленнее параллельных потоков. Главным сторонником глобальной блокировки является сам создатель языка – Гвидо ван Россум.

В основном из претензий к GIL, динамической типизации и скорости самого Пайтона, и родились другие варианты интерпретатора.

Jython

Суть этого интерпретатора в том, что он компилирует исходный код не в байт-код виртуальной машины Python (PVM), а в байт-код виртуальной машины Java (JVM). Благодаря этому в коде на Питоне можно использовать классы Java. Главное же преимущество – JVM работает быстрее, особенно после последних крупных оптимизаций и, в некоторых тестах, показывает скорость выше C++.

IronPython

Этот интерпретатор скрещивает Python и .NET Framework. Здесь они могут свободно взаимодействовать – использовать библиотеки друг друга, в Питоне становятся доступны Windows Forms, C# и вся прочая инфраструктура. Как и CPython, написан интерпретатор на C.

ActivePython

Это ещё одна реализация, нацеленная, в основном, на пользователей операционной системы Виндовс. По сути, это стандартный CPython, к которому добавили инструменты комфортного взаимодействия с ОС и различную документацию и мануалы.

WinPython

Хотя нынешние версии CPython очень стабильны в операционной системе Windows, WinPython имеет несколько эксклюзивных функций. Поскольку WinPython является автономным дистрибутивом для Python, вам нужно только загрузить и распаковать его, чтобы начать работу. WinPython также поставляется с некоторыми из самых популярных библиотек Python для науки о данных и машинного обучения, таких как NumPy, Pandas и SciPy. Следовательно, вы можете сразу же работать с этими библиотеками Python.

WinPython поставляется с множеством встроенных функций, которые в большинстве случаев не требуются, например, компилятор C и C ++. Это может быть серьезным ограничением, поскольку нет возможности выбрать и загрузить только те функции, которые необходимы.

Nuitka

Nuitka — это не только компилятор (может создавать исполняемые файлы), но и транспайлер. Что такое транспиляция? Транспиляция — преобразование программы, при котором используется исходный код программы, написанной на одном языке программирования в качестве исходных данных, и производится эквивалентный исходный код на другом языке программирования. В данном случае этот язык – C или С++.

Nuitka полностью написана на Python.

 

PyJS

Компилятор PyJS переводит код Python в эквивалентный код JavaScript, чтобы он мог выполняться внутри веб-браузера. Используется для этого абстрактное синтаксическое дерево самого Python.

Stackless Python

Stackless Python — это усовершенствованная версия интерпретатора Python. Он назван так из-за отказа от использования стандартного стека вызовов языка C в пользу собственного стека.

Особенностью Stackless являются тасклеты (микропотоки), которые позволяют избежать чрезмерного расхода системных ресурсов, присущего стандартным потокам операционной системы. Она позволяет программисту пользоваться преимуществами многопоточного программирования без снижения производительности на примитивах синхронизации и без проблем с «гонками» (race conditions). Если правильно использовать дешёвые и лёгкие микропотоки Stackless, они позволяют улучшить структуру программы, получить более читаемый код и увеличить производительность труда программиста.

Cython

Cython — это не просто компилятор для Python; это языковое надмножество языка Python, который поддерживает взаимодействие с C/C ++. CPython написан на C, поэтому это язык, который обычно хорошо сочетается с Python. По своей сути, это промежуточный слой между Python и C/C++. Cython позволяет писать обычный Python-код с некоторыми незначительными модификациями, который затем напрямую транслируется в C-код. Но стоит помнить, что Вам придётся самостоятельно указать типы всех переменных – прощай динамическая типизация.

PyPy

Гидо ван Россум однажды сказал: «Если вы хотите, чтобы ваш код работал быстрее, вам, вероятно, следует просто использовать PyPy».

PyPy написан на Python и не требует изменений в коде. Это быстрая и эффективная альтернатива CPython. Запустив свою программу с его помощью, вы можете получить увеличение скорости до ста раз, не внося ни одного изменения в код. Однако, существует и ряд ограничений:

— может некорректно работать с подключенными к коду на Питоне библиотеками на Си

— перед запуском производит множество манипуляций над кодом, в целях оптимизации. Это делает бессмысленным его использование в небольших скриптах.

Pythran

Pythran предназначен для эффективной компиляции научных программ с использованием нескольких ядер и SIMD-инструкций.

Pyston

Ориентированный на высокую скорость Pyston является адаптацией Python. В нем используется компиляция «just-in-time» и множество других приемов для ускорения работы. По результатам некоторых тестов работает на 30% быстрее оригинальной реализации Python.

Разработчики Pyston приложили все усилия, чтобы сделать реализацию как можно менее болезненной в использовании. Главная цель в том, чтобы Python можно было использовать, просто набрав «Pyston» вместо «Python».

Skulpt

Skulpt — это реализация Python в браузере, нет необходимости в дополнительной обработке, плагинах или поддержке на стороне сервера, необходимых для запуска Python в веб-браузере. Любой код Python, написанный в Skulpt, выполняется непосредственно в веб-браузере. Хотя Skulpt переводит код Python в код JS, он не облегчает выполнение последнего.

Transcrypt

Компилятор Python следует упрощенному и мощному синтаксису, не требуя дополнительных расширений. Transcrypt прекомпилирует в быстрый, читаемый JS-код, который можно отлаживать из исходного кода Python. Помимо беспрепятственного доступа к любой JS-библиотеке, Transcrypt также может работать поверх Node.js.

Благодаря поддержке иерархических модулей, локальных классов и множественного наследования Transcrypt может похвастаться гибкой и стабильной общей структурой.

Заключение

Несмотря на всё многообразие интерпретаторов, компиляторов и трансляторов Python, стоит помнить, что самой стабильной и актуальной, хоть и медленной, будет стандартная реализация интерпретатора – CPython. Так же это лучший выбор для новичков, которым надо узнать только язык, а не нюансы его реализации. Если Вам нужно выполнять Питон в браузере, стоит рассмотреть трансляторы в JavaScript. Так же решением может быть относительно молодая, но очень перспективная технология, выходящая за рамки данного урока, — Web Assembly. Ну а за дополнительной скоростью, скорее всего, стоит обратиться к PyPy.

 

 

 

Оцените статью
О Python на русском языке
Добавить комментарий

Adblock
detector