The APL Programming Language Source Code

Software Gems: The Computer History Museum Historical Source Code Series

Ken Iverson at Harvard University

W ciągu pierwszych 50 lat ery komputerów wymyślono tysiące języków programowania. Wiele z nich było do siebie podobnych, a wiele podążało tradycyjną, ewolucyjną ścieżką od swoich poprzedników.

Ale niektóre rewolucyjne języki miały nachylenie, które odróżniało je od ich braci o bardziej ogólnym przeznaczeniu. LISP był przeznaczony do przetwarzania list. SNOBOL służył do manipulacji ciągami znaków. SIMSCRIPT służył do symulacji. APL był przeznaczony do matematyki, z naciskiem na przetwarzanie tablic.

To, co ostatecznie stało się APL, zostało po raz pierwszy wymyślone przez profesora Harvardu Kennetha E. Iversona w 1957 roku jako notacja matematyczna, a nie jako język programowania komputerowego. Chociaż istniały inne systemy symboli zorientowane na macierze, w tym zwięzła notacja tensorowa wymyślona przez Einsteina, były one zorientowane bardziej na analizę matematyczną, a mniej na syntezę algorytmów. Iverson, który był studentem Howarda Aikena, nauczał tego, co stało się znane jako „notacja Iversona” swoim studentom Harvardu, aby wyjaśnić algorytmy.

Iverson został zatrudniony przez IBM w 1960 roku, aby pracować z Adinem Falkoffem i innymi nad swoją notacją. W swojej słynnej książce z 1962 roku „A Programming Language” 1, mówi, że notacja jest do opisu „procedur … zwanych algorytmami lub programami”, i że jest to język, ponieważ „wykazuje znaczącą strukturę składniową”. Ale w tym momencie była to tylko notacja dla ludzi do czytania, a nie język do programowania komputerów. Książka podaje wiele przykładów jego użycia zarówno jako narzędzia opisowego (np. do dokumentowania definicji zestawów instrukcji komputerowych), jak i jako środka do wyrażania ogólnych algorytmów (np. sortowania i wyszukiwania). Przewidując opór wobec czegoś tak nowatorskiego, w przedmowie pisze: „Główną tezą tej książki jest to, że opisowa i analityczna moc odpowiedniego języka programowania w pełni wynagradza znaczny wysiłek wymagany do jego opanowania.” Być może chciał w ten sposób ostrzec, że opanowanie języka nie jest trywialne. Być może sygnalizował również, że jego zdaniem inne języki notacji były mniej niż „odpowiednie”.

Zespół, oczywiście, szybko zauważył, że notację można przekształcić w język programowania komputerów. Język ten, który od 1966 roku nosił nazwę APL, kładł nacisk na manipulację tablicami i używał niekonwencjonalnych symboli. Był jak żaden inny język programów komputerowych, który został wynaleziony.

APL stał się popularny, gdy IBM wprowadził „APL360” dla swojego komputera mainframe System/360. W przeciwieństwie do większości innych języków w tamtym czasie, APL360 był również kompletnym interaktywnym środowiskiem programowania. Programista, siedzący przy elektromechanicznej maszynie do pisania połączonej z komputerem współdzielonym w czasie, mógł wpisywać polecenia APL i otrzymywać natychmiastową odpowiedź. Programy mogły być definiowane, debugowane, uruchamiane i zapisywane na komputerze, który był jednocześnie używany przez dziesiątki innych osób.

Napisana całkowicie w języku asemblera 360, ta wersja APL przejęła kontrolę nad całą maszyną. Oprócz języka wysokiego poziomu implementowała kompletny system operacyjny z podziałem czasu.

Za zgodą IBM, Computer History Museum ma przyjemność udostępnić kod źródłowy wersji „XM6” APL z lat 1969-1972 dla Systemu/360 do użytku niekomercyjnego.

Plik tekstowy zawiera 37 567 linii, w których znajduje się kod, makra i definicje globalne. 90 pojedynczych plików jest oddzielonych komendami ’./ ADD”. Aby uzyskać dostęp do tego materiału, musisz zgodzić się na warunki licencji wyświetlanej tutaj, która zezwala tylko na użycie niekomercyjne i nie daje Ci prawa do licencjonowania go stronom trzecim poprzez umieszczanie kopii w innych miejscach w sieci.

