Quindi ho cercato di fare un po 'di ricerche su questo cercando i manuali di PDP-10 / TOPS-10 per scoprire quale fosse lo stato dell'arte prima delle pipe. Ho trovato questo , ma TOPS-10 è notevolmente difficile da google. Ci sono alcune buone referenze sull'invenzione della pipa: un'intervista con McIlroy , < a href="http://people.fas.harvard.edu/~lib113/reference/unix/unix2.html"> sulla storia e l'impatto di UNIX .
Devi metterlo nel contesto storico. Pochi degli strumenti e delle comodità moderne che diamo per scontato esistevano.
"At the start, Thompson did not even program on the PDP itself, but instead used a set of macros for the GEMAP assembler on a GE-635 machine."(29) A paper tape was generated on the GE 635 and then tested on the PDP-7 until, according to Ritchie, "a primitive Unix kernel, an editor, an assembler, a simple shell (command interpreter), and a few utilities (like the Unix rm, cat, cp commands) were completed. At this point, the operating system was self-supporting, programs could be written and tested without resort to paper tape, and development continued on the PDP-7 itself."
Un PDP-7 assomiglia a questo . Notare la mancanza di un display interattivo o di un disco rigido. Il "filesystem" verrebbe memorizzato sul nastro magnetico. C'erano fino a 64kB di memoria per programmi e dati.
In quell'ambiente, i programmatori tendevano ad indirizzare direttamente l'hardware, ad esempio emettendo comandi per far ruotare il nastro ed elaborare i caratteri uno alla volta letti direttamente dall'interfaccia del nastro. UNIX forniva astrazioni su questo, in modo che invece di "leggere da teletype" e "read from tape" fossero interfacce separate che erano combinate in una, con l'aggiunta cruciale di "read from output di altri programmi senza memorizzare una copia temporanea su 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 was invented for me. I was making a program to read text aloud through a voice synthesizer. As I invented phonetic rules I would check Webster's dictionary for words on which they might fail. For example, how do you cope with the digraph 'ui', which is pronounced many different ways: 'fruit', 'guile', 'guilty', 'anguish', 'intuit', 'beguine'? I would break the dictionary up into pieces that fit in ed's limited buffer and use a global command to select a list. I would whittle this list down by repeated scannings with ed to see how each proposed rule worked."
"The process was tedious, and terribly wasteful, since the dictionary had to be split (one couldn't afford to leave a split copy on line). Then ed copied each part into /tmp, scanned it twice to accomplish the g command, and finally threw it away, which takes time too."
"One afternoon I asked Ken Thompson if he could lift the regular expression recognizer out of the editor and make a one-pass program to do it. He said yes. The next morning I found a note in my mail announcing a program named grep. It worked like a charm. When asked what that funny name meant, Ken said it was obvious. It stood for the editor command that it simulated, g/re/p (global regular expression print)."
Confronta la prima parte di questo all'esempio di cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100
. Se le tue opzioni sono "costruisci una linea di comando" contro "scrivi un programma appositamente per lo scopo, a mano, in assemblatore", allora vale la pena costruire la riga di comando. Anche se ci vogliono alcune ore per leggere i manuali (cartacei) per farlo. Puoi quindi annotarlo per riferimento futuro.