тип выходного кода из компилятора - PullRequest
1 голос
/ 15 октября 2010

когда компилятор компилирует язык высокого уровня в целевой язык, который является исполняемым, в какой форме находится целевой язык?

Это язык более низкого уровня, такой как машинный код?Или компилятор просто переводит его в функции ОС из API ОС, и ОС выполняет всю работу под капотом?

Ответы [ 2 ]

2 голосов
/ 15 октября 2010

Компиляторы могут иметь несколько различных выходов:

  1. Машинный код, который запускается непосредственно на компьютере
  2. Промежуточный код, который транслируется в машинный код на лету, и
  3. Исходный код для ассемблера

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

1 голос
/ 15 октября 2010

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

Компилятор может компилировать из языка высокого уровня в другой язык высокого уровня (например, GWT, который компилирует Java в ECMAScript), из языка высокого уровня в язык низкого уровня (например, Gambit, который компилирует Scheme в C), от языка высокого уровня до машинного кода (например, GCJ, который компилирует Java в нативный код), от языка низкого уровня до языка высокого уровня (например, Clue, который компилирует C в Java, Lua, Perl, ECMAScript и Common Lisp), от низкоуровневого языка к другому низкоуровневому языку (например, Android SDK, который компилирует байт-код JVML в байт-код Dalvik), от низкоуровневого языка до машинного кода (например, компилятор C1X, который является частью HotSpot, который компилирует байт-код JVML в машинный код, машинный код в язык высокого уровня (любой так называемый «декомпилятор»), машинный код в язык низкого уровня (например, JIT-компилятор в JPC, который компилирует собственный код x86 в байт-код JVML) и нативный код в нативный код (например, JIT-компилятор в PearPC, который компилирует нативный код PowerPC для собственный код x86).

...