← На главную

Ограничения Teletype Model 33 до сих пор влияют на дизайн UNIX

20.05.2026 17:49 · hackernews

Teletype Model 33 не умел печатать фигурные скобки { }. Проблема была в раннем стандарте ASCII 1963 года — в нём просто не было места для этих символов. А на Model 33 тогда писали код для UNIX и C. Как выкручивались?

Сначала в C89 придумали триграфы: { можно было написать как ??<, а } — как ??>. Потом C95 добавила диграфы покрасивее: <% и %>. Но всё это появилось, когда Model 33 уже устарел. А как писали C в начале 70-х?

Ответ — через драйвер терминала. Начиная с UNIX V4 (ноябрь 1973) драйвер сам заменял \( на { и \) на } при работе с Teletype Model 33. Пользователь видел \ (, а система — {. Эта схема выросла из механизма редактирования на лету, унаследованного от Multics: символ # удалял предыдущий символ, а @ — всю строку, и их можно было экранировать обратной косой чертой. В статье показана сессия с редактором ed, где программа пишется с такими экранированными скобками, а при просмотре с другого терминала отображаются нормальные { }.

До V4, с самого появления C в июне 1972, скобки были просто скобками — но нужен был терминал, которые их умел. Интересно, что когда в C только добавили структуры (декабрь 1972), они на время использовали круглые скобки вместо фигурных. Но для блоков braces требовались всегда.

Ещё раньше был язык B, предшественник C. На PDP-7 скобки заменяли на $( и $). На PDP-11 в B использовали уже { }, но с другими esc-последовательностями вроде *n вместо \n. Синтаксис с $( ) перешёл в B из BCPL, от которого он и произошёл.

К середине 1971 года разработчики UNIX перешли на Teletype Model 37 — он умел всю современную ASCII и работал на 50% быстрее. Поэтому в исходниках ассемблерного ядра даже первой версии UNIX фигурных скобок нет — их писали уже на Model 37.

Ограничения Model 33 оставили след на десятилетия: UNIX до сих пор почти не использует заглавные буквы, идентификаторы в libc короткие и без подчёркиваний (их на Model 33 не было, вместо них была стрелка влево). Дизайн 1963 года до сих пор влияет на то, как мы пишем код.

Читать оригинал →