Najlepsze programy uniksowe

Autor artykułu, Douglas McIlroy, jest amerykańskim matematykiem, inżynierem i programistą. Najbardziej znany jest z rozwijania potoku w systemie operacyjnym Unix, zasad programowania zorientowanego na komponenty oraz kilku oryginalnych narzędzi: spell, diff, sort, join, speak, tr.

Czasami trafia się na naprawdę wspaniałe programy. Po grzebaniu w mojej pamięci sporządziłem listę prawdziwych perełek Uniksa na przestrzeni lat. Zasadniczo są to dość rzadkie i niezbyt potrzebne programy. Ale to, co je wyróżnia, to ich oryginalność. Nie mogę sobie nawet wyobrazić, że sam wpadłem na pomysł któregokolwiek z nich.

Podziel się, jakie programy są również pod wrażeniem?

PDP-7 Uniksa

Na początek sam system Unix PDP-7. Jego prostota i moc sprawiły, że przeniosłem się z potężnego komputera typu mainframe do małej maszyny. Jest to kwintesencja hierarchicznego systemu plików, oddzielnej powłoki i kontroli procesów na poziomie użytkownika, której Multics na komputerze mainframe nie był w stanie osiągnąć po setkach osoboletnich prac rozwojowych. Wady Uniksa (takie jak struktura rekordów systemu plików) były równie pouczające i wyzwalające, jak jego innowacje (takie jak przekierowanie we/wy powłoki).

dc

Biblioteka matematyczna kalkulatora stacjonarnego o zmiennej precyzji Roberta Morrisa wykorzystała analizę błędów odwrotnych w celu określenia precyzji wymaganej na każdym kroku w celu osiągnięcia precyzji wyniku określonej przez użytkownika. Na Konferencji Inżynierii Oprogramowania NATO w 1968 r. w moim raporcie na temat komponentów oprogramowania zaproponowałem procedury referencyjne, które mogłyby zapewnić dowolną pożądaną dokładność, ale nie wiedziałem, jak zastosować je w praktyce. dc jest nadal jedynym znanym mi programem, który może to zrobić.

literówka

Literówka porządkuje słowa w tekście według ich podobieństwa do reszty tekstu. Błędy ortograficzne, takie jak „hte”, zwykle znajdują się na końcu listy. Robert Morris z dumą powiedział, że program będzie działał równie dobrze w każdym języku. Chociaż literówka nie pomaga znaleźć błędów fonetycznych, była prawdziwym dobrodziejstwem dla wszystkich zecerów i zrobiła wiele dobrego, zanim pojawił się znacznie mniej interesujący, ale dokładniejszy słownik sprawdzania pisowni.

Literówka jest równie nieoczekiwana w środku, jak na zewnątrz. Algorytm pomiaru podobieństwa opiera się na częstości występowania trygramów, które są zliczane w tablicy 26×26×26. Niewielka pamięć ledwo miała wystarczająco dużo miejsca na jednobajtowe liczniki, więc zaimplementowano schemat kompresji dużych liczb do małych liczników. Aby uniknąć przepełnienia, liczniki aktualizowano na zasadzie probabilistycznej, zachowując oszacowanie logarytmu wartości licznika.

równo

Wraz z pojawieniem się fotoskładu stało się możliwe, ale strasznie żmudne, drukowanie klasycznej notacji matematycznej. Lorinda Cherry postanowiła opracować język opisu wyższego poziomu i wkrótce dołączył do niej Brian Kernigan. Ich genialnym posunięciem było przeniesienie tradycji ustnej na piśmie, więc eqn było niezwykle łatwe do nauczenia. Pierwszy tego rodzaju preprocesor języka wyrażeń matematycznych, eqn, nie został znacznie ulepszony od tego czasu.

struct

Brenda Baker zaczęła opracowywać konwerter Fortan-Szczur wbrew radom swojego szefa, mnie. Pomyślałem, że może to prowadzić do specjalnego przeorganizowania oryginalnego tekstu. Będzie wolny od numerów instrukcji, ale poza tym nie będzie bardziej czytelny niż dobrze ustrukturyzowany kod Fortran. Brenda udowodniła, że ​​się myliłem. Odkryła, że ​​każdy program w języku Fortran ma formę o strukturze kanonicznej. Programiści woleli formę kanoniczną niż to, co sami pierwotnie napisali.

Pascal

Diagnostyka składni w kompilatorze stworzonym przez grupę Sue Graham w Berkeley była najbardziej pomocna, jaką kiedykolwiek widziałem — i została wykonana automatycznie. W przypadku błędu składni kompilator monituje o wstawienie tokenu, aby kontynuować analizę. Żadnej próby wyjaśnienia, co jest nie tak. Dzięki temu kompilatorowi nauczyłem się Pascala w jeden wieczór bez żadnej instrukcji.

strony

Ukryty w module WWB (Writer's Workbench). parts Lorinda Cherry określa części mowy dla słów w tekście angielskim na podstawie tylko małego słownika, zasad pisowni i gramatyki. Na podstawie tej adnotacji program WWB wyświetla wskaźniki stylometryczne tekstu, takie jak rozpowszechnienie przymiotników, zdań podrzędnych i zdań złożonych. Kiedy Lorinda udzieliła wywiadu w NBC's Today i mówiła o innowacyjnej kontroli gramatyki w tekstach WWB, była to pierwsza wzmianka o Unixie w telewizji.

egrep

Al Aho spodziewał się, że jego deterministyczny resolwer wyrażeń regularnych wyprzedzi klasyczny niedeterministyczny resolwer Kena. Niestety, ten ostatni już przechodził przez złożone wyrażenia regularne, podczas gdy egrep zbudował własną automatykę deterministyczną. Aby nadal wygrywać ten wyścig, Al Aho ominął klątwę wykładniczego wzrostu tablicy stanów automatu, wynajdując sposób na budowanie w locie tylko tych wpisów w tabeli, które są faktycznie odwiedzane podczas rozpoznawania.

kraby

Uroczy metaprogram Luca Cardelli dla systemu okienkowego Blit wypuścił wirtualne kraby, które wędrowały po pustej przestrzeni ekranu, coraz bardziej odgryzając krawędzie aktywnych okien.

Kilka ogólnych przemyśleń

Choć z zewnątrz tego nie widać, to teoria i algorytmy odegrały decydującą rolę w powstaniu większości z tych programów: typo, dc, struct, pascal, egrep. W rzeczywistości najbardziej zaskakujące jest niezwykłe zastosowanie tej teorii.

Prawie połowa listy — pascal, struct, parts, eqn — została pierwotnie napisana przez kobiety, znacznie przewyższając liczebnie kobiety w informatyce.

Douglasa McIlroya
Marzec, 2020


Źródło: www.habr.com

Dodaj komentarz