J'ai donc essayé de faire quelques recherches à ce sujet en recherchant les manuels PDP-10 / TOPS-10 afin de connaître l'état de la technique avant la création de tuyaux. J'ai trouvé cela , mais TOPS-10 est remarquablement difficile à rechercher sur Google. Il existe quelques bonnes références sur l’invention du tuyau: une interview de McIlroy , sur l’histoire et l’impact d’UNIX .
Vous devez placer cela dans un contexte historique. Peu d'outils et de commodités modernes que nous prenons pour acquis existaient.
"Au début, Thompson ne programmait même pas sur le PDP, mais utilisait un ensemble de macros pour l'assembleur GEMAP sur une machine GE-635." (29) Une bande de papier a été générée sur le GE 635, puis testée sur PDP-7 jusqu’à ce que, selon Ritchie, "un noyau Unix primitif, un éditeur, un assembleur, un simple shell (interpréteur de commandes) et quelques utilitaires (comme les commandes Unix rm, cat, cp) soient terminés. En fait, le système d’exploitation était autonome, les programmes pouvaient être écrits et testés sans recourir à la bande de papier et le développement du PDP-7 se poursuivait. "
Un PDP-7 ressemble à ceci . Notez l'absence d'écran interactif ou de disque dur. Le "système de fichiers" serait stocké sur la bande magnétique. Il y avait jusqu'à 64 Ko de mémoire pour les programmes et les données.
Dans cet environnement, les programmeurs avaient tendance à s’adresser directement au matériel, par exemple en émettant des commandes permettant de faire tourner la bande et de traiter les caractères un par un, lus directement à partir de l’interface de la bande. UNIX a fourni des abstractions à ce sujet, de sorte que, plutôt que "lire à partir de téléscripteur" et "lire à partir d'une bande", elles soient combinées en une seule, avec l'ajout crucial de "lire à partir de la sortie d'un autre programme sans stocker de copie temporaire sur disque ou bande ".
Voici McIlroy sur l’invention de grep
. Je pense que cela résume bien la quantité de travail requise dans l'environnement pré-UNIX.
"Grep a été inventé pour moi. Je concevais un programme pour lire le texte à voix haute à l'aide d'un synthétiseur vocal. En inventant des règles phonétiques, je vérifiais dans le dictionnaire Webster les mots sur lesquels ils pourraient échouer. Par exemple, comment gérez-vous le digramme?" ui ", qui se prononce de différentes manières:" fruit "," ruse "," coupable "," angoisse "," intuition "," béguine "? Je diviserais le dictionnaire en parties qui correspondaient au tampon et à l'utilisation limités d'ed une commande globale pour sélectionner une liste. Je réduirais cette liste par des balayages répétés avec ed pour voir comment chaque règle proposée fonctionnait. "
"Le processus était fastidieux et terriblement inutile, car le dictionnaire devait être divisé (on ne pouvait pas se permettre de laisser une copie divisée en ligne). Ensuite, copié chaque partie dans / tmp, scanné deux fois pour exécuter la commande g, et finalement jeté, ce qui prend du temps aussi. "
"Un après-midi, j’ai demandé à Ken Thompson s’il pouvait retirer le logiciel de reconnaissance des expressions régulières de l'éditeur et créer un programme en un seul passage. Il a dit oui. Le lendemain matin, j'ai trouvé dans mon courrier une note annonçant un programme nommé grep. Quand on lui a demandé ce que ce drôle de nom voulait dire, Ken a répondu que c’était évident. C’était la commande de l’éditeur qu’elle simulait, g / re / p (impression régulière globale). "
Comparez la première partie de celle-ci à l' cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100
exemple. Si vous avez le choix entre "construire une ligne de commande" et "écrire un programme spécifiquement à cette fin, manuellement, en assembleur", il est intéressant de créer la ligne de commande. Même si cela prend quelques heures de lecture des manuels (papier) pour le faire. Vous pouvez ensuite l'écrire pour référence future.