Реализация языка программирования - Programming language implementation
Реализация языка программирования представляет собой систему для выполнения компьютерных программ . Существует два общих подхода к реализации языка программирования: интерпретация и компиляция .
Интерпретация - это метод выполнения программы. Программа считывается как ввод интерпретатором , который выполняет действия, записанные в программе.
Компиляция - это другой процесс, когда компилятор читает программу, но вместо того, чтобы запускать программу, компилятор переводит ее на какой-либо другой язык, такой как байт-код или машинный код . Транслированный код может либо напрямую выполняться аппаратными средствами, либо служить входными данными для другого интерпретатора или другого компилятора.
Устный переводчик
Переводчик состоит из двух частей: синтаксический анализатор и оценщик . После того, как программа считывается интерпретатором как ввод, она обрабатывается анализатором. Парсер разбивает программу на языковые компоненты, чтобы сформировать дерево синтаксического анализа . Затем оценщик использует дерево синтаксического анализа для выполнения программы.
Виртуальная машина
Виртуальная машина представляет собой особый тип переводчика , который интерпретирует байт - код. Байт-код - это переносимый низкоуровневый код, похожий на машинный, хотя обычно он выполняется на виртуальной машине, а не на физической. Для повышения эффективности многие языки программирования, такие как Java , Python и C # , перед интерпретацией компилируются в байт-код.
Оперативный компилятор
Некоторые виртуальные машины включают JIT-компилятор для повышения эффективности выполнения байт-кода. Пока байт-код выполняется виртуальной машиной, если JIT-компилятор определяет, что часть байт-кода будет использоваться повторно, он компилирует эту конкретную часть в машинный код. Затем JIT-компилятор сохраняет машинный код в памяти, чтобы он мог использоваться виртуальной машиной. Компиляторы JIT пытаются найти баланс между более длительным временем компиляции и более быстрым временем выполнения.
Компилятор
Компилятор переводит программу , написанную на одном языке , на другой язык. Большинство компиляторов разбиты на три этапа: внешний интерфейс , оптимизатор и сервер . Внешний интерфейс отвечает за понимание программы. Он проверяет правильность программы и преобразует ее в промежуточное представление , структуру данных, используемую компилятором для представления программы. Оптимизатор улучшает промежуточное представление, чтобы увеличить скорость или уменьшить размер исполняемого файла, который в конечном итоге создается компилятором. Серверная часть преобразует оптимизированное промежуточное представление в выходной язык компилятора.
Если компилятор данного языка высокого уровня создает другой язык высокого уровня, он называется транспилятором . Транспилеры можно использовать для расширения существующих языков или для упрощения разработки компиляторов за счет использования переносимых и хорошо оптимизированных реализаций других языков (например, C ).
Возможны многие комбинации интерпретации и компиляции, и многие реализации современных языков программирования включают элементы обоих. Например, язык программирования Smalltalk обычно реализуется путем компиляции в байт-код , который затем либо интерпретируется, либо компилируется виртуальной машиной . Поскольку байт-код Smalltalk выполняется на виртуальной машине, его можно переносить на различные аппаратные платформы.
Множественные реализации
Языки программирования могут иметь несколько реализаций. Различные реализации могут быть написаны на разных языках и могут использовать разные методы для компиляции или интерпретации кода. Например, реализации Python включают:
- CPython , эталонная реализация Python
- IronPython , реализация, ориентированная на .NET Framework (написана на C # )
- Jython , реализация, нацеленная на виртуальную машину Java
- PyPy , реализация, предназначенная для скорости (написана на RPython)
использованная литература
внешние ссылки
- СМИ, связанные с компиляцией и компоновкой на Викискладе?