Я слышал о курице, яйце и начальной загрузке. У меня есть несколько вопросов.
Что написал первый компилятор, который преобразовал что-то в двоичные инструкции?
Сборка скомпилирована или переведена в двоичные инструкции?
... Мне было бы трудно поверить, что они написали компилятор в двоичном формате.
compiler-construction
machine-instruction
Шон Маклин
источник
источник
Ответы:
Инструкции по сборке (как правило) являются прямым отображением кодов операций, которые являются (многобайтовыми) значениями машинного кода, которые могут интерпретироваться непосредственно процессором. Вполне возможно написать программу в кодах операций напрямую, отыскивая их из таблицы (например, этой для микропроцессора 6039 ), в которой перечисляются их с соответствующими инструкциями по сборке и ручным определением адресов / смещений памяти для вещей. как прыжки.
Первые программы были сделаны именно таким образом - рукописные коды операций.
Тем не менее, в большинстве случаев проще использовать ассемблер для «компиляции» ассемблерного кода, который автоматически выполняет этот поиск кода операции, а также помогает вычислять адреса / смещения для именованных меток перехода и так далее.
Первые сборщики были написаны от руки. Затем эти ассемблеры можно использовать для сборки более сложных ассемблеров, которые затем можно использовать для сборки компиляторов, написанных для языков более высокого уровня, и так далее. Этот процесс итеративного написания инструментов для упрощения создания следующего набора инструментов называется (как упомянул Дэвид Рабиновиц в своем ответе) начальной загрузкой .
источник
Пожалуйста, прочитайте о загрузке компилятора и истории написания компилятора.
Идея состоит в том, чтобы написать очень простой компилятор непосредственно в машинном коде, использовать его для написания более сложного компилятора, использовать второй для создания третьего и так далее, пока у вас не будет полнофункционального компилятора.
источник
Яйца давно предшествовали курам. Ответ на большинство проблем "курица и яйцо" один и тот же: эволюция. Некоторым людям трудно поверить в биологическую эволюцию, но неверие не является аргументом (google argumentsum ad ignorantiam).
Чтобы прямо ответить на ваш вопрос: первый компилятор был написан (человеком) на языке ассемблера - программа, называемая ассемблером, переведет язык ассемблера в двоичный файл; это гораздо более простой процесс, чем компиляция, потому что ассемблер является просто символической формой машинного языка, которая использует имена кодов операций вместо чисел, представляет адреса с символами и так далее. Многие последующие компиляторы были написаны также на ассемблере. Но первый компилятор Си был изменен Б компилятор, который был написан в B . Первый B-компилятор был написан на TMG . Компилятор TMG, используемый для компиляции этого B-компилятора, был написан на языке ассемблера PDP-7.
источник
Воз сказал в одном из своих публичных выступлений, что когда он начинал, он не мог позволить себе компилятор, поэтому он компилировал в двоичный файл вручную на бумаге. Если вы хотите увидеть что-то еще более дикое, прочитайте об условиях, при которых Билл Гейтс и Пол Аллен написали BASIC для Altair 8800.
Что касается «написания компьютера в двоичном формате» - сделайте шаг назад от того, чтобы быть программистом, и подумайте, какими были ранние компьютеры. Материал высокого уровня еще не существовал - вы думали обо всем на низком уровне, потому что это все, что было. У вас было оборудование, которое могло выполнять базовую логику и арифметику, которыми вы манипулировали с помощью машинного кода (который является просто скомпилированной сборкой - Амбер объясняет, почему эту часть не сложно выполнить вручную), и вы хотели, чтобы это оборудование выполняло определенные математические действия. Вы не беспокоились о несуществующей операционной системе, вы просто сказали аппаратному обеспечению (в сборе), как манипулировать числами, которые вы ему предоставляете. Это был просто большой калькулятор. Компьютер сегодня был построен одна абстракция за один раз.
Если вы хотите преодолеть барьер, который заставляет компьютеры ощущать себя волшебными, я НАСТОЯТЕЛЬНО рекомендую прочитать CODE Чарльза Петцольда и / или «Элементы вычислительных систем» . Обладая лишь базовыми знаниями в области программирования, эти удивительно доступные книги помогут вам разобраться в компьютерах сверху вниз. Очевидно, что никто не может получить комп. Sci. или степень EE после двух книг, но я могу сказать как программист-самоучка, который пропустил формальное обучение: эти книги потрясли мой мир!
источник
Человек сделал. Читайте о системе A-0 :
источник
Первые программы были написаны на машинном коде (не на ассемблере) - фактические числа вставлялись в память компьютера с помощью переключателей. Мы прошли долгий путь ...
Иногда это все еще происходит в небольшой степени - для исправления небольших фрагментов кода или создания кодов. Я вспоминаю вставку чисел в строки Basic, которые затем выполнялись в виде небольших быстрых подпрограмм на ранних микроэлементах. Я также помню переключатели на передней панели PDP-11 для ввода программы начального загрузчика в ее память для университетского курса.
Эти программы иногда используются для обработки текстовых файлов для создания других программ, и вуаля создаются языки программирования.
источник