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

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

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

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

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

6 ответов


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

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

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

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


пожалуйста, читайте о загрузчик компилятор и история написания компилятора

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


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

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


ВОЗ сказал в одном из своих публичных выступлений, что, когда он начал, он не мог позволить компилятору, чтобы он компилируется в двоичный вручную на бумаге. Если вы хотите увидеть что-то еще более дикое, прочитайте об условиях, при которых

Что касается "написания компьютера в двоичном формате" - сделайте шаг назад от программиста и подумайте о том, какими были ранние компьютеры. Вещи высокого уровня еще не существовали ... думал обо всем на низком уровне, потому что это все было. У вас было оборудование, которое могло выполнять основную логику и арифметику, которыми вы управляете с помощью машинного кода (который просто скомпилирован сборкой-Amber объясняет, почему эту часть не сложно сделать вручную), и вы хотели, чтобы это оборудование выполняло определенные математические подвиги. Вы не беспокоились о несуществующей операционной системе, вы просто сказали аппаратному обеспечению (в сборке), как манипулировать номерами, которые вы его кормите. Это был просто большой калькулятор. Этот современный компьютер строился по одной абстракции за раз.

Если вы хотите сломать барьер, который держит компьютеры чувствовать себя как магия, я настоятельно рекомендую читать код Чарльза Петцольда и/или элементы вычислительных систем. Имея только базовые знания программирования, эти чудесно доступные книги помогут вам понять компьютеры сверху донизу. Очевидно, что комп получить невозможно. научный. или степень EE после всего 2 книг, но я могу сказать как программист-самоучка, который пропустил формальное обучение: эти книги потрясли мой мир!


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

на человека. Читайте о система а-0 система а-0:

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


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

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

эти программы иногда использовались для обработки текстовых файлов для создания других программ, и были созданы языки программирования voila.