Pobierz kod źródłowy APL360

Jürgen Winkelmann z ETH Zürich wykonał niesamowitą pracę przekształcając ten kod źródłowy w działający system. Aby uzyskać więcej informacji, zobacz MVT for APL Version 2.00.

Creating the APL Programming Language

Książka Iversona „A Programming Language” 1 używa graficznej notacji, która byłaby trudna do bezpośredniego użycia jako język programowania dla komputerów. Uważał ją za rozszerzenie algebry macierzy i używał wspólnych matematycznych konwencji typograficznych, takich jak indeksy, indeksy górne i rozróżnienia oparte na wadze lub czcionce znaków. Oto, na przykład, program do sortowania liczb:

Aby zlinearyzować notację do użytku jako język programowania komputerowego wpisywanego na klawiaturze, implementatorzy APL z pewnością musieli zrezygnować z użycia oznaczonych strzałek do przenoszenia sterowania. Ale jedną cechą, którą udało im się zachować, do pewnego stopnia, było użycie specjalnych symboli dla prymitywnych funkcji, jak pokazano w tym programie, który tworzy kody Huffmana:

APL używa symboli, które są bliższe standardowej matematyce niż programowaniu. Na przykład, symbolem podziału jest ÷, a nie /. Aby obsłużyć niekonwencjonalne symbole, APL360 użył specjalnie zaprojektowanej klawiatury z symbolami specjalnymi pisanymi dużymi literami.

APL360 użył specjalnie zaprojektowanej klawiatury

Mimo to, znaków specjalnych było więcej niż mogło się zmieścić na klawiaturze, więc niektóre były wpisywane przez nadpisanie dwóch znaków. Na przykład, znak „grade up” ⍋, prymitywny operator używany do sortowania, został utworzony przez wpisanie ∆ (shift H), następnie backspace, a potem ∣ (shift M). Nie było już miejsca na wielkie i małe litery, więc APL obsługiwał tylko wielkie litery.

Do drukowania programów Iverson i Falkoff nakłonili IBM do zaprojektowania specjalnej kulki do pisania dla ich terminali 1050 i 2741, które używały mechanizmu maszyny do pisania IBM Selectric.

Teraz programy mogły być zarówno wpisywane, jak i drukowane. Oto, na przykład, wydrukowana wersja programu z podręcznika 2 języka APL, który oblicza wyznacznik matematyczny macierzy:

Smak APL

APL jest zwięzłym językiem programowania wysokiego poziomu, który różni się od większości innych opracowanych w latach sześćdziesiątych pod kilkoma względami:

Kolejność obliczania: Wyrażenia w APL są obliczane od prawej do lewej, i nie ma hierarchii pierwszeństwa funkcji. Na przykład, wpisanie wyrażenia

2×4+3

powoduje, że komputer natychmiast wpisuje wartość wynikową

Wartością tą nie jest, jak w wielu innych językach z pierwszeństwem operatorów, 11. Oczywiście, nawiasy mogą być używane do grupowania podwyrażeń, aby zmienić kolejność oceny. Ogólna zasada jest taka, że prawy argument dowolnej funkcji jest wartością wyrażenia po jej prawej stronie.

Automatyczne tworzenie wektorów i tablic: Struktura wyższego wymiaru jest automatycznie tworzona przez ocenę wyrażenia, które ją zwraca, a skalary mogą być dowolnie mieszane. Na przykład,

A ← 2 + 1 2 3

tworzy wektor „1 2 3”, dodaje do niego skalar 2 i tworzy zmienną A, aby przechowywać wektor, którego wartością jest

3 4 5

Zmienne nigdy nie są deklarowane; są tworzone automatycznie i przyjmują rozmiar i kształt dowolnego wyrażenia, które jest im przypisane.

Mnogość prymitywów: APL posiada bogaty zestaw wbudowanych funkcji (i „operatorów”, które są stosowane do funkcji w celu uzyskania różnych funkcji), które operują na skalarach, wektorach, tablicach, nawet na obiektach wyższych wymiarów i ich kombinacjach. Na przykład, wyrażenie sumujące liczby w utworzonym powyżej wektorze „A” to po prostu

+/A

