Реализация языка программирования представляет собой систему для выполнения компьютерных программ . Существует два общих подхода к реализации языка программирования: интерпретация и компиляция . [1]
Интерпретация - это метод выполнения программы. Программа считывается как ввод интерпретатором , который выполняет действия, записанные в программе. [2]
Компиляция - это другой процесс, когда компилятор читает программу, но вместо того, чтобы запускать программу, компилятор переводит ее на какой-либо другой язык, такой как байт-код или машинный код . Транслированный код может либо напрямую выполняться аппаратными средствами, либо служить входными данными для другого интерпретатора или другого компилятора. [2]
Переводчик [ править ]
Переводчик состоит из двух частей: синтаксический анализатор и оценщик . После того, как программа считывается интерпретатором как ввод, она обрабатывается анализатором. Парсер разбивает программу на языковые компоненты, чтобы сформировать дерево синтаксического анализа . Затем оценщик использует дерево синтаксического анализа для выполнения программы. [3]
Виртуальная машина [ править ]
Виртуальная машина представляет собой особый тип переводчика , который интерпретирует байт - код. [2] Байт-код - это переносимый низкоуровневый код, похожий на машинный, хотя обычно он выполняется на виртуальной машине, а не на физической. [4] Для повышения эффективности многие языки программирования, такие как Java , [4] Python , [5] и C # [6] , перед интерпретацией компилируются в байт-код.
Оперативный компилятор [ править ]
Некоторые виртуальные машины включают JIT-компилятор для повышения эффективности выполнения байт-кода. Пока байт-код выполняется виртуальной машиной, если JIT-компилятор определяет, что часть байт-кода будет использоваться повторно, он компилирует эту конкретную часть в машинный код. Затем JIT-компилятор сохраняет машинный код в памяти, чтобы он мог использоваться виртуальной машиной. Компиляторы JIT пытаются найти баланс между более длительным временем компиляции и более быстрым временем выполнения. [2]
Компилятор [ править ]
Компилятор переводит программу , написанную на одном языке , на другой язык. Большинство компиляторов разбиты на три этапа: внешний интерфейс , оптимизатор и сервер . Внешний интерфейс отвечает за понимание программы. Он проверяет правильность программы и преобразует ее в промежуточное представление , структуру данных, используемую компилятором для представления программы. Оптимизатор улучшает промежуточное представление, чтобы увеличить скорость или уменьшить размер исполняемого файла, который в конечном итоге создается компилятором. Серверная часть преобразует оптимизированное промежуточное представление в выходной язык компилятора. [7]
Если компилятор данного языка высокого уровня создает другой язык высокого уровня, он называется транспилятором . Транспилеры можно использовать для расширения существующих языков или для упрощения разработки компиляторов за счет использования переносимых и хорошо оптимизированных реализаций других языков (например, C ). [2]
Возможны многие комбинации интерпретации и компиляции, и многие реализации современных языков программирования включают элементы обоих. Например, язык программирования Smalltalk обычно реализуется путем компиляции в байт-код , который затем либо интерпретируется, либо компилируется виртуальной машиной . Поскольку байт-код Smalltalk выполняется на виртуальной машине, его можно переносить на различные аппаратные платформы. [8]
Множественные реализации [ править ]
Языки программирования могут иметь несколько реализаций. Различные реализации могут быть написаны на разных языках и могут использовать разные методы для компиляции или интерпретации кода. Например, реализации Python включают: [9]
- CPython , эталонная реализация Python
- IronPython , реализация, ориентированная на .NET Framework (написана на C # )
- Jython , реализация, нацеленная на виртуальную машину Java
- PyPy , реализация, предназначенная для скорости (написана на RPython)
Ссылки [ править ]
- ^ Ranta, Аарне (9 мая 2012). Реализация языков программирования (PDF) . Публикации колледжа. С. 16–18. ISBN 9781848900646. Проверено 22 марта 2020 .
- ^ a b c d e Бейкер, Грег. «Реализации языка» . Вычислительная техника - Университет Саймона Фрейзера . Проверено 22 марта 2020 .
- ↑ Эванс, Дэвид (19 августа 2011 г.). Введение в вычисления (PDF) . Университет Вирджинии. п. 211 . Проверено 22 марта 2020 .
- ^ a b Шридхар, Джей. «Почему виртуальная машина 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 года .
Внешние ссылки [ править ]
- СМИ, связанные с компиляцией и компоновкой на Викискладе?