Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Реализация языка программирования представляет собой систему для выполнения компьютерных программ . Существует два общих подхода к реализации языка программирования: интерпретация и компиляция . [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)

Ссылки [ править ]

  1. ^ Ranta, Аарне (9 мая 2012). Реализация языков программирования (PDF) . Публикации колледжа. С. 16–18. ISBN 9781848900646. Проверено 22 марта 2020 .
  2. ^ a b c d e Бейкер, Грег. «Реализации языка» . Вычислительная техника - Университет Саймона Фрейзера . Проверено 22 марта 2020 .
  3. Эванс, Дэвид (19 августа 2011 г.). Введение в вычисления (PDF) . Университет Вирджинии. п. 211 . Проверено 22 марта 2020 .
  4. ^ a b Шридхар, Джей. «Почему виртуальная машина Java помогает вашему коду работать лучше» . MakeUseOf . Проверено 22 марта 2020 .
  5. ^ Беннетт, Джеймс. «Введение в байт-код Python» . Opensource.com . Проверено 22 марта 2020 .
  6. ^ Али, Мирза Фаррух. «Общеязыковая среда выполнения (CLR) DotNet» . Средний . Проверено 22 марта 2020 .
  7. ^ Купер, Кейт; Торчон, Линда (7 февраля 2011 г.). Разработка компилятора (2-е изд.). Морган Кауфманн. стр.  6 -9. ISBN 9780120884780.
  8. Льюис, Саймон (11 мая 1995 г.). Искусство и наука Smalltalk (PDF) . Прентис Холл. С. 20–21. ISBN  9780133713459. Проверено 23 марта 2020 года .
  9. ^ «Альтернативные реализации Python» . Python.org . Проверено 23 марта 2020 года .

Внешние ссылки [ править ]

  • СМИ, связанные с компиляцией и компоновкой на Викискладе?