gdzie / jest operatorem „redukcji”, który powoduje, że funkcja po lewej stronie jest stosowana kolejno do wszystkich elementów operandu po prawej stronie. Wyrażenie obliczające średnią z liczb w A również używa prymitywnej funkcji ρ do określenia, ile elementów jest w A:

(+/A) ÷ ρA

Poniżej znajduje się kilka tabel z „APL360 User’s Manual” z 1970 roku, które dają wyobrażenie o mocy i zaawansowaniu wbudowanych funkcji i operatorów APL. (Kliknij na obrazki, aby uzyskać większe wersje.)

APL zachęca do innego myślenia o programowaniu i do używania tymczasowych, wielowymiarowych struktur danych jako wartości pośrednich, które są następnie redukowane przy użyciu potężnych prymitywów. Słynnym przykładem jest następujący krótki, ale kompletny program do obliczania wszystkich liczb pierwszych aż do R.

(~T∊T∘.×T)/T←1↓⍳R

Oto jak oblicza się to wyrażenie:

wyrażenie sześcienne

znaczenie

wartość, jeśli R wynosi 6

⍳R

Generuje wektor liczb od 1 do R.

1 2 3 4 5 6

T←1↓

Odrzuć pierwszy element wektora, a resztę przypisz do wektora tymczasowego T.

2 3 4 5 6

T∘.×T

Twórz zewnętrzny iloczyn mnożenia: tablicę, która przechowuje wynik mnożenia każdego elementu T przez każdy element T.

T∊

Użyj operatora „przynależności do zbioru”, aby znaleźć, które elementy T znajdują się w tablicy.

0 0 1 0 1

~

Negate the result to identify which elements of T are not in the table. Są to liczby całkowite, które nie mają żadnych wielokrotności w tablicy.

1 1 0 1 0

( )/T

Wybierz elementy T, które zidentyfikowaliśmy. Są to wszystkie liczby pierwsze mniejsze od R.

2 3 5

Zauważ, że w tym programie nie ma pętli. Potęga wyrażeń APL oznacza, że rozgałęzienia warunkowe i pętle są wymagane znacznie rzadziej niż w bardziej tradycyjnych językach programowania.

Operatory APL mogą być używane w prosty sposób do wszelkiego rodzaju obliczeń, które zwykle wymagałyby pętli. Na przykład, wyrażenie, które oblicza liczbę elementów wektora X, które są większe niż 100, to

+/X>100

To działa, ponieważ X>100 zwraca wektor bitów 0 i 1 pokazujący, które elementy X są większe niż 100, a +/ sumuje wszystkie bity w tym wektorze.

Ale wykonanie warunkowe i pętle są oczywiście czasami potrzebne. W świetle późniejszego rozwoju programowania strukturalnego, jedyny prymityw APL-a do przekazywania sterowania, instrukcja „GO TO LINE x” →, jest szczególnie słaba. Oto przykład funkcji, która oblicza największy wspólny dzielnik swoich dwóch argumentów. Ostatnia instrukcja tworzy pętlę przez rozgałęzienie na początek. W linii 2 warunkowe przekazanie sterowania do linii 0 powoduje wyjście funkcji i zwrócenie wartości ostatnio przypisanej do G.

Aby dowiedzieć się więcej o języku APL z lat sześćdziesiątych, zobacz podręcznik referencyjny „APL Language” 2 i „APL360 Primer” Paula Berry’ego z 1969 roku 4.

Język oczywiście ewoluował przez lata, a nowsze wersje zawierają struktury kontrolne, takie jak IF-THEN-ELSE.

Jak zaimplementowano APL

Pierwszą komputerową implementacją notacji APL był wsadowy interpreter języka napisany w FORTRANIE w 1965 roku dla komputera mainframe IBM 7090 przez Larry’ego Breeda w IBM Research Center w Yorktown Heights NY i Philipa Abramsa, wówczas absolwenta Uniwersytetu Stanforda.

Pierwsza interaktywna wersja została napisana wkrótce potem dla 7093 (eksperymentalny 7090 z pamięcią wirtualną) przez Larry’ego Breeda i Rogera Moore’a. Działała pod systemem TSM timesharing i była kapryśnie nazwana „IVSYS”, co rymuje się z „IBSYS”, nazwą dla standardowego systemu operacyjnego 7090. W e-mailu z 2012 roku Breed mówi,

