5 мин для чтенияинтерпретатор python

Выбор транслятора

Выбор транслятора для работы с той или иной программой, прежде всего, определяется рекомендациями разработчиков этой программы, затем, целями и личными предпочтениями программиста.

Если Вы хотите разобраться в этой теме глубже, рекомендуем прочесть:

Альфред В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман. Компиляторы: принципы, технологии и инструментарий

Это учебник по теории написания компиляторов, в котором подробно описаны принципы работы разноуровневых компиляторов (начиная от простейших однопроходных, заканчивая современным компилятором на языке Java), уделяется повышенное внимание лексическому, синтаксическому и семантическому разбору программ в исходном коде, генерации машинного кода. В.А.Серебряков, М.П.Галочкин

Основы конструирования компиляторов

В.А.Серебряков, М.П.Галочкин. Основы конструирования компиляторов

Ещё один учебник по созданию компиляторов, только теперь отечественный. Глубоко раскрыты темы лексического и семантического анализа, рассмотрены темы автоматизации процесса разработки компиляторов, получения оптимального кода.

В каких языках используются интерпретаторы?

В современном мире программирования чаще всего используют только самые популярные языки программирования, ведь именно они развиваются наиболее быстро, что позволяет воплотить весь потенциал программистов. Примером таких языков могут стать Java и С\С++. Веб-языки не стоит относить сюда, потому что реализации их кода не требуются дополнительные приспособления, кроме рабочей станции и приложения, способного запустить код. Многие программисты считают лучшим интерпретатором Windows именно MVS, поскольку он разработан исключительно только для работы с операционной системной Windows.

Как CPython выполняет программы

Интерпретатор «Питона» выполняет любую программу поэтапно.

Поэтапное выполнение Python программы Интерпретатором

Этап #1. Инициализация

После запуска вашей программы, Python-интерпретатор читает код, проверяет форматирование и синтаксис. При обнаружении ошибки он незамедлительно останавливается и показывает сообщение об ошибке.

Помимо этого, происходит ряд подготовительных процессов:

  • анализ аргументов командной строки;
  • установка флагов программы;
  • чтение переменных среды и т.д.

Этап #2. Компиляция

Интерпретатор транслирует (переводит) исходные инструкции вашей программы в байт-код (низкоуровневое, платформонезависимое представление исходного текста). Такая трансляция необходима в первую очередь для повышения скорости – байт-код выполняется в разы быстрее, чем исходные инструкции.

Этапы генерации байт-кода из исходного кода на Python

Если Python-интерпретатор обладает правом записи, он будет сохранять байт-код в виде файла с расширением . Если исходный текст программы не изменился с момента последней компиляции, при следующем запуске вашей программы, Python сразу загрузит файл , минуя этап компиляции (тем самым ускорит процесс запуска программы).

Этап #3. Выполнения

Как только байт-код скомпилирован, он отправляется на виртуальную машину Python (PVM). Здесь выполняется байт-код на PVM. Если во время этого выполнения возникает ошибка, то выполнение останавливается с сообщением об ошибке.

PVM является частью Python-интерпретатора. По сути это просто большой цикл, который выполняет перебор инструкций в байт-коде и выполняет соответствующие им операции.

Типы интерпретаторов

Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Достоинством такого подхода является мгновенная реакция. Недостаток — такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой.

Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинством таких систем является большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки — большее требование к ресурсам и требование на корректность исходного кода. Применяется в таких языках, как Java, PHP, Tcl, Perl, REXX (сохраняется результат парсинга исходного кода), а также в различных СУБД.

В случае разделения интерпретатора компилирующего типа на компоненты получаются компилятор языка и простой интерпретатор с минимизированным анализом исходного кода. Причём исходный код для такого интерпретатора не обязательно должен иметь текстовый формат или быть байт-кодом, который понимает только данный интерпретатор, это может быть машинный код какой-то существующей аппаратной платформы. К примеру, виртуальные машины вроде QEMU, Bochs, VMware включают в себя интерпретаторы машинного кода процессоров семейства x86.

