Как работает python: интерпретатор, байт-код, pvm

Nuitka — компилятор Python написанный на языке Python

Nuitka — это компилятор Python, написанный на языке Python.

Nuitka берет код Python и компилирует его в исходный код C / C++ или исполняемые файлы. Его можно использовать для разработки автономных программ, даже если на вашем компьютере не запущен Python.

Написанная полностью на Python, Nuitka позволяет использовать различные библиотеки Python и модули расширения.

Компилятор доступен для платформ FreeBSD, Linux, macOS X, NetBSD и Windows и находится под лицензией Apache License версии 2.0. Nuitka также доступна с Anaconda для тех, кто предпочитает ее для разработки проектов, связанных с наукой о данных и машинным обучением.

Nuitka

В Ubuntu 18.04 установить Nuitka возможно с помощью APT:

$ sudo apt update
$ sudo apt install nuitka clang

Результат выполнения бенчмарка для компилятора Nuitka:

# Сборка для GCC
$ nuitka pystone.py
$ ./pystone.exe 1000000
Pystone(1.1.1) time for 1000000 passes = 2.67537
This machine benchmarks at 373780 pystones/second

# Сборка для Clang
$ nuitka pystone.py --clang
$ ./pystone.exe 1000000
Pystone(1.1.1) time for 1000000 passes = 2.64646
This machine benchmarks at 377863 pystones/second

# Использование GCC с оптимизацией 
$ nuitka pystone.py --lto
$ ./pystone.exe 1000000
Pystone(1.1.1) time for 1000000 passes = 2.6195
This machine benchmarks at 381753 pystones/second

Как можно видеть, Nuitka позволила получить увеличение производительности на 50%, по сравнению со стандартной реализацией Python 3.

Примечания и ссылки [ править ]

  1. ^ В этом смысле ЦП также является интерпретатором машинных инструкций.
  2. ^ Хотя эта схема (объединение стратегии 2 и 3) использовалась для реализации некоторых интерпретаторов BASIC уже в 1970-х, таких как, например, эффективный интерпретатор BASIC ABC 80 .
  3. ^ Беннетт, JM; Prinz, DG; Вудс, ML (1952). «Интерпретативные подпрограммы». Материалы Национальной конференции ACM, Торонто .
  4. Согласно сообщениям Пола Грэма в Hackers & Painters , стр. 185, Маккарти сказал: «Стив Рассел сказал:« Послушайте, почему бы мне не запрограммировать этот eval … », и я сказал ему, хо-хо, вы путаете теорию с практикой, этот eval предназначен для чтения, а не для вычислений. Но он пошел дальше и сделал это. То есть он скомпилировал eval в моей статье вмашинный код IBM 704 , исправив ошибку , а затем объявил это интерпретатором Лиспа, что, безусловно, им и было. по сути та форма, которую она имеет сегодня … »
  5. ^ «Почему первый компилятор был написан до первого интерпретатора?» . Ars Technica . Проверено 9 ноября 2014 .
  6. ^ Теодор Х. Ромер, Деннис Ли, Джеффри М. Фолькер, Алек Вольман, Уэйн А. Вонг, Жан-Лу Бэр, Брайан Н. Бершад и Генри М. Леви, Структура и работа переводчиков
  7. ^ Terence Парр, Johannes Luber, разница между компиляторами и интерпретаторами Архивированными 2014-01-06 в Wayback Machine
  8. ^ Кюнель, Клаус (1987) . «4. Kleincomputer — Eigenschaften und Möglichkeiten» [4. Микрокомпьютер — Свойства и возможности. В Эрлекампфе, Райнер; Мёнк, Ханс-Иоахим (ред.). Mikroelektronik in der AmateurpraxisМикроэлектроника для практического любителя ] (на немецком языке) (3-е изд.). Берлин: Militärverlag der Deutschen Demokratischen Republik de , Лейпциг. п. 222. ISBN. 3-327-00357-2. 7469332.
  9. Перейти ↑ Heyne, R. (1984). «Basic-Compreter für U880» . радио-fernsehn-elektronik де (на немецком языке). 1984 (3): 150–152.
  10. ^ Промежуточные представления AST , форум Lambda The Ultimate
  11. ^ Кистлер, Томас; Франц, Майкл (февраль 1999 г.). «Древовидная альтернатива байт-кодам Java» . Международный журнал параллельного программирования . 27 (1): 21–33. CiteSeerX 10.1.1.87.2257 . DOI10,1023 / A: 1018740018601 . ISSN 0885-7458 . S2CID 14330985 . Проверено 20 декабря 2020 .
  12. ^ Surfin ‘Safari — Архив блога »Объявление о SquirrelFish . Webkit.org (02.06.2008). Проверено 10 августа 2013.
  13. ^ Эйкок 2003 , 2. JIT ГААП, 2,1 Genesis, стр. 98.ошибка sfn: нет цели: CITEREFAycock2003 ( помощь )
  14. ^ Л. Дойч, А. Шиффман, Эффективная реализация системы Smalltalk-80 , Труды 11-го симпозиума POPL, 1984.
  15. ^ Бондорф, Андерс. « Logimix: самоприменимый частичный оценщик для Prolog ». Синтез и преобразование логических программ. Springer, London, 1993. 214-227.
  16. ^ Гиффорд, Клайв. «Собственные отношения самоинтерпретаторов» . Блогер . Проверено 10 ноября 2019 .
  17. ^ Кент, Аллен; Уильямс, Джеймс Г. (5 апреля 1993 г.). Энциклопедия компьютерных наук и технологий: Том 28 — Приложение 13 . Нью-Йорк: ISBN Marcel Dekker, Inc. 0-8247-2281-7. Проверено 17 января, 2016 .