IVSYS zapewniał logowanie, wylogowanie, natychmiastowe wykonanie i definicję funkcji; zapewniał przestrzenie robocze, zarówno aktywne, jak i przechowywane. Implementacja tego była rudymentarna; głównie używaliśmy tego, co projekt TSM oferował nam do logowania/wylogowywania/zapisywania plików. Mieliśmy tylko kilka tygodni na używanie 7093, zanim został wycofany z użytku, a Roger i ja zaczęliśmy planować samodzielny system na Systemie/360. W ciągu tych tygodni Ken i jego grupa po raz pierwszy zobaczyli, jak wyglądałby wykonywalny APL.

Inna implementacja podzbioru języka została wykonana w 1967 roku dla minikomputera IBM 1130.

Pierwsza implementacja APL, która znalazła szerokie zastosowanie poza IBM, była przeznaczona dla IBM System/360. Nazwana „APL360”, weszła do użytku jako pierwsza w IBM w listopadzie 1966 roku. (Zapis „APL360″, ponieważ odwrotny ukośnik był operatorem „rozszerzenia” APL, miał również ukryte znaczenie: „APL rozszerza 360″).

Breed mówi o czasie tuż przed,

Ten okres, początek 1966 roku, był czasem przejściowym od Notacji Iversona do APL. (W istocie, Adin wymyślił „APL” wiosną ’66.) Ulepszanie i rozszerzanie języka i środowiska trwało przez wiele lat. Nie było prawie żadnego kodu dodanego do wersji komercyjnej, tylko papierkowa robota.

Do sierpnia 1968 APL360 był dostępny dla klientów IBM jako niewspierany („Type III”) program w „Contributed Program Library” IBM 5. Głównymi implementatorami byli Larry Breed, Dick Lathwell i Roger Moore; inni, którzy wnieśli swój wkład to Adin Falkoff i Luther Woodrum.

Wcześniejsi programiści APL, od lewej do prawej: Dick Lathwell, Ken Iverson, Roger Moore, Adin Falkoff, Phil Abrams, Larry Breed. Zdjęcie zostało zrobione około 1983 roku.

Z powodu dynamicznej natury zmiennych APL, APL360 został zaimplementowany jako interpreter, a nie jako kompilator generujący kod maszynowy. Programy były przechowywane w wewnętrznej formie zwanej „codestring”, która bezpośrednio odpowiadała temu, co wpisał użytkownik. Interpreter badał ten kod w trakcie wykonywania programu i dynamicznie alokował i rekonfigurował zmienne, gdy wyrażenia były obliczane.

Pierwsze wersje APL360 przejęły kontrolę nad całą maszyną. Było to więc połączenie systemu operacyjnego, systemu plików, monitora timesharingowego, interpretera poleceń i języka programowania. Ze względu na ograniczoną pamięć główną, przestrzenie robocze użytkownika były w razie potrzeby wymieniane na bęben lub dysk. Wydajność była imponująca, co Larry Breed przypisuje, w swoim jasnym i zwięzłym opisie implementacji, zdolności dostosowania systemu operacyjnego do wymagań języka.

APL360 był językiem konwersacyjnym, który zapewniał szybką reakcję i wydajne wykonywanie poleceń aż dla 50 jednoczesnych użytkowników. Każdy użytkownik posiadał „aktywny obszar roboczy”, który przechowywał programy, zmienne i stan zawieszonego wykonywania programu. Komendy systemowe, takie jak „)LOAD”, „)SAVE” i „)COPY” utrzymywały bibliotekę przechowywanych przestrzeni roboczych użytkownika. Inne polecenia systemowe kontrolowały cechy języka; na przykład za pomocą „)ORIGIN” programista mógł kontrolować, czy wektory i tablice są numerowane od 0 czy od 1.

APL był pierwszym wprowadzeniem do interaktywnego podziału czasu dla wielu z pokolenia programistów, którzy cierpieli przez programowanie wsadowe z kartami dziurkowanymi.

Zastosowania APL

Nawet zanim był to język programowania komputerowego, notacja Iversona była użyteczna jako język do dokumentowania algorytmów dla ludzi. Klasycznym przykładem jest formalna definicja architektury zestawu instrukcji nowego komputera IBM System/360, która została opublikowana w artykule w IBM Systems Journal przez Adina Falkoffa, Kena Iversona i Eda Sussengutha w 1965 roku 7.

