Программа, которая получает исходный код Delphi, а затем преобразует его в код Objective-C, является компилятором?Или преобразователь исходного кода? - PullRequest
1 голос
/ 18 октября 2010

Я получил этот аргумент на работе.Мой коллега сказал, что компилятором является то, что генерирует машинный код.Затем (после того как я упомянул Google Closure Compiler) он передумал: по-видимому, для него компилятор - это то, что генерирует оптимизированный исходный код на любом языке (что не имеет смысла, поскольку оптимизациянеобязательный шаг для компилятора.) По его словам, программа, которая генерирует, например, код Objective-C, является исходным преобразователем, а не компилятором.

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

Итак, что такое компилятор?

1 Ответ

0 голосов
/ 18 октября 2010

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

Определение, которое мы используем, состоит в том, что, когда вы «преобразуете» из одного языка в тот же самый язык, вы создаете оптимизатор . «Закрывающий компилятор» с этой точки зрения назван неправильно.

Когда вы переходите с одного языка на другой, и понятия, используемые в обоих переводах, находятся примерно на одном уровне (операторы присваивания, if-then-else, явные процедуры и т. Д., Типичные для большинства языков), вы выполнение перевода (например, с COBOL на Java).

Когда вы переходите с одного языка на другой, но генерируете языковые конструкции более низкого уровня на целевом конце (например, PASCAL для машинных инструкций, APL [матричный язык] для скалярного кода C), вы компилируете .

Границы между ними не всегда четкие. Если вы преобразуете из матричных операций APL в скалярные операции APL, вы переходите с одного и того же языка на другой, следовательно, «оптимизация», но также и с понятий высокого уровня на более низкий уровень, то есть «компиляцию». С моей точки зрения, уровень изменения абстракции превосходит цель-же-langauge-target, поэтому я бы назвал APL-матрицу для APL-скаляров «компиляцией».

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

Наш движок делает все это, как вы бы назвали преобразование исходного кода .

...