Некоторые интерпретаторы (например, для языков Лисп, Scheme, Python, Бейсик и других) могут работать в режиме диалога или так называемого цикла чтения-вычисления-печати (англ. read-eval-print loop, REPL). В таком режиме интерпретатор считывает законченную конструкцию языка (например, s-expression в языке Лисп), выполняет её, печатает результаты, после чего переходит к ожиданию ввода пользователем следующей конструкции.

Уникальным является язык Forth, который способен работать как в режиме интерпретации, так и компиляции входных данных, позволяя переключаться между этими режимами в произвольный момент, как во время трансляции исходного кода, так и во время работы программ.

Следует также отметить, что режимы интерпретации можно найти не только в программном, но и аппаратном обеспечении. Так, многие микропроцессоры интерпретируют машинный код с помощью встроенных микропрограмм, а процессоры семейства x86, начиная с Pentium (например, на архитектуре Intel P6), во время исполнения машинного кода предварительно транслируют его во внутренний формат (в последовательность микроопераций).

Что такое компилятор?

Компилятор (от английского Compile – собирать, накапливать) – это вариант реализации транслятора, который создаётся для перевода программы, написанной на высокоуровневом языке программирования в машинный код, который в последствие будет исполняться процессором компьютера. Этот тип трансляции называется компиляцией.

В большинстве случаев компиляция программы происходит полностью (AOT-компиляция). Компилятор целиком считывает программу, проводит её пошаговый анализ (лексический, синтаксический, семантический), оптимизирует её, очищая от излишних конструкций, но сохраняя исходный смысл операций, и также целиком переводит её в машинный код.

Однако, иногда используется и построчная компиляция. В этом случае машинный код генерируется и исполняется для каждой полной грамматической конструкции исходного кода. От интерпретации такая компиляция отличается способом исполнения.

Для каждого языка программирования и практически для каждой операционной системы используется свой компилятор. Иногда для одного семейства операционных систем может использоваться один и тот же компилятор.

Компиляторы для C++

Так, например, для C++ можно использовать:

  • Microsoft Visual C++ 6.0
  • MS Visual Studio 2005 Professional
  • Intel C++ Compiler 4.5
  • Borland Builder 6.0
  • Borland C++ Compiler
  • g++
  • gcc
  • MinGW 3.2

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

Компилятор для Python

Необходимость самостоятельно компилировать исходный код с Питона в exe-файл для последующей интерпретации возникает нечасто. В тех случаях, когда на компьютер, на котором планируется выполнение программы, уже установлен интерпретатор Python, компиляция обычно не требуется.

Если программе всё же необходима компиляция, можно использовать cx_Freeze.

Компилятор для Java

Язык программирования Java работает с виртуальной машиной Java, которая обрабатывает байт-код (промежуточный код) и передаёт инструкции оборудованию. Виртуальная машина Java, по сути, является интерпретатором.

Компиляторы в Java используются для того, чтобы преобразовать исходный код в байт-код, доступный пониманию виртуальной машины и пригодный для последующей интерпретации.

Чаще всего используются:

  • GNU Compiler for Java
  • Javac

Javac помимо анализа и трансляции, производит ещё и оптимизацию кода.

В целом, за счёт использования виртуальной машины, Java выполняет операции, описанные в исходном коде куда медленнее, чем, скажем, С++. При исполнении некоторых операций Java может уступать в скорости до 7 раз. Для ускорения работы программ на Java используется оптимизация библиотек (в них широко используется native-код), некоторые аппаратные решения для ускоренной обработки байт-кода и JIT-компиляция.

JIT-компиляция

JIT-компиляция – это трансляция байт-кода в машинный код непосредственно во время работы программы. JIT-компиляция может быть применена к любой части программы или ко всей программе в целом.

