У каких языков нет ни интерпретатора, ни компилятора? - PullRequest
3 голосов
/ 13 июля 2010

Примечание: я не имею в виду некоторый теоретический вопрос, который не имеет никакой реализации, только языки, которые не имеют обоих !!!!!


В наши дни существует интерпретатор ac / c ++(cint) и компилятор python (в байт-код python).

Я понимаю, что самое простое определение заключается в том, что компилятор просто преобразует код из языка a в язык b, и тогда у вас есть машина, которая выполняет b вместе с ней.с вводом, в то время как интерпретатор - это просто то, что берет ввод плюс код на языке a и запускает его.И что, используя эти определения, если что-то имеет интерпретатор или компилятор, довольно просто получить другое, немедленно запустив вывод компилятора или встроив компилятор с исходным кодом, чтобы получить интерпретатор.

Так что игнорируя этиВ каких языках нет и компилятора (который компилирует исходный код на языках A-B, предпочтительно промежуточного языка) и интерпретатора, который запускает большие куски кода без их компиляции?

Ответы [ 11 ]

9 голосов
/ 13 июля 2010

Существует несколько эзотерических языков , в которых нет ни компилятора, ни интерпретатора, так как они были разработаны просто как интеллектуальные упражнения и ждут, когда кто-то действительно их реализует.

6 голосов
/ 06 сентября 2010

латынь и арамейский. Два мертвых языка с переводчиками, но не хватает живых носителей, чтобы гарантировать переводчиков. Вы можете добавить клингон, но я подозреваю, что на самом деле для этого сейчас есть переводчики.

5 голосов
/ 13 июля 2010

Как на счет переводчиков? Пример: практически любая машинная сборка. Ассемблер просто translates кодирует коды операций машины.

3 голосов
/ 07 сентября 2010

Если под интерпретатором вы подразумеваете инструмент, который выполняет часть кода в интерактивном режиме, затем языки описания аппаратного обеспечения (VHDL, Verilog, ...) Я думаю, что нет их. В основном люди моделируют описания VHDL и Verilog как монолиты, чтобы проверить чистый (гм) эффект. Verilog и VHDL скомпилированы в конечном итоге в ворота (для FPGA) и транзисторные схемы для реализации в виде микросхем.

Точно так же я не думаю, что вы найдете много интерактивных языков для решения ограничений. Подобно языкам проектирования оборудования, программы с ограничениями в основном выполняются как монолиты, потому что частичное ограничение даст слишком много ответов. Языки решателя ограничений часто компилируются в представление более низкого уровня который «обрабатывается» больше, чем интерпретируется распространяющимися ограничениями на основе зависимостей.

Как правило, ни один из них не производит "машинные инструкции".

2 голосов
/ 03 сентября 2010

В релейном языке для программируемых логических контроллеров (ПЛК) нет компилятора или интерпретатора. Лестницы преобразуются в логические условия для управления входами, выходами и состояниями памяти. Лестницы оцениваются тысячи раз в секунду для фактического запуска кода на оборудовании.

Удачи!

Ссылка: Программируемый логический контроллер в Википедии

2 голосов
/ 13 июля 2010
  Compiler vs. Interpreter

Интерпретатор переводит некоторую форму исходного кода в целевое представление, которое он может немедленно выполнить и оценить.Структура интерпретатора аналогична структуре компилятора, но количество времени, необходимое для создания исполняемого представления, будет зависеть от степени оптимизации.Следующая диаграмма показывает одно представление различий.Графические характеристики компилятора:

* spends a lot of time analyzing and processing the program
* the resulting executable is some form of machine- specific binary code
* the computer hardware interprets (executes) the resulting code
* program execution is fast

Характеристики интерпретатора:

* relatively little time is spent analyzing and processing the program
* the resulting code is some sort of intermediate code
* the resulting code is interpreted by another program
* program execution is relatively slow

