Добавить в корзинуПозвонить
Найти в Дзене
Синдром Утёнка | IT

Язык B: забытый отец Си, без которого не было бы ни Windows, ни Linux

1969 год. Bell Labs, Нью-Джерси. Кен Томпсон только что написал ядро UNIX на ассемблере PDP-7. Игра Space Travel работает, операционка грузится, но есть проблема: ассемблер привязан к конкретной машине. Чтобы перенести UNIX на другой компьютер, придётся переписывать всё с нуля. Томпсон берёт язык BCPL — британский системный язык, разработанный в Кембридже, — и безжалостно его урезает. Выбрасывает всё сложное. Оставляет голый минимум: переменные, циклы, операторы. Называет результат B. Одна буква. Проще некуда. На этом языке Томпсон и его коллега Деннис Ритчи переписывают части UNIX. Но B недолго остаётся в строю. Через пару лет Ритчи возьмёт его за основу, добавит типы данных, структуры — и получится C. Язык, на котором напишут Windows, Linux, Photoshop, Google Chrome и вообще почти всё, чем мы пользуемся сегодня. Но сам B остался в тени. Маленький, почти забытый предок. Сегодня его помнят только историки программирования и пара энтузиастов, которые запускают B на эмуляторе PDP-11. А ж
Оглавление

1969 год. Bell Labs, Нью-Джерси. Кен Томпсон только что написал ядро UNIX на ассемблере PDP-7. Игра Space Travel работает, операционка грузится, но есть проблема: ассемблер привязан к конкретной машине. Чтобы перенести UNIX на другой компьютер, придётся переписывать всё с нуля.

Томпсон берёт язык BCPL — британский системный язык, разработанный в Кембридже, — и безжалостно его урезает. Выбрасывает всё сложное. Оставляет голый минимум: переменные, циклы, операторы. Называет результат B. Одна буква. Проще некуда.

На этом языке Томпсон и его коллега Деннис Ритчи переписывают части UNIX. Но B недолго остаётся в строю. Через пару лет Ритчи возьмёт его за основу, добавит типы данных, структуры — и получится C. Язык, на котором напишут Windows, Linux, Photoshop, Google Chrome и вообще почти всё, чем мы пользуемся сегодня.

Но сам B остался в тени. Маленький, почти забытый предок. Сегодня его помнят только историки программирования и пара энтузиастов, которые запускают B на эмуляторе PDP-11. А жаль. Потому что без B не было бы C. Без C не было бы UNIX. А без UNIX — сам понимаешь.

Как BCPL похудел до одной буквы

BCPL, придуманный Мартином Ричардсом в Кембридже в 1966 году, был языком для системного программирования. Он позволял писать компиляторы, операционные системы и утилиты, но был избыточным для маленького PDP-7 с его 8 килобайтами памяти.

Томпсон рассуждал просто: «Мне нужно, чтобы язык влезал в машину и работал быстро». Он выкинул из BCPL типы данных (в B есть только машинное слово), вложенные функции, сложные структуры. Остался только скелет. Программы на B выглядели как ассемблер с человеческим лицом: короткие, плотные, почти без синтаксического сахара.

Главное нововведение B — тесная связь с UNIX. Томпсон писал язык одновременно с операционной системой, и они подгонялись друг под друга как ключ к замку. Именно на B были написаны первые версии утилит UNIX, которые до сих пор живут в терминалах: ls, cat, cp.

Бытовой пример
Представь, что у тебя есть огромный швейцарский нож с сорока лезвиями (BCPL). Ты отрываешь от него все навороты, оставляешь только одно лезвие и отвёртку — и получаешь B. Потом приходишь к другу, он добавляет пару новых лезвий — и вот у вас C. Швейцарский нож был первым, но в историю вошла именно доработанная версия.

Почему B умер, а C живёт

B был хорош для PDP-7. Но когда появился PDP-11 с его 16-битной архитектурой и байтовой адресацией, B начал скрипеть. В языке не было типов, и работа с символами превращалась в мучение. Каждый раз, когда нужно было обработать строку, программист писал костыли.

Деннис Ритчи видел эти мучения и в 1971–1972 годах начал добавлять в язык типы: char, int, float. Потом структуры. Потом указатели. B превратился в New B (NB), а затем — в C. Компилятор C был написан на ассемблере, а потом переписан на самом C — классический трюк, который называется «раскрутка компилятора».

К концу 70-х C стал главным языком UNIX, а потом вышел за его пределы. Сегодня C — один из самых влиятельных языков в истории. А B остался в анналах как «тот самый предок, без которого ничего бы не было».

Короткая байка
Когда Ритчи показал Томпсону первую версию C, Томпсон посмотрел на код и сказал: «Ты добавил типы. Теперь это не мой язык». Ритчи ответил: «Это всё ещё твой язык. Просто он научился различать буквы и цифры». Через год Томпсон сам переписал свои утилиты на C и больше не возвращался к B.

Читайте также в «Синдроме Утёнка | IT»:

-2

Наследие одной буквы

Кен Томпсон никогда не продвигал B как самостоятельный продукт. Для него это был инструмент, ступенька. Но именно эта ступенька позволила UNIX выжить и распространиться. Без B Томпсон и Ритчи могли бы застрять на ассемблере, а UNIX остался бы ещё одной забытой ОС для никому не нужного компьютера.

Сегодня B — музейный экспонат. Но каждый раз, когда ты запускаешь терминал и набираешь ls, ты используешь команду, написанную когда-то на B. Каждый раз, когда компилируешь программу на C, ты пользуешься идеями, впервые обкатанными на PDP-7 в 1969 году. История языков программирования — это не только про успех. Это ещё и про незаметные мостики, которые сделали успех возможным.

Аплодисменты
Кену Томпсону, который за месяц написал язык, операционку и игру. Мартину Ричардсу, придумавшему BCPL и даже не подозревавшему, во что это выльется. PDP-7 — слабенькой машине, которая выдержала и UNIX, и B, и Space Travel. И языку B — одной букве, которая изменила историю, а сама осталась в тени.В следующий раз, когда будешь писать на C или Python, вспомни: всё началось с языка, у которого даже названия толком не было.

Понравился выпуск? Подписывайся на «Синдром Утёнка | IT» — тут мы откапываем забытых предков и рассказываем, как они изменили твой код.