Использование этой технологии позволяет существенно ускорить процесс исполнения задач, поставленных в исходном коде, по сравнению с пошаговой интерпретацией, традиционно применяемой виртуальными машинами.

Альтернативы СPython

CPython является стандартной реализацией, но существуют и другие реализации, созданные для специфических целей и задач.

Jython

Основная цель данный реализации – тесная интеграция с языком Java. Работает следующим образом:

  1. Java-классы выполняют компиляцию программного кода на языке Python в байт-код Java
  2. Полученный байт-код запускается на виртуальной машине Java (JVM)

Jython позволить Python-программам управлять Java-приложениями. Во время выполнения такая программа ведет себя точно так же, как настоящая программа на языке Java.

IronPython

Предназначена для обеспечения интеграции Python-программ с C# приложениями на Microsoft .NET Framework или Mono. Принцип работы такой же, как и у Jython.

PyPy

PyPy — это интерпретатор Python, написанный на Python (если быть точнее, то на RPython).

Особенностью PyPy является использование трассирующего JIT-компилятора (just-in-time), который на лету транслирует некоторые элементы в машинный код. Благодаря этому, при выполнении некоторых операций PyPy обгоняет CPython в несколько раз. Но плата за такую производительность – более высокое потребление памяти.

Python 2 или Python 3? Какой выбрать?

С появлением Python 3 в 2008 году, всегда был важный вопрос, чтобы спросить, стоит ли придерживаться более старого Python 2 или перейти на борт самого последнего Python 3.

Ответ может быть легким для новичков в изучении Python; Начните с более нового и лучшего Python 3. Однако выбор не так прост для организаций или профессионалов, которые сильно полагаются на Python для своего бизнеса и имеют огромные базы кода Python.

Большинство приложений Python на сегодняшний день использует Python 2.7. Однако переход на Python 3 со временем увеличивается. Отчасти это связано с тем, что Python 2.7 будет получать обновления безопасности только до 2020 года.

Для создания новых приложений Python вы должны использовать Python 3. Если вы работаете с новой библиотекой Python с открытым исходным кодом, вы можете написать ее как для Python 2, так и для Python 3. Это потому, что значительная часть разработчиков Python по-прежнему расставляет приоритеты с использованием Python 2.

Рекомендуется использовать новейший интерпретатор Python 3.x, поскольку каждая новая версия предлагает улучшенные исправления ошибок, безопасность и стандартные модули библиотеки.

Вы должны придерживаться Python 2, только если у вас есть уже существующая кодовая база в Python 2 или эксклюзивная библиотека для нее.

Если вы искренне любите Python 2 и не хотите переходить на Python 3, это нормально. Однако следует понимать, что после 2020 года Python 2 не будет таким же прибыльным вариантом, как сегодня. Итак, начать работу с Python 3 сегодня, наряду с Python 2, может быть хорошей идеей.

Все!

Это завершает список 6 самых популярных интерпретаторов Python, доступных на данный момент. Вы можете работать с любым из них. Однако у каждого из них есть свои льготы. Таким образом, вы должны выбирать мудрее, особенно когда работаете профессионально.

Хорошим знанием может быть знание нескольких интерпретаторов Python. Таким образом, чем больше вы пытаетесь, тем лучше.

Самые популярные программы интерпретатора

В современном стиле программирования принято при создании нового языка совмещать все в одной программе. Чтобы программисту не пришлось пропускать весь код через несколько программ, теперь все объединено в одно приложение – компилятор.

Современные функции компилятора:

  1. Компиляция. Сборка всех фрагментов кода.
  2. Интерпретация. Создание полумашинного кода.
  3. Линковка. Связывания частей интерпретированного кода в памяти.

Итак, из этого можно еще лучше понять, насколько интерпретатор — это мощное средство, поскольку без него программирование было бы таким же, как и в 60-х годах 20 века, то есть невероятно сложным. Теперь надо рассказать, какие же интерпретаторы (в составе компиляторов) на данный момент самые популярные:

  1. MVS. Популярный компилятор от «Майкрософт» для языка программирования С++.
  2. Xcode. Используется для создания приложений под технику Apple.
  3. MinGW. Один из самых распространенных компиляторов для языков программирования С и С++. Является прямым конкурентом MVS.