Интерпретации в литературе

Фразеологизмы, многозначные слова, эпитеты, метафоры и другие средства художественной выразительности языка могут затруднять понимание литературных произведений. Одно и то же слово можно истолковать по-разному (особенно, если оно изменило с течением времени своё лексическое значение).

Например, сейчас под словом «фактор» понимается движущая сила какого-либо процесса. Но в текстах XIX века речь шла о работнике типографии: «Фактор объяснил их весёлость, признавшись ему, что наборщики помирали со смеху, набирая книгу Гоголя». Сейчас подобный текст вызвал бы недоумение: как фактор может что-то объяснить?

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

Стихотворение Гёте «Ночная песня путника» переведено на 130 языков мира. На русский язык его перевели Лермонтов, Брюсов, Анненский и Пастернак. В каждом переводе есть свои особенности. Ни один перевод не похож на другой.

Корректную интерпретацию текста можно назвать искусством. Яркий пример настоящего мастерства – переводы сонетов Шекспира С. Маршаком и Б. Пастернаком.

Один и тот же сонет у писателей переведён по-разному, а некоторые исследователи отмечают, что их перевод получился образнее текстов-оригиналов, благодаря лексическому богатству русского языка.

Ключевые отличия C++ и Python

Дальше перечислены основные отличия C++ и Python с точки зрения языков программирования.

Компиляция

Python — интерпретируемый язык. Файлы с расширением .py не нужно компилировать. Можно передавать код прямо в и получать результат.

C++ — это компилируемый язык. Компилятор создает код из написанного программистом, который потом выполняется для получения результата.

Использование

У C++ много разных функций и относительно сложный синтаксис. Код на этом языке писать не так просто.

У Python синтаксис очень простой, поэтому программы выглядят намного проще и их легче писать.

Статическая/динамическая типизация

C++ — статически типизируемый язык. Таким образом типы данных проверяются во время компиляции. Благодаря этому исходный код при работе защищен от ошибок.

Python же предрасположен к ошибкам, ведь типы там проверяются уже при работе программы.

Портативность

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

C++ не является портативным, поэтому для каждой платформы код нужно специально компилировать: «Написал код однажды, компилируй везде».

Сборка мусора/управление памятью

В C++ памятью нужно управлять вручную. Здесь нет автоматической сборки мусора.

