L'autore dell'articolo è Douglas McIlroy, un matematico, ingegnere e programmatore americano. È principalmente noto per lo sviluppo della pipeline nel sistema operativo Unix, per i principi della programmazione orientata ai componenti e per diverse utility originali: spell, diff, sort, join, speak, tr.
A volte ci si imbatte in programmi davvero straordinari. Ripensando al passato, ho stilato un elenco di vere gemme di Unix nel corso degli anni. In gran parte, si tratta di programmi piuttosto rari e non così essenziali. Ma ciò che li distingue è l'originalità. Non riesco nemmeno a immaginare di aver avuto l'idea per uno di essi.
Condividete quali programmi vi hanno sorpreso in questo modo?
PDP-7 Unix
Per cominciare, il sistema PDP-7 Unix stesso. La sua semplicità e potenza mi hanno spinto a passare da un potente mainframe a una minuscola macchina. Qui si trova l'essenza del file system gerarchico, una shell separata e la gestione dei processi a livello utente, qualcosa che Multics sui mainframe non è riuscita a realizzare dopo centinaia di uomini/anno di sviluppo. Gli svantaggi di Unix (come la struttura dei record nel file system) sono stati altrettanto istruttivi e liberatori quanto le sue innovazioni (come il reindirizzamento dell'input/output nella shell).
dc
La libreria matematica per il calcolatore da tavolo con precisione variabile di Robert Morris utilizzava un'analisi inversa degli errori per determinare la precisione necessaria ad ogni passo per raggiungere la precisione desiderata dall'utente. Alla conferenza NATO del 1968 sulla ingegneria del software, nel mio intervento sui componenti software, ho proposto procedure di riferimento che possono fornire un risultato di qualsiasi precisione desiderata, ma non sapevo come implementarle nella pratica. dc rimane fino ad oggi l'unico programma di cui sono a conoscenza capace di ciò.
typo
Typo ordina le parole nel testo in base alla loro somiglianza con il resto del testo. Errori come 'hte' tendono a posizionarsi verso la fine della lista. Robert Morris affermava orgogliosamente che il programma funzionerebbe altrettanto bene in qualsiasi lingua. Anche se typo non aiuta a trovare errori fonetici, è risultata una vera scoperta per chi scrive testo e ha fornito molti vantaggi fino all'arrivo di una verifica ortografica decisamente meno interessante, ma più precisa, basata sul dizionario.
La typo è sorprendentemente strutturata all'interno come all'esterno. L'algoritmo di misurazione della similarità si basa sulla frequenza di apparizione delle trigrammi, che vengono considerate in un array 26×26×26. Nella memoria minuscola, c'era a malapena spazio per i contatori a byte singolo, quindi è stato implementato uno schema di compressione per numeri grandi in contatori piccoli. Per evitare il sovraccarico, i contatori venivano aggiornati su base probabilistica, mantenendo una stima del logaritmo del valore del contatore.
eqn
Con l'emergere della fotolibreria è diventato possibile, ma terribilmente faticoso, produrre la notazione matematica classica. Lorinda Cherry ha deciso di sviluppare un linguaggio di descrizione di livello superiore e presto a lei si è unito Brian Kernighan. Il loro brillante passo è stato quello di esprimere la tradizione orale in forma scritta, quindi eqn si è rivelato straordinariamente semplice da studiare. Il primo preprocessore del linguaggio di descrizione delle espressioni matematiche, eqn non è stato praticamente migliorato da allora.
struttura
Brenda Baker ha avviato lo sviluppo del suo convertitore Fortan-to-Ratfor contro il consiglio del suo capo: me. Pensavo che questo potesse portare a una riorganizzazione speciale del testo sorgente. Sarebbe stato libero dai numeri degli operatori, ma per il resto non più leggibile di un codice Fortran ben strutturato. Brenda ha dimostrato che mi sbagliavo. Ha scoperto che ogni programma Fortran ha una forma strutturata canonica. I programmatori preferivano la forma canonica piuttosto che quella che avevano originariamente scritto.
pascal
La diagnostica della sintassi nel compilatore creato dal gruppo di Sue Graham a Berkeley era la più utile di tutte quelle che avessi mai visto - e veniva eseguita automaticamente. In caso di errore sintattico, il compilatore propone di inserire un lessico per continuare l'analisi sintattica. Nessun tentativo di spiegare cosa non andasse. Con questo compilatore ho imparato Pascal in una sola sera, senza avere manuali a portata di mano.
parti
Modulo nascosto all'interno del pacchetto WWB (Writer’s Workbench) parti Lorinda Cherry definisce le parti del discorso per le parole nel testo in inglese basandosi solo su un piccolo dizionario, regole di ortografia e grammatica. Sulla base di questa annotazione, il programma WWB fornisce indicatori stilometrici del testo, come la prevalenza di aggettivi, frasi subordinate e frasi complesse. Quando Lorinda ha dato un'intervista nel programma Today sul canale NBC e ha parlato dell'innovativa verifica grammaticale nei testi WWB, è stata la prima menzione di Unix in televisione.
egrep
Al Aho si aspettava che il suo riconoscitore deterministico di espressioni regolari superasse il classico riconoscitore non deterministico di Ken. Sfortunatamente, quest'ultimo stava già completando la sua scansione su espressioni regolari complesse mentre egrep costruiva il suo automa deterministico. Per vincere comunque questa corsa, Al Aho ha eluso la maledizione della crescita esponenziale della tabella degli stati dell'automa, inventando un modo per costruire al volo solo le voci della tabella che vengono effettivamente visitate durante il riconoscimento.
granchi
Il affascinante metaprogramma di Luca Cardelli per il sistema finestra Blit emetteva granchi virtuali che vagabondavano nel vuoto dello schermo, rosicchiando sempre di più i bordi delle finestre attive.
Alcuni pensieri generali
Anche se non è visibile dall'esterno, la teoria e gli algoritmi hanno giocato un ruolo cruciale nella creazione della maggior parte di questi programmi: typo, dc, struct, pascal, egrep. In realtà, ciò che sorprende di più è proprio l'applicazione insolita della teoria.
I creatori originali di quasi la metà dell'elenco — pascal, struct, parts, eqn — erano donne, il che supera di gran lunga la quota demografica delle donne nell'ambito delle scienze informatiche.
Douglas McIlroy
Marzo, 2020
Fonte: habr.com
