stringtranslate.com

Реализация языка программирования

В программировании , реализация языка программирования представляет собой систему для выполнения компьютерных программ . Существует два общих подхода к реализации языка программирования: [1]

Устный переводчик

Интерпретатор состоит из двух частей: парсера и оценщика . После того, как программа прочитана как входные данные интерпретатором, она обрабатывается парсером. Парсер разбивает программу на языковые компоненты , чтобы сформировать дерево синтаксического анализа . Затем оценщик использует дерево синтаксического анализа для выполнения программы. [3]

Виртуальная машина

Виртуальная машина — это особый тип интерпретатора, который интерпретирует байт-код. [2] Байт-код — это переносимый низкоуровневый код, похожий на машинный код, хотя он обычно выполняется на виртуальной машине, а не на физической. [4] Для повышения эффективности многие языки программирования, такие как Java , [4] Python , [5] и C# [6], компилируются в байт-код перед интерпретацией.

Компилятор «точно в срок»

Некоторые виртуальные машины включают в себя компилятор just-in-time (JIT) для повышения эффективности выполнения байт-кода. Если во время выполнения байт-кода виртуальной машиной JIT-компилятор определяет, что часть байт-кода будет использоваться повторно, он компилирует эту конкретную часть в машинный код. Затем JIT-компилятор сохраняет машинный код в памяти , чтобы его могла использовать виртуальная машина. JIT-компиляторы пытаются найти баланс между более длительным временем компиляции и более быстрым временем выполнения. [2]

Компилятор

Компилятор переводит программу, написанную на одном языке, на другой язык. Большинство компиляторов организованы в три этапа: front end , an optimizer и back end . Front end отвечает за понимание программы. Он проверяет, что программа является допустимой, и преобразует ее в промежуточное представление , структуру данных, используемую компилятором для представления программы. Оптимизатор улучшает промежуточное представление, чтобы увеличить скорость или уменьшить размер исполняемого файла , который в конечном итоге создается компилятором. Back end преобразует оптимизированное промежуточное представление в выходной язык компилятора. [7]

Если компилятор данного языка высокого уровня создает другой язык высокого уровня, он называется транспилятором . Транспиляторы могут использоваться для расширения существующих языков или для упрощения разработки компиляторов путем использования переносимых и хорошо оптимизированных реализаций других языков (например, C ). [2]

Возможны многие комбинации интерпретации и компиляции, и многие современные реализации языков программирования включают элементы обоих. Например, язык программирования Smalltalk традиционно реализуется путем компиляции в байт-код , который затем либо интерпретируется, либо компилируется виртуальной машиной . Поскольку байт-код Smalltalk выполняется на виртуальной машине, он переносим на различные аппаратные платформы. [8]

Множественные реализации

Языки программирования могут иметь несколько реализаций. Различные реализации могут быть написаны на разных языках и могут использовать разные методы для компиляции или интерпретации кода. Например, реализации Python включают: [9]

Ссылки

  1. ^ Ранта, Аарне (6 февраля 2012 г.). Реализация языков программирования (PDF) . College Publications. стр. 16–18. ISBN 9781848900646. Архивировано (PDF) из оригинала 7 ноября 2020 г. . Получено 22 марта 2020 г. .
  2. ^ abcde Бейкер, Грег. "Реализации языка". Computing Science - Simon Fraser University . Архивировано из оригинала 8 марта 2019 г. Получено 22 марта 2020 г.
  3. ^ Эванс, Дэвид (19 августа 2011 г.). Введение в вычисления (PDF) . Университет Вирджинии. стр. 211. Получено 22 марта 2020 г.
  4. ^ ab Sridhar, Jay (29 августа 2017 г.). «Почему виртуальная машина Java помогает вашему коду работать лучше». MakeUseOf . Получено 22 марта 2020 г. .
  5. ^ Беннетт, Джеймс (23 апреля 2018 г.). «Введение в байт-код Python». Opensource.com . Получено 22 марта 2020 г. .
  6. ^ Али, Мирза Фаррух (12 октября 2017 г.). "Common Language Runtime(CLR) DotNet". Medium . Получено 22 марта 2020 г. .
  7. ^ Купер, Кит; Торцон, Линда (7 февраля 2011 г.). Engineering a Compiler (2-е изд.). Morgan Kaufmann. стр. 6-9. ISBN 9780120884780.
  8. Льюис, Саймон (11 мая 1995 г.). Искусство и наука Smalltalk (PDF) . Prentice Hall. стр. 20–21. ISBN 9780133713459. Получено 23 марта 2020 г. .
  9. ^ "Альтернативные реализации Python". Python.org . Получено 23 марта 2020 г. .

Внешние ссылки