Примечания

  1. Дорот В. Л., Новикав Ф. А. // Толковый словарь современной компьютерной лексики. — 3-е изд. — СПб.: БХВ-Петербург, 2004. — С. 215. — 608 с. — ISBN 9785941574919. — ISBN 5941574916.
  2. Макарова Н. В., Волков В. Б. // Информатика: Учебник для вузов. — СПб.: Питер, 2015. — С. 557. — 576 с. — ISBN 9785496015509.
  3. Microsoft Press. interpret, interpreted language // Толковый словарь по вычислительной технике. — М.: Русская редакция, 1995. — С. 236. — 496 с. — ISBN 5750200086. — ISBN 1556155972.
  4. ↑ I.153 interpretative language // Толковый словарь по вычислительным систамам / Под ред. В. Иллингуорта и др.. — М.: Машиностроение, 1990. — С. 241-242. — 560 с. — ISBN 521700617X.
  5. Кочергин В. И. interpreter // Большой англо-русский толковый научно-технический словарь компьютерных информационных технологий и радиоэлектроники. — 2016. — ISBN 978-5-7511-2332-1.
  6. ↑ Интерпретатор, Интерпретация // Толковый словарь по информатике / Под. ред. Г.Г. Пивняка. — Днепропетровск: Национальный горный университет, 2008. — С. 327-328. — 599 с. — ISBN 978-966-350-087-4.
  7. Воройский Ф. С. // Информатика. Энциклопедический словарь-справочник. — М.: Физматлит, 2006. — С. 325. — 768 с. — ISBN 5922107178. — ISBN 9785457966338.
  8. , 25.3. Где искать жир и патоку? Интерпретируемые языки, с. 585.
  9. , 32.4. Советы по эффективному комментированию. Производительность не является разумной причиной отказа от комментирования, с. 774.
  10. ↑ .
  11. Пратт Т., Зелковиц М. 2.1.3 Трансляторы и виртуальная архитектура // Языки программирования: разработка и реализация. — СПб.: Питер, 2002. — 688 с. — ISBN 5318001890.

Интерпретатор Python

Итак, со всем этим давайте перейдем к краткому обзору 6 самых популярных интерпретаторов Python:

CPython

5 мин для чтенияинтерпретатор python

Поддержка – до Python 3.7

Это стандартная и наиболее широко используемая реализация языка программирования Python. Написанный на C и Python, CPython является интерпретатором, который предлагает интерфейс сторонней функции с C и другими языками программирования.

CPython также можно классифицировать как компилятор, потому что он преобразует код Python в байт-код перед его интерпретацией. Он использует GIL, Global Interpreter Lock, которая может представлять ограничение, поскольку отключает параллельные потоки Python для процесса.

Как эталонная реализация Python, CPython предлагает наибольшую совместимость с пакетами Python и модулями расширения C. Таким образом, все версии языка программирования Python реализованы на языке C.

CPython является единственным вариантом для использования пакетов Python, которые полагаются на расширения C для правильной работы. Ориентация на CPython необходима, если вы хотите охватить максимально широкую аудиторию для программы, разработанной на языке программирования Python.

IronPython

Поддержка – до Python 2.7

Реализация языка программирования Python для .NET Framework, IronPython использует библиотеки Python и .NET Framework. Он также может предоставлять код Python другим языкам, относящимся к .NET Framework.

IronPython обеспечивает поддержку динамической компиляции и поставляется с интерактивной консолью. Использование интерпретатора Python позволяет сценариям Python взаимодействовать с объектами .NET. С инструментами Python для Visual Studio IronPython напрямую интегрируется в среду разработки Visual Studio.

Jython

5 мин для чтенияинтерпретатор python