Opis, który jest raczej formalny niż werbalny, jest dokonany przez zestaw programów, oddziałujących poprzez wspólne zmienne, używane w połączeniu z pomocniczymi tabelami… Chociaż formalny opis jest kompletny i samowystarczalny, tekst jest dostarczony jako pomoc do wstępnego studium.

Ale tekst podany w pracy jest czymś znacznie więcej. Jest to wyjaśnienie linia po linii opisu formalnego, co oznacza, że jest to również demonstracja i wyjaśnienie mocy opisowej języka APL.

W notacji wykorzystano styl graficzny dla transferów kontrolnych, który był w książce Iversona. Tutaj, na przykład, znajduje się opis operacji dostępu do pamięci. (Kliknij, aby powiększyć.)

To właśnie przejście APL z notacji przeznaczonej do publikacji w interaktywny język programowania komputerowego spowodowało jego rozkwit. Gdy dostępna była implementacja APL360, IBM i inni stymulowali jego użycie poprzez produkcję różnorodnych aplikacji, takich jak te:

  • Starmap: Zestaw funkcji APL do obliczania i wykreślania pozycji gwiazd i planet. 8 9 Został napisany w 1973 roku przez Paula Berry’ego z IBM i Johna Thorstensena, wówczas studenta astronomii w Bryn Mawr college, obecnie profesora fizyki i astronomii w Dartmouth College. Wykorzystuje on klasyczne rozwiązania równań Keplera dla określonej daty i czasu oraz serię obrotów współrzędnych, aby pokazać, gdzie planety i gwiazdy pojawiłyby się w czaszy nieba.
  • IBGS: Interactive Business Game Simulation: „Ogólna komputerowa symulacja zarządzania obejmująca podejmowanie decyzji i planowanie w obszarach funkcjonalnych produkcji, marketingu i finansów.”
  • Zera i całki w APL: „Wykorzystując zarówno klasyczne metody, takie jak Newtona i Mullera, jak i ostatnio opracowane metody, takie jak Jenkinsa i Trauba, znajduje realne zera funkcji rzeczywistej, rzeczywiste i złożone zera wielomianu o współczynnikach rzeczywistych i złożonych oraz złożone zera funkcji złożonej.”
  • Graphpak – Interactive Graphics Package for APL360: „…możliwości, które rozciągają się od obsługi interfejsu graficznego na najniższym poziomie do kilku obszarów zastosowań na wyższych poziomach… Komponent wykreślania… liniowy lub logarytmiczny… dopasowywanie krzywych… Komponent geometrii opisowej pozwala na definiowanie, skalowanie, powiększanie, tłumaczenie, obracanie i wyświetlanie obiektów trójwymiarowych.”
  • Graphs and Histograms in APL: „produkuje krzywe i wykresy słupkowe na terminalu maszyny do pisania”.
  • APL Coordinate Geometry System: „rozwiązuje problemy geometrii współrzędnościowej interaktywnie na terminalu…do użytku przez geodetów, inżynierów budownictwa, urbanistów…”
  • APL/PDTS – Programming Development Tracking System: „…do pomocy kierownikom i planistom w monitorowaniu wydajności w stosunku do planu w projektach rozwoju programowania”. MINIPERT: „A Critical Path Method (CPM) system for Project Management”
  • APL Econometric Planning Language: „praktykujący ekonomista, prognostyk biznesowy lub nauczyciel otrzymuje łatwe w użyciu narzędzia do interaktywnego budowania modeli i ich rozwiązywania.”
  • APL Financial Planning System: „pozwala analitykowi i planiście finansowemu projektować raporty, określać zestawienia obliczeniowe, wprowadzać i zmieniać dane oraz uzyskiwać drukowane raporty z natychmiastową realizacją.”
  • APL Text Editor and Composer: „Ten program został zaprojektowany do interaktywnego przetwarzania tekstu na terminalu…Zawarte są w nim funkcje do wprowadzania, poprawiania, komponowania, drukowania i przechowywania tekstu…do użytku przez sekretarki, naukowców, inżynierów, administratorów i wszystkich innych, którzy produkują papiery, listy, raporty lub specyfikacje.”

