Реализация языка программирования - Programming language implementation
А реализация языка программирования это система для выполнения компьютерные программы. Есть два общих подхода к реализации языка программирования: интерпретация и сборник.[1]
Интерпретация - это метод выполнения программы. Программа читается как ввод устный переводчик, который выполняет действия, написанные в программе.[2]
Компиляция - это другой процесс, в котором компилятор читает в программе, но вместо того, чтобы запускать программу, компилятор переводит ее на другой язык, например байт-код или же Машинный код. Транслированный код может либо напрямую выполняться аппаратными средствами, либо служить входными данными для другого интерпретатора или другого компилятора.[2]
Устный переводчик
An устный переводчик состоит из двух частей: парсер и оценщик. После того, как программа считывается интерпретатором как ввод, она обрабатывается анализатором. Парсер разбивает программу на языковые компоненты сформировать дерево синтаксического анализа. Затем оценщик использует дерево синтаксического анализа для выполнения программы.[3]
Виртуальная машина
А виртуальная машина это специальный тип интерпретатора, который интерпретирует байт-код.[2] Байт-код - это портативный низкоуровневый код похож на машинный код, хотя обычно он выполняется на виртуальной машине, а не на физической.[4] Чтобы повысить их эффективность, многие языки программирования, такие как Ява,[4] Python,[5] и C #[6] компилируются в байт-код перед интерпретацией.
Оперативный компилятор
Некоторые виртуальные машины включают JIT-компилятор для повышения эффективности выполнения байт-кода. Пока байт-код выполняется виртуальной машиной, если JIT-компилятор определяет, что часть байт-кода будет использоваться повторно, он компилирует эту конкретную часть в машинный код. Затем JIT-компилятор сохраняет машинный код в объем памяти чтобы его можно было использовать на виртуальной машине. Компиляторы JIT пытаются найти баланс между более длительным временем компиляции и более быстрым временем выполнения.[2]
Компилятор
А компилятор переводит программу, написанную на одном языке, на другой язык. Большинство компиляторов разбиты на три этапа: внешний интерфейс, оптимизатор, а задняя часть. Внешний интерфейс отвечает за понимание программы. Он проверяет правильность программы и превращает ее в промежуточное представление, структура данных, используемая компилятором для представления программы. Оптимизатор улучшает промежуточное представление, чтобы увеличить скорость или уменьшить размер исполняемый файл который в конечном итоге создается компилятором. Серверная часть преобразует оптимизированное промежуточное представление в выходной язык компилятора.[7]
Если компилятор данного язык высокого уровня создает другой язык высокого уровня, он называется транспилятор. Транспилеры можно использовать для расширения существующих языков или для упрощения разработки компилятора за счет использования портативный и хорошо оптимизированные реализации других языков (например, C ).[2]
Возможны многие комбинации интерпретации и компиляции, и многие реализации современных языков программирования включают элементы обоих. Например, Болтовня язык программирования обычно реализуется путем компиляции в байт-код, который затем либо интерпретируется, либо компилируется виртуальная машина. Поскольку байт-код Smalltalk выполняется на виртуальной машине, его можно переносить на различные аппаратные платформы.[8]
Множественные реализации
Языки программирования могут иметь несколько реализаций. Различные реализации могут быть написаны на разных языках и могут использовать разные методы для компиляции или интерпретации кода. Например, реализации Python включают: [9]
- CPython, то эталонная реализация Python
- IronPython, реализация, ориентированная на .NET Framework (написано в C # )
- Jython, реализация, ориентированная на Виртуальная машина Java
- PyPy, реализация, предназначенная для скорости (написано на RPython )
Смотрите также
Рекомендации
- ^ Ранта, Аарне (9 мая 2012 г.). Реализация языков программирования (PDF). Публикации колледжа. С. 16–18. ISBN 9781848900646. Получено 22 марта 2020.
- ^ а б c d е Бейкер, Грег. «Реализации языка». Вычислительная техника - Университет Саймона Фрейзера. Получено 22 марта 2020.
- ^ Эванс, Дэвид (19 августа 2011 г.). Введение в вычисления (PDF). Университет Вирджинии. п. 211. Получено 22 марта 2020.
- ^ а б Шридхар, Джей. «Почему виртуальная машина Java помогает вашему коду работать лучше». MakeUseOf. Получено 22 марта 2020.
- ^ Беннетт, Джеймс. «Введение в байт-код Python». Opensource.com. Получено 22 марта 2020.
- ^ Али, Мирза Фаррух. "Общеязыковая среда выполнения (CLR) DotNet". Середина. Получено 22 марта 2020.
- ^ Купер, Кит; Торчон, Линда (7 февраля 2011 г.). Разработка компилятора (2-е изд.). Морган Кауфманн. стр.6 -9. ISBN 9780120884780.
- ^ Льюис, Саймон (11 мая 1995 г.). Искусство и наука Smalltalk (PDF). Прентис Холл. С. 20–21. ISBN 9780133713459. Получено 23 марта 2020.
- ^ «Альтернативные реализации Python». Python.org. Получено 23 марта 2020.
внешняя ссылка
- СМИ, связанные с Компиляция и компоновка в Wikimedia Commons