Поэтому я попытался провести небольшое исследование по этому вопросу, ища руководства PDP-10 / TOPS-10, чтобы узнать, каков был уровень техники до появления трубок. Я нашел это , но TOPS-10 удивительно трудно гуглить. Есть несколько хороших ссылок на изобретение трубы: интервью с Макилрой , об истории и влиянии UNIX .
Вы должны поместить это в исторический контекст. Немногие из современных инструментов и удобств, которые мы считаем само собой разумеющимся, существовали.
«В начале, Томпсон даже не программировал на самом PDP, а вместо этого использовал набор макросов для ассемблера GEMAP на машине GE-635». (29) Бумажная лента была сгенерирована на GE 635 и затем протестирована на PDP-7 до тех пор, пока, по словам Ричи, «примитивное ядро Unix, редактор, ассемблер, простая оболочка (интерпретатор команд) и несколько утилит (таких как команды Unix rm, cat, cp) не были завершены. Дело в том, что операционная система была автономной, программы можно было писать и тестировать, не прибегая к бумажной ленте, и разработка самой PDP-7 продолжалась ».
PDP-7 выглядит следующим образом . Обратите внимание на отсутствие интерактивного дисплея или жесткого диска. «Файловая система» будет храниться на магнитной ленте. Было до 64 КБ памяти для программ и данных.
В этой среде программисты, как правило, обращались непосредственно к аппаратному обеспечению, например, выполняя команды для раскручивания ленты и обработки символов по одному, считываемых непосредственно из интерфейса ленты. UNIX предоставил абстракции над этим, так что вместо того, чтобы «читать из телетайпа» и «читать с ленты», будучи отдельными интерфейсами, они были объединены в один, с критически важным добавлением канала «чтение из вывода другой программы без сохранения временной копии на диске». или лента ".
Вот Макилрой на изобретение grep
. Я думаю, что это хорошо суммирует объем работы, требуемый в среде, предшествующей UNIX.
«Grep был изобретен для меня. Я делал программу для чтения текста вслух через синтезатор голоса. Когда я изобрел фонетические правила, я проверял словарь Вебстера на наличие слов, в которых они могут потерпеть неудачу. Например, как вы справляетесь с орграфом» ui ', который произносится многими разными способами:' fruit ',' guile ',' guilty ',' anguish ',' intuit ',' beguine '? Я разбил бы словарь на части, которые помещались бы в ограниченный буфер ed и использовал глобальная команда для выбора списка. Я бы сократил этот список путем повторного сканирования с помощью ed, чтобы увидеть, как работает каждое предлагаемое правило ".
«Процесс был утомительным и ужасно расточительным, поскольку словарь нужно было разделить (нельзя было оставить разделенную копию в строке). Затем ed скопировал каждую часть в / tmp, дважды отсканировал ее, чтобы выполнить команду g, и, наконец, выбросил его, что тоже требует времени. "
«Однажды днем я спросил Кена Томпсона, может ли он вынуть из редактора распознаватель регулярных выражений и создать для этого однопроходную программу. Он сказал« да ». На следующее утро я нашел в своем письме заметку, объявляющую программу под названием grep. Это сработало как шарм. Когда его спросили, что означает это забавное имя, Кен ответил, что оно очевидно. Оно обозначало команду редактора, которую он имитировал, g / re / p (глобальная печать регулярного выражения). "
Сравните первую часть этого с cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100
примером. Если вы выбираете «построить командную строку» вместо «написать программу специально для этой цели, вручную, на ассемблере», тогда стоит построить командную строку. Даже если для этого потребуется несколько часов чтения (бумажных) руководств. Затем вы можете записать его для дальнейшего использования.