Подтвердить что ты не робот

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

Верно ли, что первый компилятор C был написан в самой C? Затем, как это было выполнено и скомпилировано? Или, был ли этот компилятор написан на ассемблере?

4b9b3361

Ответ 1

Это хорошо описано в Dennis Ritchie writeup истории языка C.

Давая просто краткое изложение того, что он там написал, используйте его статью для более тонких деталей. C начался с языка BCPL, у Кена Томсона был доступ к компилятору, который работал на основном кадре General Electrics 635. Недовольный языком, Томсон использовал BCPL для написания компилятора для языка B, эволюционного шага вне BCPL, который устранил некоторые технические проблемы в BCPL.

Они использовали B для создания программ на миникомпьютере PDP-7, хотя большинство из них были немного больше, чем игрушечные программы, у машины были очень ограниченные аппаратные возможности. Одним из важных шагов, предпринятых Thomson, было переписать компилятор B в самой B. Обычный шаг начальной загрузки.

Затем этот компилятор постепенно изменялся через непродолжительный промежуточный шаг под названием NB (New B), чтобы начать напоминать C. Миникомпьютер PDP-11 сыграл важную роль в этом шаге, предоставляя им достаточно места для улучшения языка и компилятора.

Ответ 2

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

Там много языков программирования, которые были написаны на C, переписаны на их родном языке: Java, например, Ada...

Ответ 3

Чтение примечания Денниса Ритчи на primevalC указывает, что, скорее, как цыпленок и яйцо, C развился из языка предшественника вместе с его собственный компилятор при загрузке. Временные шкалы видообразования были быстрее, чем для Gallus gallus domesticus.

Можно даже увидеть исходный код компилятора, попавший в разгар эволюционных потрясений. Заметка связана с двумя моментальными снимками, полученными из резервных копий. Этот код также размещен на github. Эти снимки представляют собой промежуточные окаменелости за несколько лет до синтаксиса K & R. Описание Денниса одной из лент показывает, что это замораживающий кадр строящихся структур:

"prestruct-c" - это копия компилятора непосредственно перед тем, как я начал меняться это использовать сами структуры.

Другими словами, компилятор был расширен для поддержки структур, но еще не использовал их. Хорошее время для создания резервной копии на магнитной ленте...