Wiele z tych aplikacji kładło nacisk na interaktywność, co zapewniało ogromny wzrost produktywności w porównaniu z przetwarzaniem zadań wsadowych, bardziej typowym w tamtych czasach. Ponadto, APL pozwalał na znacznie szybsze tworzenie aplikacji. W wiadomości e-mail z 2012 roku Larry Breed zauważył,

We wszystkich dziedzinach szybkość, z jaką można pisać programy w języku APL, czyni go wartościowym do modelowania i prototypowania … Jeden przykład: Około roku 1973 firma Continental Can potrzebowała systemu inwentaryzacji dla swoich 21 zakładów produkcyjnych. Ich zespół programistów FORTRAN pracował przez rok, bez widocznego sukcesu. Jeden z handlowców STSC, w ciągu jednego weekendu, zbudował użyteczny, działający model w APL Plus.

Obszary, w których APL miał największą penetrację, dotyczyły zastosowań naukowych, aktuarialnych, statystycznych i finansowych. Szczegółowe informacje na temat rozwoju APL w ciągu pierwszych 25 lat jego istnienia można znaleźć w specjalnym numerze z 1991 roku czasopisma IBM System Journal 10, zawierającym 12 artykułów i jeden esej na ten temat.

APL pochwały i krytyka APL nie został pierwotnie zaprojektowany jako język programowania. Jak powiedział Iverson,

Początkowym motywem opracowania APL było dostarczenie narzędzia do pisania i nauczania. Chociaż APL był wykorzystywany głównie w programowaniu komercyjnym, nadal uważam, że jego najważniejsze zastosowanie pozostaje do wykorzystania: jako prosta, precyzyjna, wykonywalna notacja do nauczania szerokiej gamy przedmiotów.11

Z tak wieloma skrótowymi i niezwykłymi symbolami, programy komputerowe APL, podobnie jak notacja matematyczna, która je zainspirowała, mają zwięzłość i elegancję, które wielu uważa za pociągające. APL przyciąga fanatycznych zwolenników. Alan Perlis (pierwszy laureat Nagrody Turinga przyznawanej przez ACM w 1966 roku) był jednym z nich:

Przeciągnięcie wzrokiem po jednym zdaniu może ujawnić zawiłą, pomysłową i piękną grę operacji i kontroli, która w innych językach programowania jest możliwa do zaobserwowania dopiero po kilku stronach tekstu. Zaczynamy doceniać pojawienie się i znaczenie stylu. 12

Wielu uważa wolność wypowiedzi w APL za wyzwalającą.

Zwykłem określać go jako 'faszystowski język programowania’, ponieważ jest dyktatorsko sztywny. …Jeśli Pascal jest faszystowski, APL jest anarchistyczny. 13

Ale programy w APL są często kryptyczne i trudne do rozszyfrowania. Niektórzy żartowali, że jest to „język tylko do pisania”, ponieważ nawet autor programu może mieć później problemy z jego zrozumieniem. Inspiruje to programistyczne sztuczki. Trudno oprzeć się wyzwaniu napisania w APL „one-linera”, który zaimplementuje kompletny, złożony algorytm. Oto, na przykład, dwa różne one-linery APL, które implementują wersje „Gry w życie” Johna Conwaya:

life←{1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω}

Nie dla osób o słabym sercu, rzecz jasna. Holenderski informatyk Edsger Dijkstra powiedział,

APL to błąd, doprowadzony do perfekcji. Jest to język przyszłości dla technik programowania przeszłości: tworzy nowe pokolenie bumów kodowania. 14

Ale fani APL powiedzieliby, że kryptyczne kodowanie APL to zły styl programowania, który może być przypadłością każdego języka. APL dostarcza bogatszej palety do wyrażania algorytmów, argumentują, więc możesz rozwiązywać trudniejsze problemy szybciej i z mniejszym bałaganem składniowym.

Cokolwiek byś nie sądził, APL i języki, które zainspirował, takie jak APL2 i J, są wciąż aktywną częścią różnorodnego świata języków programowania.

Krótka biografia Kena Iversona

