@ImagineWorld

На чём написаны интерпретаторы и компиляторы разных языков?

Может быть глупый вопрос, однако, на чём написаны интерпретаторы или компиляторы языков программирования, например JavaScript или С++? На каком языке? И чем "понимается" их код, где он хранится? То есть, я написал программу на JS, к примеру, она прочиталась интерпретатором и выполнилась, но что выполнило работу интепретатора?
  • Вопрос задан
  • 6745 просмотров
Пригласить эксперта
Ответы на вопрос 5
hottabxp
@hottabxp
Сначала мы жили бедно, а потом нас обокрали..
JavaScript - это язык программирования. Его невозможно написать, пишут компиляторы, интерпретаторы(в данном случае наверное движки). Основные движки js:
SpiderMonkey - первый в истории движок js(написан на C++)
V8 - написан на C++ и js
Rhino - написан на java.

но что выполнило работу интепретатора?
это очень большая тема, невозможно здесь дать ответ.
Читайте лучше хабр:
Как работает JS: о внутреннем устройстве V8 и опти...
Введение в компиляторы, интерпретаторы и JIT’ы
Интерпретаторы байт-кодов своими руками

А лучше напишите в google, например, - "habr как работает интерпретатор"
Ответ написан
bingo347
@bingo347
Crazy on performance...
Как уже сказали в других ответах, компиляторы и интерпретаторы пишут так же на языках программирования.
Насчет компиляторов так же считается, что зрелый язык позволяет написать собственный компилятор на себе самом. И для многих компилируемых языков компиляторы действительно написаны на них самих. Но тем не менее, самый первый компилятор все равно придется написать на другом языке, в современном мире для этого очень часто выбирают OCaml, хотя и другие языки вполне подойдут.
Интерпретируемые языки нуждаются в интерпретаторе, который пишется на компилируемых языках. Простор выбора тут огромен, но чаще все же встречается или C или C++.
Так же еще встречается JIT компиляция (js (не всегда), lua), при которой весь процесс компиляции происходит непосредственно перед выполнением, а так же гибридная AOT+JIT компиляция (C#, Java), когда исходный код компилируется в байткод при разработке (AOT), а перед исполнением байткод компилируется в машинный код (JIT), что позволяет получить плюсы от обоих типов компиляции. JIT компиляторы как и интерпретаторы как правило пишут на AOT-компилируемых языках.
Ну и надо не забывать, что почти у каждого языка бывает стандартная библиотека, которая может быть написана как на самом языке (C, C++, Go, Rust), на самом языке + на другом, чаще на C или C++ (js (не во всех движках), C#, Java, python (не уверен, что он не к следующему типу больше)), либо полностью на другом языке (php, python (?)). Тут все сильно зависит, на сколько в языке доступно низкоуровневое общение с ОС и железом, а так же на сколько это быстро можно выполнить не ломая "сахара" языка.
Ответ написан
Комментировать
Движок(интерпретатор) языка программирования тоже написан на языке программирования. Т.е. есть например интерпретатор js или php, и ты внутри php файла, вызываешь функцию strlen(). В это время, вызывается, описанная в системных файлах php, функция на языке C. В любом случае интерпретировать\компилировать все встроенные конструкции и функции языка, будут некий код на другом языке. Но для того, чтобы глубже понять, что есть компилятор\интерпретатор, а что есть ЯП(спецификация), вам стоит почитать проф. литературу статьи, возможно посмотреть видео на эту тему.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Исходный код программы выполняется с помощью передачи процессору инструкций на исполнение (машинный код), получаемых из байт-кода (объектный код).
Генерация от исходника до машинного кода может быть реализована как на том же самом языке программирования, что и листинг исполняемой программы, так и на любом другом.
Ответ написан
Комментировать
@forthuse
К, примеру, компиляторы Forth (Форт) написаны на них же (SPF4, Win32Forth),
но часто и в симбиозе с основным языком для получения более лёгкой кроссплатформенности на Си/С++ и др. (gForth, kForth, pForth ...)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы