Parimad Unixi programmid

Artikli autor Douglas McIlroy on Ameerika matemaatik, insener ja programmeerija. Teda tuntakse eelkõige Unixi operatsioonisüsteemis konveieri arendamise, komponentidele orienteeritud programmeerimise põhimõtete ja mitmete originaalsete utiliitide poolest: õigekiri, diff, sortimine, liitumine, kõnelemine, tr.

Mõnikord kohtate tõeliselt suurepäraseid programme. Pärast mälus tuhnimist koostasin aastate jooksul nimekirja tõelistest Unixi kalliskividest. Põhimõtteliselt on need üsna haruldased ja mitte nii vajalikud programmid. Kuid see, mis paneb need silma, on nende originaalsus. Ma isegi ei kujuta ette, et ma ise mõne neist ideele tulin.

Jagage, millised programmid teile samuti nii muljet avaldavad?

PDP-7 Unix

Alustuseks PDP-7 Unixi süsteem ise. Selle lihtsus ja võimsus panid mind liikuma võimsalt suurarvutilt tillukesse masinasse. See on põhiline hierarhiline failisüsteem, eraldi kest ja kasutajatasemel protsessijuhtimine, mida suurarvuti Multics pole pärast sadu inimaastaid kestnud arendustööd suutnud saavutada. Unixi puudused (näiteks failisüsteemi kirjestruktuur) olid sama õpetlikud ja vabastavad kui selle uuendused (näiteks shell I/O ümbersuunamine).

dc

Robert Morrise muutuva täpsusega töölauakalkulaatori matemaatikateek kasutas pöördveaanalüüsi, et määrata igas etapis kasutaja määratud tulemuse täpsuse saavutamiseks vajalik täpsus. 1968. aasta NATO tarkvaratehnoloogia konverentsil pakkusin oma raportis tarkvarakomponentide kohta välja võrdlusprotseduurid, mis võiksid anda soovitud täpsuse, kuid ma ei teadnud, kuidas neid praktikas rakendada. dc on siiani ainus programm, mida ma tean, mis seda teha suudab.

viga

Kirjaviga järjestab sõnu tekstis vastavalt nende sarnasusele ülejäänud tekstiga. Õigekirjavead nagu "hte" kipuvad olema loendi lõpus. Robert Morris ütles uhkusega, et programm töötaks ühtviisi hästi iga keele puhul. Ehkki kirjaviga ei aita teil foneetilisi vigu leida, oli see tõeline õnnistus kõikidele trükiladujatele ja sellest oli palju kasu, enne kui tuli kasutusele palju vähem huvitav, kuid täpsem sõnastiku õigekirjakontroll.

Kirjaviga on nii seest kui väljast sama ootamatu. Sarnasuse mõõtmise algoritm põhineb trigrammide esinemissagedusel, mida loendatakse 26×26×26 massiivina. Väikeses mälus oli napilt ruumi ühebaidiste loendurite jaoks, mistõttu rakendati skeem suurte arvude tihendamiseks väikesteks loenduriteks. Ülevoolu vältimiseks uuendati loendureid tõenäosuspõhiselt, säilitades loenduri väärtuse logaritmi hinnangu.

eqn

Fototrükkimise tulekuga sai võimalikuks, kuid kohutavalt tüütuks trükkida klassikalist matemaatilist tähistust. Lorinda Cherry otsustas välja töötada kõrgema taseme kirjelduskeele ja peagi liitus temaga Brian Kernigan. Nende suurepärane samm oli suulise traditsiooni kirjutamine, nii et eqni oli märkimisväärselt lihtne õppida. Esimest omataolist matemaatilise väljenduskeele eelprotsessorit eqn pole sellest ajast peale palju täiustatud.

struktuur

Brenda Baker alustas oma Fortan-Ratfor muunduri arendamist oma ülemuse minu nõuannete põhjal. Arvasin, et see võib kaasa tuua originaalteksti erilise ümberjärjestamise. See ei sisalda avalduse numbreid, kuid muidu pole see loetavam kui hästi struktureeritud Fortrani kood. Brenda tõestas, et ma eksisin. Ta avastas, et igal Fortrani programmil on kanooniliselt struktureeritud vorm. Programmeerijad eelistasid kanoonilist vormi, mitte seda, mida nad ise algselt kirjutasid.

Pascal

Sue Grahami Berkeley töörühma loodud kompilaatori süntaksidiagnostika oli kõige kasulikum, mida ma kunagi näinud olen – ja seda tehti automaatselt. Süntaksivea korral palub kompilaator parsimise jätkamiseks sisestada märgi. Ei üritagi selgitada, mis viga on. Selle kompilaatoriga õppisin Pascali ühe õhtuga selgeks, ilma et oleks käsiraamatut käepärast olnud.

osad

Peidetud WWB (Writer's Workbench) mooduli sisse parts Lorinda Cherry määrab ingliskeelses tekstis sõnade kõneosad, tuginedes vaid väikesele sõnastikule, õigekirja- ja grammatikareeglitele. Selle annotatsiooni põhjal kuvab WWB programm teksti stilomeetrilisi näitajaid, nagu omadussõnade, kõrvallausete ja keeruliste lausete levimus. Kui Lorindat intervjueeriti NBC saates Today ja ta rääkis uuenduslikust grammatikakontrollist WWB tekstides, mainiti Unixi esmakordselt televisioonis.

egrep

Al Aho eeldas, et tema deterministlik regulaaravaldise lahendaja ületab Keni klassikalise mittedeterministliku lahendaja. Kahjuks oli viimane juba läbimas keerulisi regulaaravaldisi, samas egrep ehitas oma deterministliku automaatika. Et see võistlus ikkagi võita, sai Al Aho mööda automaadi olekutabeli eksponentsiaalse kasvu needusest, leiutades viisi, kuidas ehitada käigu pealt ainult need tabeli sissekanded, mida äratundmise käigus ka tegelikult külastatakse.

krabisid

Luca Cardelli võluv metaprogramm Blit aknasüsteemi jaoks vabastas virtuaalsed krabid, mis tiirutasid tühjas ekraaniruumis, hammustades aktiivsete akende servi üha enam.

Mõned üldised mõtted

Kuigi see pole väljastpoolt näha, mängisid enamiku nende programmide loomisel otsustavat rolli teooria ja algoritmid: trükiviga, dc, struct, pascal, egrep. Tegelikult on kõige üllatavam teooria ebatavaline rakendamine.

Peaaegu pooled nimekirjast – pascal, struct, osad, eqn – olid algselt naiste kirjutatud, ületades arvutiteaduse naiste demograafilist arvu tunduvalt.

Douglas McIlroy
Märtsil 2020


Allikas: www.habr.com

Lisa kommentaar