Python же поддерживает автоматическую сборку мусора. Управление памятью в нем осуществляется автоматически.

Быстрое прототипирование

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

Недоступно для C++.

Область видимости переменных

Код в C++ разделяется с помощью фигурных скобок в циклах. Область видимости переменных ограничена этими блоками.

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

Типы

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

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

Функции

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

В C++ типы всех значений должны совпадать с тем, что передается. В Python таких ограничений нет.

Эффективность

Код на C++ сложнее поддерживать, поскольку он становится только сложнее с ростом размера приложений.

У Python же наоборот более чистый код и понятный синтаксис. Его поддерживать значительно легче.

Сложность синтаксиса

В C++ есть четкое разделение блоков с помощью фигурных скобок, а также точек с запятой. Таким образом этот код отлично организован.

В Python же нет ни скобок, ни точек с запятой. Там используются отступы.

Скорость выполнения

Программы на C++ работают быстрее. Именно поэтому этот язык используется в тех сферах, где скорость имеет значение, например, в играх.

Python же медленнее. Код на Python работает даже медленнее Java-приложений.

Производительность

C++ — статически типизируемый язык, поэтому при работе с программой возникает меньше ошибок. Такой код работает быстрее. Это делает C++ высокопроизводительным языком.

Python динамический, поэтому при работе с ним чаще происходят ошибки, а общая производительность ниже в сравнении с C++.

Простота и удобство в использовании

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

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

У Python в этом плане преимущество, особенности если говорить о приложениях для машинного обучения.

Преимущества и недостатки

Каждый из высокоуровневых языков вне зависимости от типа (компилируемый или интерпретируемый) обладает определенными свойствами. Это в значительной мере относится и к методу исполнения программ, написанных на том или ином диалекте. К достоинствам интерпретируемых языков относят:

  • Кроссплатформенность. Они могут работать с различными операционными системами на разных аппаратных платформах.
  • Динамическая типизация. Позволяет существенно упростить процесс создания программ, в которых используются переменные данные.
  • Возможность пошагового отслеживания выполняемых алгоритмов и изменения программ непосредственно по время их реализации.
  • Снижение трудозатрат на написание приложений и их последующую отладку.

Одним из основных недостатков интерпретируемых языков является относительно невысокая скорость выполнения написанных на них программ. По оценкам специалистов приложения на Python или PHP обрабатываются в отдельных случаях на два порядка медленнее, чем их аналоги на C++.

Преимущества и недостатки компилируемых и интерпретируемых языков

Языки высокого уровня, относящиеся к классу компилируемых, наряду с большой скоростью обработки имеют ряд иных преимуществ:

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

Языки компилируемого типа имеют и ряд недостатков:

  • Необходимость предварительного тестирования успешно скомпилированного приложения. Это требует дополнительных временных затрат и внимания со стороны программиста.
  • Исходный код, который скомпилированный для операционной системы Windows, не может быть запущен на Linux и наоборот. Для каждой ОС необходимо создавать отдельный исполняемый файл с использованием соответствующего служебного ПО.

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

Сравнение трансляторов Python

В качестве бенчмарка будет использоваться пакет PyStone, адаптация C-программы, которую сделал Гвидо ван Россум, создатель Python (сама C-программа была переводом Ада-программы). Я нашел версию бенчмарка от Кристофера Арндта, которая способна тестировать Python 3. Чтобы получить представление о базовой производительности, оценим производительность CPython (то есть стандартного Python) с PyStone.

$ python2 pystone.py 1000000
Pystone(1.1.1) time for 1000000 passes = 3.61152
This machine benchmarks at 276892 pystones/second

$ python3 pystone.py 1000000
Pystone(1.1.1) time for 1000000 passes = 4.07254
This machine benchmarks at 245547 pystones/second

Как видите, между производительностью теста в Python 2 и 3 есть существенная разница (чем больше Pystones в секунду, тем лучше). В следующих разбивках все компиляторы используют Python 3.

Компилируемые языки

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

