Автор Тема: Опубликован код первого компилятора для языка Си  (Прочитано 3393 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
http://www.opennet.ru/opennews/art.shtml?num=36312
Цитировать
Открыт доступ к исходным текстам первого компилятора для языка Си, написанного Дэнисом Ритчи в 1972 году для платформы PDP-11. Код был обнаружен при разборе архивных магнитных лент в рамках инициированной задолго до смерти Дэниса Ритчи инициативы по поиску и восстановлению первых наработок, связанных с языком Си. Код компилятора написан на первом диалекте языка Си, который сильно отличается от современного Си и уже не поддерживается ни одним из компиляторов.

Работа по выявлению архивного кода проведена энтузиастами нового направления истории - индустриальной палеонтологии, в рамках которого осуществляется анализ истоков развития тех или иных технологий. Первым успехом нового направления было восстановление в 2010 году кода первой редакции Unix.

Сам код:
https://github.com/mortdeus/legacy-cc
История обнаружения:
http://cm.bell-labs.com/cm/cs/who/dmr/primevalC.html

Глянул - язык действительно существенно отличается от стандартного Си. Ну и вообще, любопытно посмотреть как писали в 1972 году, особенно как писали компиляторы.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
На что бы хотел обратить внимание:
пример функции:
error(s, p1, p2) {
extern printf, line, fout, flush, putchar, nerror;
int f;

nerror++;
flush();
f = fout;
fout = 1;
printf("%d: ", line);
printf(s, p1, p2);
putchar('\n');
fout = f;
}

Во-первых в исходниках нет никаких хедеров - изначально их никто не планировал, и они были не нужны. Зато каждая функция, ЯВНО указывает какие именно другие функции и внешние/глобальные она в своем теле использует (в данном случае это printf, line, fout, flush, putchar, nerror).

Таким образом, единицей инкапсуляции, и, потенциально, компиляции а также загрузки и выгрузки является Функция. Кстати, ровно то же самое мы наблюдаем и в Алголе-68.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
прикольно )
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Во-первых в исходниках нет никаких хедеров - изначально их никто не планировал, и они были не нужны.
Структур ещё не было? Замучились бы структуры описывать в каждой процедуре...

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Во-первых в исходниках нет никаких хедеров - изначально их никто не планировал, и они были не нужны.
Структур ещё не было? Замучились бы структуры описывать в каждой процедуре...
Конкретно в том, что я смотрел - нет, еще не было (не даром оно зовется prestruct). Подробней про то что там выложено сказано тут: http://cm.bell-labs.com/cm/cs/who/dmr/primevalC.html

Кстати, безхедерный стиль жил очень долго. В прошлом году я работал с кодом писанным где-то в 1985 году, и там хедеров не было. А структуры были :-)
Y = λf.(λx.f (x x)) (λx.f (x x))