Kenneth Eugene Iverson urodził się 17 grudnia 1920 r. na farmie w pobliżu Camrose w prowincji Alberta w Kanadzie. Kształcił się w wiejskich szkołach jednopokojowych do końca 9 klasy, kiedy to porzucił szkołę, ponieważ był to szczyt kryzysu, a na rodzinnej farmie była praca do wykonania. Później powiedział, że jedynym celem kontynuowania nauki w szkole byłoby zostanie nauczycielem, a tego zawodu zdecydowanie nie chciał. Podczas długich zimowych miesięcy samodzielnie uczył się rachunków.

W 1942 roku został powołany do wojska, a podczas służby odbył tyle kursów korespondencyjnych, że prawie ukończył szkołę średnią. Po odbyciu służby wojskowej uzyskał tytuł licencjata w dziedzinie matematyki i fizyki na Queen’s University w Kingston Ontario, a następnie tytuł magistra fizyki na Uniwersytecie Harvarda. W 1954 roku ukończył studia doktoranckie pod kierunkiem pioniera komputerowego Howarda Aikena, z pracą zatytułowaną „Machine Solutions of Linear Differential Equations: Applications to a Dynamic Economic Model”.

Po ukończeniu doktoratu Iverson dołączył do wydziału Harvardu, aby uczyć w nowym programie automatycznego przetwarzania danych Aikena. Był tam przez jeden rok jako instruktor, a przez pięć lat jako adiunkt. Stawał się coraz bardziej sfrustrowany nieadekwatnością konwencjonalnej notacji matematycznej do wyrażania algorytmów, więc zaczął wymyślać własne.

W 1960 roku Iverson dołączył do nowego Centrum Badawczego IBM w Yorktown Heights, w Nowym Jorku, za radą Fredericka Brooksa, który był jednym z jego wykładowców na Harvardzie, a teraz był w IBM. Obaj współpracowali nad dalszym rozwojem nowej notacji. W 1962 roku Ken opublikował klasyczną już książkę „A Programming Language” 1, której tytuł nadał nazwę APL notacji, która do tej pory była nieformalnie nazywana „notacją Iversona”.

Iverson kontynuował pracę nad rozwojem APL przez cały okres swojej kadencji w IBM. W 1980 roku opuścił IBM i wrócił do Kanady, by pracować dla firmy I.P. Sharp Associates, która stworzyła opartą na APL usługę timesharingu.

W 1987 roku „przeszedł na emeryturę z płatnego zatrudnienia” i poświęcił się całkowicie rozwojowi bardziej nowoczesnego dialektu APL. APL był z powodzeniem używany do celów komercyjnych, ale Iverson chciał opracować nową, prostą, wykonywalną notację, bardziej odpowiednią do nauczania, która byłaby dostępna po niskich kosztach. Pierwsza implementacja tego języka, nazwana J, została ogłoszona na konferencji użytkowników APL90.

Zdolność Iversona do tworzenia takich języków wynikała z jego „czystej radości z języka i słów”, wspomina jego córka Janet Cramer. „Czytał słowniki tak, jak ludzie czytają powieści”. Iverson uważał, że ważne jest, aby język, zarówno angielski, jak i matematyka, komunikował się jasno i zwięźle.

Z współpracownikami, do których należał jego syn Eric, Iverson kontynuował pracę nad rozwojem J i nadal płodnie publikował. W sobotę, 16 października 2004 roku doznał udaru mózgu – podczas pracy nad samouczkiem J – i zmarł trzy dni później, 19 października, w wieku 83 lat.

Jest wiele historii o Kenie Iversonie. Oto kilka z nich:

Ken nie dostał etatu na Harvardzie. Odsiedział swoje pięć lat jako asystent profesora, a wydział postanowił nie wystawiać go do awansu. Zapytałem go, co poszło nie tak, a on odpowiedział: „Cóż, dziekan wezwał mnie i powiedział: 'Problem w tym, że nie opublikowałeś niczego poza tą jedną małą książeczką'”. Ta jedna mała książeczka dostała później nagrodę Turinga. Myślę, że jest to raczej komentarz do konwencjonalnego sposobu myślenia o procedurach awansu niż komentarz do Kena; jest to komentarz do procedury akademickiej i do Harvardu.

– Fred Brooks, A Celebration of Kenneth Iverson, 2004-11-30

W jednym z wczesnych wykładów Ken wyjaśniał zalety tolerancyjnego porównywania. Jeden z członków publiczności zapytał z niedowierzaniem: „Na pewno nie masz na myśli, że kiedy A=B i B=C, A może nie być równe C?”. Bez owijania w bawełnę Ken odpowiedział: „Każdy stolarz to wie!” i przeszedł do następnego pytania.