Служебная программа-компилятор, образно говоря, обеспечивает перевод высокоуровневого языка на низкоуровневый и работает следующим образом:

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

Алгоритм работы программы-компиляции исходного кода в машинный

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

Перечень наиболее известных компилируемых языков программирования высокого уровня включает:

  • Ada, Algol (его обновленные версии Algol 60 и 68, а также SMALL).
  • BASIC и PureBasic.
  • C и его вариации C++, Objective-C.
  • COBOL, Delphi и Fortran.
  • Pascal и Turbo Pascal.
  • Visual Basic в шести версиях.
  • ML и Standard ML.

Перечень языков, исходный код которых нужно компилировать в машинный, этим не ограничивается. Список можно дополнить менее популярными: Sather, Common Lisp, Swift, CLEO, LabVIEW, Ocaml, Haskell, Eiffel, Ubercode, Go, JOVIAL, Lush, Alice, Rust, Visual Foxpro и Visual Prolog.

Компиляция программы в байт-код

Помимо названных существуют три группы высокоуровневых языки программирования, которые компилируются в байт-код:

  1. Java (Scala, Kotlin, Groovy, Clojure, Jython).
  2. Технология .NET (C#, Visual Basic, F#, Cobra).
  3. Erlang.

Помимо традиционных программ-компиляторов используется еще один их тип – транспайлеры (transpiler). Они предназначены для перевода исходного кода, написанного на Emscripten , kPHP, Closure Compiler, coffeescript, Dart, Haxe, TypeScript или Coccinelle, на другие высокоуровневые языки программирования типа ActionScript , C++, Lua либо Python. Транспайлеры также используются для перевода старого исходного кода на более новые версии, а также в совместимые с программными интерфейсами API. При этом происходит нарушение принципа обратной совместимости.

Алгоритм работы программы-транспилятора

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

Cx_Freeze

Cx_freeze — это набор скриптов и модулей для «замораживания» скриптов Python в исполняемые файлы. Установить cx_Freeze можно с помощью PIP3:

sudo pip3 install cx_Freeze --upgrade
$ cxfreeze pystone.py -O -s --target-dir dist
Missing modules:
? __main__ imported from bdb, pdb
? _dummy_threading imported from dummy_threading
? _frozen_importlib imported from importlib, importlib.abc
? _frozen_importlib_external imported from importlib, importlib._bootstrap, importlib.abc
? _winapi imported from subprocess
? _winreg imported from platform
? java.lang imported from platform
? msvcrt imported from subprocess
? nt imported from ntpath, os, shutil
? org.python.core imported from copy, pickle
? os.path imported from os, pkgutil, py_compile, tracemalloc, unittest, unittest.util
? vms_lib imported from platform
? winreg imported from mimetypes, platform
This is not necessarily a problem - the modules may not be needed on this platform.

Copying data from package collections...
Copying data from package email...
Copying data from package encodings...
Copying data from package html...
Copying data from package http...
Copying data from package importlib...
Copying data from package logging...
Copying data from package pydoc_data...
Copying data from package unittest...
Copying data from package urllib...
Copying data from package xml...

$ dist/pystone 1000000
Pystone(1.1.1) time for 1000000 passes = 5.35072
This machine benchmarks at 186891 pystones/second

Как можно видеть, производительность даже ниже, чем у стандартного интерпретатора CPython. Данное решение разумно использовать только для упаковки всего Python-окружения в независимый исполняемый пакет. Стоит отметить, что для этой цели можно использовать и Pyinstaller.

Преимущества

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

  • независимость от платформы (например, байтовый код Java)
  • отражение и рефлексивное использование оценщика (например, функция eval первого порядка )
  • динамическая типизация
  • меньший размер исполняемой программы (поскольку реализации имеют возможность выбирать код инструкции)

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

Точные науки

В математике и других точных науках всегда подразумевается некоторая интерпретация. Любая математическая теория опирается на вещи, которые с самого начала не нуждаются в объяснениях или доказательствах. Простейшим примером такой логической структуры служит Эвклидова геометрия, которая всю свою базу теорем основывает на нескольких аксиомах. Каждая следующая теорема опирается на предыдущую. Такая лестница наглядно показывает интерпретацию теоретических построений, свойственных современной науке вообще. Простота открытий позднего Ренессанса ушла в прошлое – с 19 века любое математическое открытие начиналось с какого-либо допущения, не требующего доказательств. Так возникла геометрия Лобачевского и Римана. Сейчас интепретация — принцип работы прикладной математики, которая, действуя на оговоренных началах, способна решать задачи очень высокого порядка.

Советы при использовании комментариев Python:

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

Иногда люди думают, что они единственные, кто будет читать код, так зачем же утруждать себя написанием комментария, но они не понимают, что только облегчат себе жизнь. Например, некоторые разработчики используют комментарии, используя их как href=”https://en.wikipedia.org/wiki/Pseudocode”>псевдокод и следить за тем, что осталось в программе. href=”https://en.wikipedia.org/wiki/Pseudocode”>псевдокод и следить за тем, что осталось в программе.

Почему? На этот вопрос следует ответить комментарием, а не что или как.

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

Давайте рассмотрим пример того, как комментарии могут быть полезны при отладке или поиске ошибок в коде.

Здесь программа выдаст ошибку. И чтобы проверить ошибку, мы могли бы поместить комментарии к операторам if один за другим, а затем мы узнали бы, что ошибка вызвана a/b as и эта операция невозможна, и мы могли бы внести изменения в код в соответствии с этим.

Где комментировать:

Некоторые программисты всегда задают этот вопрос – куда девать комментарии? Ответ на этот вопрос заключается в том, чтобы поместить комментарии Python в следующие три места: –

  1. Комментарий заголовка– В нем должно быть указано имя создателя и цель программы.
  2. Python Function Comment: Этот комментарий должен описывать функцию и ее роль в программе.
  3. Встроенные комментарии: Когда мы используем нестандартную логику или концепцию, мы можем поместить комментарии так, чтобы потом их не забыть.

Ярлык для комментирования определенного фрагмента кода:

В некоторых Python IDE, таких как Jupyter Notebook и Pycharm, мы можем использовать ” Ctrl +/” для комментирования определенного фрагмента кода.

Приложения [ править ]

  • Интерпретаторы часто используются для выполнения командных языков и склеивания языков, поскольку каждый оператор, выполняемый на командном языке, обычно является вызовом сложной процедуры, такой как редактор или компилятор. [ необходима цитата ]
  • Самомодифицирующийся код можно легко реализовать на интерпретируемом языке. Это относится к истокам интерпретации в Lisp и исследованиях искусственного интеллекта . [ необходима цитата ]
  • Виртуализация . Машинный код, предназначенный для аппаратной архитектуры, можно запускать с помощью виртуальной машины . Это часто используется, когда предполагаемая архитектура недоступна, или, среди прочего, для запуска нескольких копий.
  • Песочница : хотя некоторые типы песочниц полагаются на защиту операционной системы, часто используется интерпретатор или виртуальная машина. Фактическая архитектура оборудования и изначально предполагаемая архитектура оборудования могут совпадать, а могут и не совпадать. Это может показаться бессмысленным, за исключением того, что песочницы не обязаны фактически выполнять все инструкции исходного кода, которые они обрабатывают. В частности, он может отказаться выполнять код, нарушающий любые ограничения безопасности, с которыми он работает. [ необходима цитата ]
  • Эмуляторы для запуска компьютерного программного обеспечения, написанного для устаревшего и недоступного оборудования на более современном оборудовании.

Skulpt — полностью браузерная реализация Python

Написанный на JavaScript и доступный по лицензии MIT, Skulpt предлагает настоящую среду, в которой скомпилированный код выполняется в форме JS.

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

Особенности Python

  • Понятный синтаксис и простой в изучении
  • Легко масштабируемый
  • Бесплатный, с открытым исходным кодом и кроссплатформенный
  • Объектно-ориентированный с высоким уровнем надежности и отличной читаемостью
  • Может использоваться для прототипирования и тестирования, чтобы позже переходить к разработке на других высокоуровневых языках
  • Предлагается с крупной библиотекой, включающей XML-парсеры и многое другое

Теперь посмотрим на основные отличия:

Параметр C++ Python
Компиляция Компилируемый Интерпретируемый
Простота в использовании Писать код непросто Легко писать код
Статическая/динамическая типизация Статически типизируемый Динамически типизируемый
Портативность Не портативный Портативный
Сборка мусора Не поддерживает сборку мусора Поддерживает сборку мусора
Установка Простая установка Сложный в установке
Типы Типы данных проверяются при компиляции Привязывается к значениям, проверяемым во время работы программы
Область видимости переменных Ограничены в пределах блоков и циклов Доступны вне циклов или блоков
Быстрое прототипирование Невозможно Возможно
Функции Ограничены по типу параметров и возвращаемому типу Нет ограничений по типу параметров и возвращаемому типу
Эффективность Сложно поддерживать Легко поддерживать
Сложность синтаксиса Использует блоки и точки с запятой Нет блоков и точек с запятой (используются отступы)
Скорость выполнения Быстрый Медленный
Производительность Высокая производительность Низкая производительность
Популярность Более популярный во встроенных и энтерпрайз-системах Наиболее популярен в машинном обучении
Простота и удобство использования Сложен в изучении и используется в низкоуровневых приложениях Простой, используется в машинном обучении и веб-приложениях

Интерпретируемые языки

В основу рассматриваемой классификации положен метод исполнения приложения процессором компьютера или мобильного устройства. Интерпретируемый язык программирования – это высокоуровневый язык с последовательной обработкой операторов и данных CPU. Специальная программа транслирует каждую логическую строчку исходного кода по отдельности.

Интерпретируемые языки программирования

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

Поначалу алгоритм работу интерпретаторов высокоуровневых языков программирования выглядел так:

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

Алгоритм работы интерпретатора высокоуровневого языка на этапе отладки программы

Современные программы-интерпретаторы используют другие более совершенные алгоритмы работы:

  • В большинстве случае современные высокоуровневые языки преобразуются в промежуточное представление, это может быть шитый или байт-код.
  • По сути это комбинация команд, обеспечивающая использование операторов кода более низкого уровня. Они представляют собой небольшие по объему фрагменты, соответствующие одной или нескольким командам виртуальной машина или Assembler.
  • Эти инструкции обрабатываются интерпретатором и исполняются компьютерным процессором.

Описанная схема применяется при работе наиболее распространенных языков программирования: Java, Python и Ruby. В последнем варианте исходный текст преобразуется в форму абстрактной синтаксической древовидной структуры. Такой подход позволяет оптимизировать процесс генерации кода на этапе промежуточного (внутреннего) представления между деревом разбора и формированием структуры данных.

Среди интерпретируемых высокоуровневых языков наибольшее распространение получили следующие:

  • APL (J), BASIC, Forth, Lisp, Python, Excel, Logo Perl, Visual Basic for Applications и PHP.
  • Скриптовые: JavaScript, Madness Script, VBScript, PostScript и F-Script.
  • Системы решения математических уравнений: Mathematica, GNU Octave, TK Solver, Interactive Data Language (IDL) и MATLAB.
  • Группа объектно-ориентированных языков: Smalltalk в версиях Dolphin и Little, а также VisualAge и VisualWorks.

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

Заключение

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

В этом уроке вы узнали:

  • Что такое PyPy;
  • Как установить PyPy и запустить с ним свой скрипт;
  • Как PyPy сравнивается с CPython с точки зрения скорости;
  • Какие функции имеет PyPy и как он повышает скорость ваших программ;
  • Какие ограничения PyPy могут сделать его непригодным для некоторых случаев.

Если вашему скрипту Python нужно немного увеличить скорость, попробуйте PyPy. В зависимости от сложности вашей программы, вы можете получить заметное улучшение скорости!

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: