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