Поддержка – до Python 2.7

Ранее известный как JPython, Jython является реализацией Python, работающей на платформе Java. Написанный на Java и Python, Jython преобразует код Python в байт-код Java и, следовательно, позволяет запускать код Python на любой машине, имеющей JVM.

Jython обеспечивает поддержку как статической, так и динамической компиляции

Важной особенностью популярного интерпретатора Python является то, что он позволяет импортировать, а также использовать любой класс Java, например модуль Python

Если вам нужно взаимодействовать с существующей кодовой базой Java или написать код Python для JVM, вы можете сделать ставку на Jython.

PyPy

Поддержка – до Python 2.7, Python 3.5 и Python 3.6

PyPy – это быстрая, совместимая альтернативная реализация языка программирования Python. Интерпретатор Python реализован в RPython, который является ограниченным статически типизированным подмножеством языка программирования Python .

Обладая JIT-компилятором, PyPy поддерживает C, CLI и JVM. Основная цель PyPy – предложить максимальную совместимость с эталонной реализацией CPython, одновременно повышая производительность.

PyPy используется разработчиками Python, стремящимися повысить производительность определенного кода Python. Согласно официальному сайту PyPy , популярный интерпретатор Python примерно в 4,4 раза быстрее, чем CPython.

PythonNet

Поддерживает – Python 2.6 до Python 3.5

PythonNet предлагает практически бесшовную интеграцию нативной установки Python с .NET CLR. Его подход можно считать обратным подходу, который следует за IronPython.

Вместе с Mono, PythonNet позволяет собственной установке Python в операционной системе, отличной от Windows, работать в среде .NET. Можно работать с PythonNet вместе с IronPython без каких-либо проблем.

Stackless Python

Поддержка – до Python 3.7

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

Хотя Stackless Python использует стек C, он очищается между вызовами функций. Следовательно, интерпретатор Python не зависит от вызова C для своего стека. Как и CPython, Stackless Python написан с использованием C и Python.

Помимо поддержки потоков, Stackless Python предлагает поддержку каналов связи, сопрограмм, предварительно скомпилированных двоичных файлов, циклического планирования, сериализации задач и тасклетов.

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

Что такое компиляторы и интерпретаторы?

Статья рассчитана на пользователей, которые хотя бы немного знают о том, как устроены сети, операционные системы и языки программирования. Если вы вообще не имеете никакого представления о перечисленном, то рекомендуем почитать, ибо информация будет выглядеть достаточно сумбурно.

5 мин для чтенияинтерпретатор python

Для начал стоит разобраться, что же такое компилятор, ведь он буквально является основой основ. После написания кода на каком-либо языке он обязательно должен пройти стадию компиляции, т. е. сборки всех частей кода воедино. Дело в том, что проект всегда и обязательно разделяется на множество частей, каждая из которых выполняет лишь определенную роль. Будь то работа с сетью, файлами, пользователем и т. д. Такие куски кода могут быть написаны самим пользователем или взяты из стандартной библиотеки STL.

При взятии какого-либо элемента есть два варианта компиляции: автоматический и динамический. При автоматическом берутся все необходимые (включенные) библиотеки, а при динамическом — лишь выбранные части эти библиотек. Это весьма большая тема, поэтому рекомендуем прочитать про каждый способ отдельно.

5 мин для чтенияинтерпретатор python

Итак, все библиотеки, части кода в форме исходных файлов собраны, а что дальше? Правильно, теперь самое время заставить компьютер понимать наш код. Делается это для того, чтоб компьютер мог вообще взаимодействовать с пользователем. Промежуточным звеном между аппаратной и программной частью является полумашинный язык программирования – ассемблер, именно в этот язык интерпретатор переводит вами написанный код.

Из сказанного выше можно сказать, что интерпретатор – это определенная программа для перекодировки в полумашинный язык ассемблер. В следующей части статьи мы поговорим подробнее про современные компиляторы и интерпретаторы.