альтернативный текст http://web.cs.wpi.edu/~gpollice/cs544-f05/CourseNotes/maps/Class1/NotesImages/Topic42NotesImage1.jpg

1 голос
/ 03 сентября 2010

Итак, я предваряю это утверждением: любой язык, имеющий фиксированную семантику, которая может выражать вычислимые функции, реализуем.Я хеджирую свои ставки здесь, не говоря конкретно о том, что я имею в виду под «семантикой», но я обычно имею в виду что-то, что является либо операционной семантикой (большой или малый шаг), денотационной семантикой, либо аксиоматической семантикой.

Итак, с этим не уйдут два вопроса: существуют ли языки, которые вообще не имеют никакой семантики (и поэтому не могут быть реализованы каким-либо обычным способом), или есть языки, которые не имеютреализован, несмотря на то, что это возможно?

Последний случай, очевидно, верен, но не очень интересен.То, что люди придумывают язык, не означает, что это хорошая идея.Я мог бы думать о языке прямо сейчас, и у него не было бы компилятора или интерпретатора.Не очень интересно.

Первый случай немного интереснее.Существуют языки, которые на самом деле являются логикой и (через соответствие Карри-Ховарда ) доказательствами в этих логиках также являются программы (и наоборот).Если логика не разрешима, или если язык включает в себя какие-то конструкции более высокого порядка, которые не сильно нормализуются (например, некоторая очень выразительная система типов), то компиляция или интерпретация становится немного пугающим делом.Это может начать граничить с территорией «не компилирования или интерпретации», но это немного ложное утверждение, потому что, если мы можем заставить компьютер манипулировать этими символами, мы можем написать интерпретатор.Точно так же, если у него нет семантики, то, вероятно, он не работает с вычислимыми функциями - это, вероятно, просто какой-то естественный язык на тот момент, уже не «язык программирования».

Это особенно верно, потому что мы можемутверждают, что тезис Черч-Тьюринга говорит о том, что всегда можно написать интерпретатор для языка, полного по Тьюрингу, даже если этот интерпретатор окажется еще одной машиной Тьюринга.

Я вижунекоторые другие ответы сделали заявления о машинном языке.В машинном языке нет ничего волшебного, кроме того, что он имеет очень компактное представление.Можно было бы очень легко написать интерпретатор для него, и многие существуют (например, различные виртуальные машины, которые точно реализуют семантику исполнения аппаратного процессора в программном обеспечении).

Языки, которые соответствуют вашим критериям, скорее всего, будуткоторые не имеют семантики выполнения, т.е. они не выражают вычислимые функции.Вот пара языков с фиксированной семантикой, о которых я знаю, которые не могут напрямую выполняться ни интерпретатором, ни путем компиляции их во что-либо еще без обогащения этих программ дополнительной информацией :

0 голосов
/ 07 сентября 2010

HTML - это язык, но язык разметки. Я не знаю, как браузеры действительно их анализируют, но я предполагаю, что они интерпретируют их построчно, создавая DOM и элементы рендеринга и т. Д.

Естественные языки, такие как английский, имеют большую и постоянно растущую грамматику и не всегда выражаются в формальной нотации (такой как BNF), если вы не используете точную и точную форму. Я думаю.

Поэтому я говорю, что вы не можете создать переводчик для английского и многих естественных языков, основываясь на том факте, что он постоянно развивается - посмотрите на chatspeak и даже даже текстовые.

Я не думаю, что у всех языков может быть компилятор, основанный на этом.

0 голосов
/ 13 июля 2010

Один из моих одноклассников может написать полный микрофон в программу динамика на APPLE ][, набрав все шестнадцатеричные коды после CALL -151. Таким образом, ответ, вероятно, может быть: машинный код.

0 голосов
/ 13 июля 2010

У некоторых небольших машинных кодов RISC их тоже нет, так как все, что они делают, это толкают биты. Там нет никакой интерпретации, так как нет никакого возможного более низкого уровня, чтобы запустить его, и нет никакой компиляции, так как это уже 0 и 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...