Der Autor des Artikels, Douglas McIlroy, ist ein amerikanischer Mathematiker, Ingenieur und Programmierer. Er ist am bekanntesten für die Entwicklung der Pipeline im Betriebssystem Unix, der Prinzipien der komponentenorientierten Programmierung und mehrerer origineller Tools: spell, diff, sort, join, speak, tr.
Manchmal stößt man auf wirklich bemerkenswerte Programme. Rückblickend habe ich eine Liste echter Unix-Juwelen über die Jahre zusammengestellt. In der Regel handelt es sich um recht seltene und nicht unbedingt essentielle Programme. Was sie jedoch auszeichnet, ist ihre Originalität. Ich kann mir gar nicht vorstellen, dass ich selbst auf die Idee eines dieser Programme gekommen wäre.
Teilen Sie mit, welche Programme Sie ebenfalls so beeindruckt haben?
PDP-7 Unix
Zuallererst, das PDP-7 Unix-System. Seine Einfachheit und Leistungsfähigkeit haben mich dazu gebracht, von einem leistungsstarken Mainframe auf eine winzige Maschine umzusteigen. Hier ist die Essenz eines hierarchischen Dateisystems, eine separate Shell und die Verwaltung von Prozessen auf Benutzerebene, was Multics auf Mainframes nach Hunderten von Arbeitsjahren nicht umsetzen konnte. Die Nachteile von Unix (z. B. die Struktur der Datensätze im Dateisystem) waren ebenso lehrreich und befreiend wie ihre Innovationen (z. B. die Umleitung von Ein- und Ausgaben in der Shell).
dc
Die mathematische Bibliothek für den Desktop-Rechner mit variabler Genauigkeit von Robert Morris nutzte die Rückverfolgbarkeitsanalyse von Fehlern, um die Genauigkeit zu bestimmen, die in jedem Schritt erforderlich war, um die vom Benutzer angegebene Genauigkeit des Ergebnisses zu erreichen. Auf der NATO-Konferenz für Softwaretechnik 1968 schlug ich in meinem Vortrag über Softwarekomponenten Referenzverfahren vor, die Ergebnisse jeder gewünschten Genauigkeit liefern können, aber ich wusste nicht, wie ich sie in der Praxis umsetzen sollte. dc bleibt bis heute das einzige mir bekannte Programm, das dazu in der Lage ist.
typo
Typo ordnet Wörter im Text nach ihrer Ähnlichkeit mit dem Rest des Textes an. Schreibfehler wie 'hte' neigen dazu, am Ende der Liste zu erscheinen. Robert Morris sagte stolz, dass das Programm für jede Sprache gleichermaßen gut funktionieren würde. Obwohl typo nicht hilft, phonemische Fehler zu finden, ist es eine echte Entdeckung für alle, die Text eingeben, und hat viel Nutzen gebracht, bevor die viel weniger interessante, aber präzisere Wörterbuch-Rechtschreibprüfung auftauchte.
Typo ist ebenso unerwartet strukturiert, wie es von außen scheint. Der Algorithmus zur Messung der Ähnlichkeit basiert auf der Häufigkeit von Trigrammen, die in einem Array von 26×26×26 betrachtet werden. Der winzigen Speicherkapazität fehlte kaum Platz für einbyte-Zähler; daher wurde ein Komprimierungsansatz für große Zahlen in kleine Zähler implementiert. Um Überläufe zu vermeiden, wurden die Zähler auf probabilistischer Basis aktualisiert, wodurch die Schätzung des Logarithmus des Zählerwerts unterstützt wurde.
eqn
Mit dem Auftauchen von Phototypesetting wurde es möglich, klassische mathematische Notationen zu drucken, was jedoch äußerst mühsam war. Lorinda Cherry beschloss, eine higher-level Beschreibungssprache zu entwickeln, und bald stieß Brian Kernighan zu ihr. Ihr genialer Zug bestand darin, die mündliche Tradition schriftlich festzuhalten, weshalb eqn überraschend leicht zu erlernen war. Als erster Preprocessor für mathematische Ausdrucksbeschreibung hat sich eqn seitdem kaum verändert.
struct
Brenda Baker begann mit der Entwicklung ihres Fortan-to-Ratfor-Konverters entgegen dem Rat ihres Vorgesetzten – mir. Ich dachte, das könnte zu einer speziellen Neuanordnung des Quelltextes führen. Er würde frei von Operatornummern sein, aber ansonsten nicht leserlicher als gut strukturierter Fortran-Code. Brenda bewies, dass ich mich irrte. Sie stellte fest, dass jede Fortran-Programm eine kanonisch strukturierte Form hat. Programmierer bevorzugten die kanonische Form gegenüber dem, was sie ursprünglich geschrieben hatten.
pascal
Die Syntaxdiagnose im Compiler, entwickelt von Sue Graham's Gruppe in Berkeley, war die nützlichste, die ich je gesehen habe – und sie wurde automatisch durchgeführt. Bei einem Syntaxfehler schlägt der Compiler vor, eine Lexeme einzufügen, um die syntaktische Analyse fortzusetzen. Es gab keine Versuche zu erklären, was nicht stimmt. Mit diesem Compiler habe ich Pascal an einem Abend gelernt, ohne dass ein Handbuch zur Hand war.
parts
Das in das WWB (Writer’s Workbench) Paket integrierte Modul parts Lorinda Cherry bestimmt die Wortarten von Wörtern im englischen Text basierend auf nur einem kleinen Wörterbuch, Rechtschreib- und Grammatikregeln. Aus dieser Annotation erzeugt das WWB-Programm stilometrische Kennzahlen des Textes, wie das Übergewicht von Adjektiven, Nebensätzen und komplexen Sätzen. Als Lorinda in der NBC-Sendung Today ein Interview gab und über die innovative Grammatikprüfung in WWB-Texten sprach, war das die erste Erwähnung von Unix im Fernsehen.
egrep
Alfred Aho hoffte, dass sein deterministischer regulärer Ausdrucks-Parser den klassischen nicht-deterministischen Parser von Ken übertreffen würde. Leider war letzterer bereits mit der Verarbeitung komplexer regulärer Ausdrücke beschäftigt, während egrep er seine deterministische Automatisierung baute. Um dennoch in diesem Rennen zu gewinnen, umging Alfred Aho das verflixte exponentielle Wachstum der Zustandsübergangstabelle der Automate, indem er eine Methode erfand, um nur die Einträge der Tabelle dynamisch zu generieren, die während der Erkennung tatsächlich besucht werden.
krabben
Das charmante Metaprogramm von Luca Cardelli für die Blit-Fensteranwendung erzeugte virtuelle Krabben, die durch den leeren Raum des Bildschirms wanderten und dabei immer mehr von den Rändern aktiver Fenster abknabberten.
Einige allgemeine Gedanken
Obwohl es von außen nicht sichtbar ist, haben Theorie und Algorithmen eine entscheidende Rolle bei der Entwicklung der meisten dieser Programme gespielt: typo, dc, struct, pascal, egrep. Tatsächlich ist die ungewöhnliche Anwendung der Theorie am erstaunlichsten.
Fast die Hälfte der Originalautoren — pascal, struct, parts, eqn — waren Frauen, was die demografischen Anteile von Frauen in der Informatik deutlich übersteigt.
Douglas McIlroy
März 2020
Quelle: habr.com