– Paul Berry

W towarzyskiej rozmowie z Kenem powiedziałem: „Wiesz, Ken, jesteś moim ulubionym projektantem języków, a Don Knuth jest moim ulubionym programistą”. A Ken natychmiast odpowiedział: „Co jest nie tak z moim programowaniem?”.

– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30

W 1973 lub 1974 roku Ken i ja wygłosiliśmy w Kodaku w Rochester wykład dla grupy 40 do 50 programistów, od których wymagano pracy w PL/I. W przerwie na pytania jeden ze starszych pracowników powiedział: „Jeśli dobrze rozumiem, co mówicie, sugerujecie, że powinniśmy przyjąć nowy sposób myślenia.” A Ken podskoczył ze swojego krzesła i powiedział: „Tak! Dokładnie to mówię!”.

– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30

Podziękowania

Podziękowania dla Michaela Karasicka, Yvonne Perkins, Steve’a Selbsta i Kena Edwardsa z IBM za zakończenie mojej dziesięcioletniej odysei w celu uzyskania zgody na wydanie kodu źródłowego APL. Podziękowania dla Curtisa Jonesa, Larry’ego Breeda, Paula Berry’ego i Roya Sykesa za ich komentarze do wczesnej wersji tego artykułu.

– Len Shustek

Bibliografia

  1. K. E. Iverson, A Programming Language, John Wiley and Sons, Inc, 1962.
  2. IBM, „APL Language”, marzec 1975.
  3. IBM, „APL360 User’s Manual,” marzec 1970.
  4. IBM, Paul Berry, „APL360 Primer – Student Text,” 1969.
  5. L. M. Breed i R. H. Lathwell, „APL360,” 1968.
  6. L. M. Breed i R. H. Lathwell, „The Implementation of APL360,” in ACM Symposium on Experimental Systems for Interactive Applied Mathematics, 1967.
  7. A. D. Falkoff, K. E. Iverson and E. H. Sussenguth, „A Formal Description of SYSTEM/360,” IBM Systems Journal, vol. 3, no. 3, pp. 198-261, 1964.
  8. P. C. Berry and J. R. Thorstensen, „Starmap,” 1978.
  9. P. C. Berry and J. R. Thorstensen, „Starmap,” IBM Systems Development Division, 1975.
  10. IBM Systems Journal, vol. 30, no. 4, 1991.
  11. K. E. Iverson, „A Personal View of APL,” IBM Systems Journal, vol. 30, no. 4, 1991.
  12. A. J. Perlis, „In Praise of APL: A Language for Lyrical Programming,” SIAM News, June 1977.
  13. B. McCormick, „A Programming Language,” 2000,2002.
  14. E. W. Dijkstra, „How Do We Tell Truths That Might Hurt?”,” SIGPLAN Notices, vol. 17, no. 5, May 1982.
  15. A. D. Falkoff and K. E. Iverson, „The Design of APL,” IBM Journal of Research and Development, vol. 17, no. 4, 1973.
  16. A. D. Falkoff i K. E. Iverson, „The Evolution of APL,” SIGPLAN Notices, vol. 13, nr 8, s. 45-57, sierpień 1978.
  17. L. Breed, „How We Got to APL1130,” 10 maja 2004.
  18. ACM, „Proceedings of the APL’69 Conference on APL,” SUNY Binghamton, NY, 1969.
  19. „The Origins of APL – 1974”; wspaniały wywiad z oryginalnymi twórcami APL.

Historyczne wydania kodu źródłowego

  • Kod źródłowy MacPaint i QuickDraw, 18 lipca 2010
  • Kod źródłowy języka programowania APL, 10 października 2012
  • Kod źródłowy Adobe Photoshop, Luty 13, 2013
  • Apple II DOS Source Code, Listopad 12, 2013
  • Microsoft MS-DOS Early Source Code, Marzec 25, 2014
  • Microsoft Word for Windows Version 1.1a Source Code, March 25, 2014
  • Early Digital Research CP/M Source Code, October 1, 2014
  • Xerox Alto Source Code, October 21, 2014
  • Electronic Arts DeluxePaint Early Source Code, July 22, 2015

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.