compiler-construction - Как был написан первый компилятор?




3 Answers

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

Первые программы были выполнены именно таким образом - рукописные коды операций.

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

Первые сборщики были написаны вручную. Затем эти ассемблеры могут быть использованы для сборки более сложных сборщиков, которые затем могут использоваться для сборки компиляторов, написанных для языков более высокого уровня, и так далее. Этот процесс итеративного написания инструментов для упрощения создания следующего набора инструментов называется (как упоминал Давид Рабинович в его ответе), bootstrapping .

Я слышал о цыпленке и яйце и самонакладке. У меня есть несколько вопросов.

Что написал первый компилятор, который что-то преобразовал в двоичные инструкции?

Является сборкой, скомпилированной или переведенной в двоичные инструкции?

... Мне было бы трудно поверить, что они пишут компилятор в двоичном формате.




Яйца долгое время предшествовали кур. Ответ на большинство проблем «курица и яйцо» - одно и то же: эволюция. У некоторых людей также есть проблемы с верой в биологическую эволюцию, но недоверие не является аргументом (google argumentum ad ignorantiam).

Чтобы прямо ответить на ваш вопрос: первый компилятор был написан (человеком) на языке ассемблера - программа, называемая ассемблером, переведет язык ассемблера в двоичный; это гораздо более простой процесс, чем компиляция, потому что язык ассемблера - это просто символическая форма машинного языка, которая использует имена опкодов вместо чисел, представляет адреса с символами и т. д. Многие последующие компиляторы также были написаны на ассемблере. Но первый компилятор C был модифицированным компилятором B, который был написан на B Первый компилятор B был написан в TMG . Компилятор TMG, используемый для компиляции компилятора B, был написан на языке ассемблера PDP-7.




Что написал первый компилятор, который что-то преобразовал в двоичные инструкции?

Человек сделал это. Читайте о системе A-0 системы A-0 :

В 1952 году Грейс закончила свой первый компилятор для Sperry, известный как A-0. Система A-0 была набором инструкций, которые могли бы превращать символический математический код в машинный язык. В производстве A-0 она взяла все подпрограммы, которые она собирала на протяжении многих лет, и наклеила их на пленку. Каждой подпрограмме присваивался номер вызова, так что машина могла найти ее на ленте. «Все, что мне нужно было сделать, это записать набор номеров вызовов, позволить компьютеру найти их на ленте, принести их и сделать дополнения. Это был первый компилятор», как описано Грейс.




Related