Законспектирую историю о компиляторе Би для PDP-7 Unix, восстановленном Робертом Свирчеком в 2016 году. Эта реставрация — ценный фрагмент археологии Unix. Вот краткое описание того, что сделал Роберт Свирчек и почему это важно.
Что произошло
В 2016 году Роберт Свирчек реконструировал работающий
компилятор Би для оригинальной PDP-7 Unix (самой ранней версии Unix, авторства Кена Томпсона). Исходный код оригинального компилятора Би был утерян; сохранился только интерпретатор байт-кода Би.
Свирчек реализовал компилятор, способный генерировать
байт-код, используемый сохранившимся интерпретатором Би, и разработал путь загрузки, чтобы компилятор можно было собрать и фактически
самостоятельно скомпилировать на восстановленном образе PDP-7 Unix. Проект pdp7-unix включил его работу, поэтому компилятор Би и примеры программ на Би присутствуют в образе файловой системы.
Как он это сделал
Поскольку оригинальный набор инструментов PDP-7 отсутствовал, Свирчек применил хитроумный подход обратной разработки: он взял сохранившиеся артефакты (интерпретатор Би и самые ранние исходные коды компилятора Си), удалил или обошёл механизм типов Си там, где это было необходимо, и создал реализацию компилятора, которая одновременно является корректной для
Си и корректной для
Би (чтобы её можно было скомпилировать современным хостовым компилятором Си для получения промежуточной формы). Эта промежуточная форма затем может быть запущена под интерпретатором Би на PDP-7 Unix, что позволяет компилятору Би перекомпилировать себя на PDP-7. Это описано в описании восстановления.
Репозиторий pdp7-unix и заметки о сборке включают
b.c Свирчека и пример использования (например,
gcc -Wno-multichar b.c -o b ./b hello.b hello.s.S в дереве проекта).
Там же находится файл
b.b - исходный текст компилятора Би на языке Би. Его можно оттранслировать компилятором би (написанным на Си), и он будет работать точно так же.
Почему это важно
Би — непосредственный предок Си; восстановление работающего компилятора Би позволяет историкам и инженерам запускать и изучать оригинальные программы на Би, а также понимать ранний набор инструментов и модель разработки Unix. Восстановление делает среду Unix PDP-7 значительно более полной и работоспособной на эмуляторах (и на музейном оборудовании).
Где поэкспериментировать с компилятором Би для PDP-7
Проект
pdp7-unix (основная реставрация) — включает собранные инструменты, образы файловой системы и исходные коды компилятора Би Свирчека.
Файлы
b.c и
b.b (с указанием авторских прав, ссылающихся на Роберта Свирчека, 2016) можно напрямую просмотреть в дереве проекта.
Краткое пояснительное описание процесса реконструкции, в котором подробно описывается процесс начальной загрузки и кто что делал (упоминается роль Свирчека), доступно в
отчёте о восстановлении.
Ссылки:
- Статья 'Unix: Building A Development Environment From Scratch' авторства Warren Toomey
- О проекте PDP-7 Unix
- b.c - Исходные текста компилятора Би на языке Си
- b.b - Исходные текста компилятора Би на языке Би
- Технические подробности реализации Би для PDP-7 и PDP-11
- Сохранившиеся артефакты на языке Би из первого Юникса