Quindi ho cercato di fare un po 'di ricerca su questo, cercando i manuali PDP-10 / TOPS-10 al fine di scoprire quale fosse lo stato dell'arte prima delle pipe. Ho trovato questo , ma TOPS-10 è straordinariamente difficile da google. Ci sono alcuni buoni riferimenti sull'invenzione della pipa: un'intervista a McIlroy , sulla storia e l'impatto di UNIX .
Devi metterlo nel contesto storico. Pochi degli strumenti e delle comodità moderni che diamo per scontati esistevano.
"All'inizio Thompson non programmava nemmeno sul PDP stesso, ma utilizzava una serie di macro per l'assemblatore GEMAP su una macchina GE-635." (29) Un nastro di carta è stato generato su GE 635 e poi testato su il PDP-7 fino a quando, secondo Ritchie, "furono completati un kernel Unix primitivo, un editor, un assemblatore, una semplice shell (interprete di comandi) e alcune utility (come i comandi Unix rm, cat, cp). punto, il sistema operativo era autoportante, i programmi potevano essere scritti e testati senza ricorrere al nastro di carta e lo sviluppo continuava sul PDP-7 stesso. "
Un PDP-7 è simile a questo . Si noti la mancanza di un display interattivo o di un disco rigido. Il "filesystem" verrebbe memorizzato sul nastro magnetico. Fino a 64 KB di memoria erano disponibili per programmi e dati.
In quell'ambiente, i programmatori tendevano a rivolgersi direttamente all'hardware, ad esempio inviando comandi per far girare il nastro ed elaborare i caratteri uno alla volta, letti direttamente dall'interfaccia del nastro. UNIX ha fornito astrazioni su questo, così che piuttosto che "leggere dal teletipo" e "leggere dal nastro" essendo interfacce separate sono state combinate in una, con l'aggiunta fondamentale di "leggere dall'output di un altro programma senza archiviare una copia temporanea sul disco o nastro ".
Ecco McIlroy sull'invenzione di grep
. Penso che questo faccia un buon lavoro nel riassumere la quantità di lavoro richiesta nell'ambiente pre-UNIX.
"Grep è stato inventato per me. Stavo realizzando un programma per leggere il testo ad alta voce attraverso un sintetizzatore vocale. Mentre inventavo le regole fonetiche, avrei controllato il dizionario Webster per le parole su cui avrebbero potuto fallire. Ad esempio, come affrontare il digraph ' ui ', che è pronunciato in molti modi diversi:' frutto ',' astuzia ',' colpevole ',' angoscia ',' intuitivo ',' beghina '? Vorrei spezzare il dizionario in pezzi che si adattano al buffer limitato di ed e uso un comando globale per selezionare un elenco. Vorrei sminuire l'elenco con ripetute scansioni con ed per vedere come funzionava ciascuna regola proposta. "
"Il processo è stato noioso e terribilmente dispendioso, dal momento che il dizionario doveva essere diviso (uno non poteva permettersi di lasciare una copia divisa in linea). Quindi ha copiato ogni parte in / tmp, scansionandola due volte per eseguire il comando g, e alla fine l'ha buttato via, il che richiede tempo. "
"Un pomeriggio ho chiesto a Ken Thompson se fosse in grado di estrarre il riconoscitore di espressioni regolari dall'editor e creare un programma one-pass per farlo. Ha detto di sì. La mattina dopo ho trovato un messaggio nella mia mail che annunciava un programma chiamato grep. Ha funzionato come un incantesimo. Alla domanda su cosa significasse quel nome divertente, Ken ha detto che era ovvio. Stava per il comando dell'editor che simulava, g / re / p (stampa di espressioni regolari globali). "
Confronta la prima parte di questo con l' cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100
esempio. Se le tue opzioni sono "costruisci una riga di comando" anziché "scrivi un programma appositamente per lo scopo, manualmente, in assemblatore", allora vale la pena costruire la riga di comando. Anche se ci vogliono alcune ore per leggere i manuali (cartacei) per farlo. È quindi possibile scriverlo per riferimento futuro.