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

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

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

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

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

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

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

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

Оперативный компилятор

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

Компилятор

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

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

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

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

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

использованная литература

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