venerdì 6 settembre 2013

Pipe o perché Unix (e Linux) è bello


Tanto tempo fa A fine agosto, in un commento Marco Bruno mi chiedeva:
[I] tubi sono nati in Unix, o c'erano prima? Li usavo spesso per i batch DOS, che penso sia venuto dopo.
Tipica domanda estiva, di quelle che ti vengono in mente sotto l'ombrellone.
Allora, risposta breve: i pipe sono un'idea di Douglas McIlroy, prima o poi ne parlo come si deve. E l'idea, semplicissima una volta che te la raccontano, ti viene davvero da dire "ah! come ho fatto a non pensarci io?" ha comportato una revisione delle specifiche di Unix che stava nascendo..


Marco ricorda che lo usava con il DOS. Vero, anch'io. Per esempio quando non ti ricordavi come si chiamava esattamente un file il comando era dir|sort|more dove dir restituisce l'elenco dei file, lo passa a sort che lo mette in ordine alfabetico e lo passa a more che lo visualizza per pagine, senza che scappino su.

Quindi il DOS (e poi Windows) hanno copiato da Unix. Ma solo in parte. Sarebbe lungo, e non adatto a questo blog, raccontare tutta la storia, Microsoft ha scelto altre vie, anche più belle (ma più difficili).


Prima di Unix i pipe quindi non c'erano. E come si faceva?
Racconto della mia prima macchina il Pr1me. C'era solo l'equivalente di > re-indirizzamento dell'output. Non proprio uguale duplicava l'handle, l'equivalente di tee di Unix|Linux. Cioè tu scrivevi COMO OUT e tutto quello che compariva a video finiva anche dentro al file OUT. Naturalmente il nome lo decidevi, oltre che OUT erano comuni SPIA, X, DUMP. Per chiudere il como c'era il comando COMO -E. Per Primos i comandi non era necessario che fossero completi, bastava che fossero distingubili; per il como la forma completa era COMMANDOUT e il -E stava per -END. Bon, c'era solo quello. Niente | e <.
C'era però un'altra cosa: quando preparavi il batch (che lì si chiamava command-file e si lanciava con CO nome) potevi scrivere le risposte alle domande che il programma ti avrebbe fatto, difatti l'input passava al batch). E nelle prime release (fino alla 16 se ricordo bene) alla fine del batch dovevi aggiungere l'istruzione CO -TTY dove TTY sta per teletype, l'antenato del terminale.
Rozzo come sistema? Sì ma funzionava e io ne ero affezionato.


Invece sia perché l'ho usato di meno sia perché ormai ero per Unix mi sono dimenticato come funzionava con il VMS (PDP e VAX). Ma googlando ho trovato:
OpenVMS does not support "pipes" as do some other operating systems. [T]he equivalent of the Unix command line:

 % prog1 | prog2 | prog3

is:

 $ DEFINE/user sys$output temp1.txt
 $ prog1
 $ DEFINE/user sys$input  temp1.txt
 $ DEFINE/user sys$output temp2.txt
 $ prog2
 $ DEFINE/user sys$input  temp2.txt
 $ prog3
Chiaro no? Pensa teche gli utenti VMS si rifiutavano categoricamente di usare qualsiasi cosa non fosse VMS. E credevano di essere i migliori. Digital Equipment Corporation, DEC è entrata in crisi all'inizio degli anni '80, passata a Compaq che è poi passata a Hewlett Packard, che adesso è in crisi: non è che il VMS porta spheega?


OK, lo so anch'io che è un post horrybyluz, non leggetelo e io non ne faccio più di così, giurin-giuretta.

Nessun commento:

Posta un commento