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