Cele mai mari programe Unix

Autorul articolului, Douglas McIlroy, este un matematician, inginer și programator american. El este cel mai bine cunoscut pentru dezvoltarea conductei în sistemul de operare Unix, principiile programării orientate pe componente și câteva utilitare originale: spell, diff, sort, join, speak, tr.

Uneori dai peste programe cu adevărat minunate. După ce mi-am scotocit prin memorie, am alcătuit de-a lungul anilor o listă cu adevărate pietre Unix. Practic, acestea sunt programe destul de rare și nu atât de necesare. Dar ceea ce îi face să iasă în evidență este originalitatea lor. Nici nu-mi pot imagina că eu însumi mi-a venit ideea vreunuia dintre ei.

Distribuiți ce programe sunteți atât de impresionat?

PDP-7 Unix

Pentru început, sistemul PDP-7 Unix în sine. Simplitatea și puterea sa m-au făcut să trec de la un mainframe puternic la o mașină mică. Este sistemul de fișiere ierarhic prin excelență, shell-ul separat și controlul procesului la nivel de utilizator pe care Multics pe mainframe nu a reușit să le realizeze după sute de ani de dezvoltare. Deficiențele Unix (cum ar fi structura de înregistrare a sistemului de fișiere) au fost la fel de instructive și eliberatoare ca inovațiile sale (cum ar fi redirecționarea I/O shell).

dc

Biblioteca matematică a calculatoarelor de birou cu precizie variabilă a lui Robert Morris a folosit analiza inversă a erorilor pentru a determina precizia necesară la fiecare pas pentru a obține o precizie a rezultatului specificată de utilizator. La Conferința NATO de inginerie software din 1968, în raportul meu despre componentele software, am propus proceduri de referință care ar putea produce orice precizie dorită, dar nu știam cum să le pun în practică. dc este încă singurul program despre care știu care poate face asta.

tipo

Typo aranjează cuvintele în text în funcție de asemănarea lor cu restul textului. Greșeli de ortografie precum „hte” tind să fie la sfârșitul listei. Robert Morris a spus cu mândrie că programul ar funcționa la fel de bine pentru orice limbă. Deși greșelile de scriere nu vă ajută să găsiți erori fonetice, a fost o adevărată binecuvântare pentru toți cei care scrie tipărire și a făcut mult bine înainte să apară corectorul ortografic al dicționarului, mult mai puțin interesant, dar mai precis.

Greșeala de scriere este la fel de neașteptată în interior, ca și în exterior. Algoritmul de măsurare a similarității se bazează pe frecvența de apariție a trigramelor, care sunt numărate într-o matrice de 26×26×26. Mica memorie abia avea suficient spațiu pentru contoare de un octet, așa că a fost implementată o schemă pentru a comprima numerele mari în contoare mici. Pentru a evita depășirea, contoarele au fost actualizate pe bază probabilistică, menținând o estimare a logaritmului valorii contorului.

ec

Odată cu apariția fotocompoziției, a devenit posibil, dar teribil de plictisitor, să tipăriți notația matematică clasică. Lorinda Cherry a decis să dezvolte un limbaj de descriere de nivel superior, iar în curând Brian Kernigan i s-a alăturat. Mișcarea lor genială a fost să pună tradiția orală în scris, așa că eqn a fost remarcabil de ușor de învățat. Primul preprocesor de limbaj de expresie matematică de acest gen, eqn nu a fost mult îmbunătățit de atunci.

structura

Brenda Baker a început să-și dezvolte convertorul Fortan-la-Ratfor împotriva sfatului șefului ei, eu. M-am gândit că acest lucru ar putea duce la o reordonare specială a textului original. Acesta va fi lipsit de numere de declarație, dar altfel nu mai ușor de citit decât codul Fortran bine structurat. Brenda mi-a dovedit că am greșit. Ea a descoperit că fiecare program Fortran are o formă structurată canonic. Programatorii au preferat forma canonică, mai degrabă decât ceea ce ei înșiși au scris inițial.

Pascal

Diagnosticul de sintaxă din compilatorul creat de grupul lui Sue Graham de la Berkeley a fost cel mai util pe care l-am văzut vreodată – și s-a făcut automat. La o eroare de sintaxă, compilatorul vă solicită să introduceți un token pentru a continua analiza. Nicio încercare de a explica ce este greșit. Cu acest compilator, am învățat Pascal într-o seară fără nici un manual la îndemână.

piese

Ascuns în interiorul modulului WWB (Writer's Workbench). parts Lorinda Cherry determină părți de vorbire pentru cuvinte dintr-un text englezesc pe baza doar unui mic dicționar, reguli de ortografie și gramatică. Pe baza acestei adnotări, programul WWB afișează indicatori stilometrici ai textului, cum ar fi prevalența adjectivelor, propozițiilor subordonate și propozițiilor complexe. Când Lorinda a fost intervievată la NBC's Today și a vorbit despre verificarea inovatoare a gramaticii în textele WWB, a fost prima mențiune despre Unix la televizor.

egrep

Al Aho se aștepta ca soluția sa deterministă a expresiei regulate să depășească soluția clasică nedeterministă a lui Ken. Din păcate, acesta din urmă finaliza deja o trecere prin expresii regulate complexe, în timp ce egrep și-a construit propria automatizare deterministă. Pentru a câștiga în continuare această cursă, Al Aho a ocolit blestemul creșterii exponențiale a tabelului de stat al automatului, inventând o modalitate de a construi din mers doar acele intrări din tabel care sunt de fapt vizitate în timpul recunoașterii.

crabi

Meta-programul fermecător al lui Luca Cardelli pentru sistemul de ferestre Blit a eliberat crabi virtuali care cutreiera spațiul gol al ecranului, mușcând din ce în ce mai mult marginile ferestrelor active.

Câteva gânduri generale

Deși nu este vizibil din exterior, teoria și algoritmii au jucat un rol decisiv în crearea majorității acestor programe: typo, dc, struct, pascal, egrep. De fapt, aplicarea neobișnuită a teoriei este cea mai surprinzătoare.

Aproape jumătate din listă - pascal, struct, parts, eqn - au fost scrise inițial de femei, depășind cu mult numărul demografic al femeilor în informatică.

Douglas McIlroy
Martie 2020


Sursa: www.habr.com

Adauga un comentariu