Az APL programozási nyelv forráskódja

Software Gems: The Computer History Museum Historical Source Code Series

Ken Iverson a Harvard Egyetemen

A számítástechnika korának első 50 évében több ezer programozási nyelvet találtak fel. Sokan közülük hasonlóak voltak, és sokan az elődeik hagyományos, evolúciós útját követték.

De néhány forradalmi nyelvnek volt egy olyan vonása, amely megkülönböztette őket az általánosabb célú testvéreiktől. A LISP a listafeldolgozásra szolgált. A SNOBOL a karakterláncok manipulálására szolgált. A SIMSCRIPT a szimulációra szolgált. Az APL pedig a matematikát szolgálta, a hangsúlyt a tömbfeldolgozásra helyezve.

Az APL-t, amely végül APL lett, Kenneth E. Iverson harvardi professzor találta ki először 1957-ben matematikai jelölésként, nem pedig számítógépes programozási nyelvként. Bár léteztek más mátrixorientált szimbólumrendszerek is, köztük az Einstein által kitalált tömör tenzorjelölés, ezek inkább a matematikai elemzésre és kevésbé az algoritmusok szintézisére irányultak. Iverson, aki Howard Aiken tanítványa volt, a Harvardon tanult diákjainak az algoritmusok magyarázatára az “Iverson-notáció” néven ismertté vált módszert tanította.

1960-ban az IBM felvette Iversont, hogy Adin Falkoffal és másokkal együtt dolgozzon a notációján. Az 1962-ben megjelent, ma már híres “A programozási nyelv” című könyvében 1 azt írja, hogy a notáció “algoritmusoknak vagy programoknak nevezett eljárások… leírására” szolgál, és hogy azért nyelv, mert “jelentős szintaktikai struktúrát mutat”. De akkoriban ez még csak egy jelölés volt, amit az emberek olvashatnak, nem pedig a számítógépek programozására szolgáló nyelv. A könyv számos példát hoz a használatára, mind leíró eszközként (például a számítógépes utasításkészletek meghatározásának dokumentálására), mind általános algoritmusok (például rendezés és keresés) kifejezésére. Elébe menve az ilyen újdonsággal szembeni ellenállásnak, az előszóban azt mondja: “E könyv központi tézise, hogy egy megfelelő programozási nyelv leíró és elemző ereje bőségesen meghálálja az elsajátításához szükséges jelentős erőfeszítést”. Talán arra figyelmeztetett, hogy a nyelv elsajátítása nem triviális. Talán azt is jelezte, hogy szerinte más jelölőnyelvek kevésbé voltak “megfelelőek”.

A csapat persze hamarosan belátta, hogy a jelölésből számítógépek programozására alkalmas nyelvet lehet csinálni. Ez a nyelv, amelyet 1966-tól APL-nek neveztek el, a tömbök manipulálására helyezte a hangsúlyt, és szokatlan szimbólumokat használt. Olyan volt, mint egyetlen más számítógépes programnyelv sem, amelyet addig feltaláltak.

Az APL akkor vált népszerűvé, amikor az IBM bevezette az “APL360”-at a System/360-as nagyszámítógépéhez. A legtöbb más nyelvtől eltérően abban az időben az APL360 egy teljes interaktív programozási környezet is volt. A programozó egy elektromechanikus írógépnél ülve, amely egy időzített számítógéphez kapcsolódott, beírhatta az APL utasításokat, és azonnali választ kapott. A programokat egy olyan számítógépen lehetett definiálni, hibakeresni, futtatni és menteni, amelyet egyidejűleg több tucat másik ember is használt.

A teljes egészében 360-as assembly nyelven írt APL ezen változata átvette az irányítást az egész gép felett. A magas szintű nyelv mellett egy teljes timesharing operációs rendszert is megvalósított.

A Computer History Museum az IBM engedélyével örömmel bocsátja rendelkezésre az APL 1969-1972-es, System/360-ra készült “XM6” verziójának forráskódját nem kereskedelmi célú felhasználásra.

A szövegfájl 37 567 sort tartalmaz, amely kódot, makrókat és globális definíciókat tartalmaz. A 90 különálló fájlt ‘./ ADD” parancsok választják el egymástól. Az anyaghoz való hozzáféréshez el kell fogadnia az itt megjelenített licenc feltételeit, amely csak a nem kereskedelmi célú felhasználást engedélyezi, és nem jogosítja fel arra, hogy harmadik félnek licencelje az anyagot másolatok máshova történő közzétételével az interneten.

Az APL360 forráskód letöltése

Jürgen Winkelmann az ETH Zürichben elképesztő munkát végzett abban, hogy ezt a forráskódot futtatható rendszerré alakítsa. További információért lásd: MVT for APL Version 2.00.

Az APL programozási nyelv megalkotása

Iverson “A programozási nyelv” című könyve 1 olyan grafikus jelölést használ, amelyet nehéz lett volna közvetlenül számítógépes programozási nyelvként használni. A mátrixalgebra kiterjesztésének tekintette, és olyan általános matematikai tipográfiai konvenciókat használt, mint az alul- és felülírások, valamint a karakterek súlyán vagy betűtípusán alapuló megkülönböztetések. Itt van például egy számok rendezésére szolgáló program:

Az APL megvalósítóinak minden bizonnyal fel kellett adniuk a felcímkézett nyilak használatát a vezérlés átvitelére, hogy a jelölést számítógépes programozási nyelvként, billentyűzeten gépelve lehessen használni. De az egyik jellemző, amit bizonyos mértékig meg tudtak tartani, az a speciális szimbólumok használata a primitív függvényekhez, amint azt ez a Huffman-kódokat létrehozó program szemlélteti:

Az APL olyan szimbólumokat használ, amelyek közelebb állnak a standard matematikához, mint a programozáshoz. Például az osztás szimbóluma ÷, nem pedig /. A nem szokványos szimbólumok támogatásához az APL360 egy egyedi tervezésű billentyűzetet használt, ahol a speciális szimbólumok nagybetűsek voltak.

Az APL360 egyedi tervezésű billentyűzetet használt

Még így is több speciális karakter volt, mint amennyi a billentyűzeten elfért, ezért néhányat két karakter áthúzásával írtak be. Például a “grade up” karaktert ⍋, a rendezéshez használt primitív operátort ∆ (shift H), majd backspace, majd ∣ (shift M) beírásával hozták létre. A kis- és nagybetűknek nem maradt hely, ezért az APL csak a nagybetűket támogatta.

A programok nyomtatásához Iverson és Falkoff rávették az IBM-et, hogy tervezzenek egy speciális betűgolyót az 1050-es és 2741-es termináljaikhoz, amelyek az IBM Selectric írógép mechanizmusát használták.

A programokat most már egyszerre lehetett begépelni és kinyomtatni. Itt van például egy program nyomtatott változata az APL Language manual 2-ből, amely egy mátrix matematikai determinánsát számítja ki:

A Taste of APL

Az APL egy tömör, magas szintű programozási nyelv, amely több szempontból is különbözik az 1960-as években kifejlesztett legtöbb más nyelvtől:

A kiértékelés sorrendje: Az APL-ben a kifejezések kiértékelése jobbról balra történik, és nincs hierarchia a függvények rangsorában. Például a

2×4+3

kifejezés beírása arra készteti a számítógépet, hogy azonnal beírja a kapott értéket

Az érték nem 11, mint sok más nyelvben, ahol operátorok precedenciája van. Természetesen zárójeleket használhatunk a részkifejezések csoportosítására, hogy megváltoztassuk az értékelési sorrendet. Általános szabály, hogy bármely függvény jobb oldali argumentuma a tőle jobbra lévő kifejezés értéke.

Vektorok és tömbök automatikus létrehozása: Egy magasabb dimenziós struktúra automatikusan létrejön az azt visszaadó kifejezés kiértékelésével, és a skalárok szabadon keverhetők. Például,

A ← 2 + 1 2 3

létrehozza az “1 2 3” vektort, hozzáadja a 2 skalárt, és létrehozza az A változót annak a vektornak a tárolására, amelynek értéke

3 4 5

A változókat soha nem deklaráljuk; automatikusan létrehozzuk őket, és annak a kifejezésnek a méretét és alakját veszik fel, amelyet hozzájuk rendelünk.

A primitívek sokasága: Az APL a beépített függvények (és a függvényekre alkalmazott “operátorok”, amelyek különböző függvényeket eredményeznek) gazdag készletével rendelkezik, amelyek skalárral, vektorokkal, tömbökkel, sőt magasabb dimenziós objektumokkal és ezek kombinációival operálnak. Például a fent létrehozott “A” vektorban lévő számok összegzésére szolgáló kifejezés egyszerűen

+/A

ahol a / a “redukciós” operátor, amely a bal oldali függvényt a jobb oldali operandus összes elemére egymás után alkalmazza. Az A-ban lévő számok átlagának kiszámítására szolgáló kifejezés szintén a ρ primitív függvényt használja annak meghatározására, hogy hány elem van A-ban:

(+/A) ÷ ρA

Itt van néhány táblázat az 1970-es “APL360 User’s Manual” 3 című kiadványból, amelyek ízelítőt adnak a beépített APL függvények és operátorok erejéből és kifinomultságából. (Kattintson a képekre a nagyobb változatért.)

Az APL arra ösztönöz, hogy másképp gondolkodjunk a programozásról, és használjunk ideiglenes, nagy dimenziós adatszerkezeteket köztes értékként, amelyeket aztán a nagy teljesítményű primitívek segítségével redukálunk. Egy híres példa a következő rövid, de teljes program az összes prímszám kiszámítására R-ig.

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

Íme a kifejezés kiértékelése:

kifejezés

jelentése

értéke, ha R 6

⍳R

Generálunk egy számvektort 1-től R-ig.

1 2 3 4 4 5 6

T←1↓

Hagyjuk a vektor első elemét, a többit pedig rendeljük a T ideiglenes vektorhoz.

2 3 4 4 5 6

T∘.×T

Készítsük el a szorzás külső szorzatát: egy táblázatot, amely T minden elemének T minden elemével való szorzásának eredményét tartalmazza.

T∊

A “halmazhoz tartozás” operátor segítségével keressük meg, hogy T mely elemei vannak a táblázatban.

0 0 1 0 1

~

Negálja az eredményt annak megállapítására, hogy T mely elemei nincsenek a táblázatban. Ezek azok az egész számok, amelyeknek nincs többszöröse a táblázatban.

1 1 0 1 0

( )/T

Válasszuk ki T azon elemeit, amelyeket azonosítottunk. Ezek mind az R-nél kisebb prímszámok.

2 3 5

Megjegyezzük, hogy ebben a programban nincsenek ciklusok. Az APL kifejezések ereje azt jelenti, hogy feltételes elágazásokra és ciklusokra sokkal ritkábban van szükség, mint a hagyományosabb programozási nyelvekben.

Az APL operátorok egyszerű módon használhatók mindenféle számításhoz, amelyekhez általában ciklusokra lenne szükség. Például egy kifejezés, amely kiszámítja, hogy az X vektor hány eleme nagyobb 100-nál, a következő

+/X>100

Ez azért működik, mert az X>100 egy 0-ból és 1-ből álló bitvektort ad vissza, amely megmutatja, hogy X mely elemei nagyobbak 100-nál, és a +/ összeadja a vektor összes bitjét.

De természetesen néha szükség van feltételes végrehajtásra és ciklusokra. A strukturált programozás későbbi fejlődésének fényében az APL egyetlen vezérlésátadásra szolgáló primitívje, a “GO TO LINE x” → utasítás különösen gyenge. Íme egy példa egy olyan függvényre, amely kiszámítja két argumentumának legnagyobb közös osztóját. Az utolsó utasítás egy hurkot hoz létre azáltal, hogy elágazik az elejére. A 2. sorban a vezérlés feltételes átadása a 0. sorba a függvény kilépését és a G-hez utoljára rendelt érték visszaadását eredményezi.

Az 1960-as évek APL nyelvéről többet megtudhatunk az “APL Language” referenciakézikönyvből 2 és Paul Berry 1969-es “APL360 Primer”-jéből 4.

A nyelv természetesen fejlődött az évek során, és az újabb verziók olyan vezérlési struktúrákat tartalmaznak, mint az IF-THEN-ELSE.

Hogyan valósították meg az APL-t

Az APL jelölés első számítógépes megvalósítása egy batch-orientált nyelvi értelmező volt, amelyet 1965-ben FORTRAN nyelven írtak az IBM 7090-es nagyszámítógépre Larry Breed az IBM Research Centerben Yorktown Heights NY-ben és Philip Abrams, aki akkor a Stanford University végzős hallgatója volt.

Az első interaktív változatot nem sokkal később Larry Breed és Roger Moore írták a 7093-asra (egy kísérleti 7090-es virtuális memóriával). A TSM timesharing rendszer alatt futott, és szeszélyesen “IVSYS”-nek nevezték el, ami rímel az “IBSYS”-re, a szabványos 7090-es operációs rendszer nevére. Egy 2012-es e-mailben Breed azt írja,

Az IVSYS biztosította a bejelentkezést, a kijelentkezést, az azonnali végrehajtást és a funkciók meghatározását; aktív és tárolt munkaterületeket is biztosított. Ezek megvalósítása kezdetleges volt; többnyire azt használtuk, amit a TSM projekt kínált nekünk a bejelentkezéshez/kilépéshez/fájlok mentéséhez. A 7093-at csak néhány hétig használhattuk, mielőtt kivonták volna a forgalomból, és Roger és én elkezdtük egy önálló rendszer tervezését a System/360-on. Ezekben a hetekben Ken és csoportja először látta, milyen lesz a futtatható APL.

A nyelv egy részhalmazának egy másik implementációja 1967-ben készült el az IBM 1130-as miniszámítógépre.

Az APL első olyan implementációja, amelyet az IBM-en kívül széles körben használtak, az IBM System/360 volt. Az “APL360” nevet viselő program 1966 novemberében állt először szolgálatba az IBM-en belül. (Az “APL360″ jelölésnek, mivel a backslash az APL “bővítő” operátora volt, rejtett jelentése is volt: “Az APL kiterjeszti a 360-at″).

Breed azt mondja az ezt közvetlenül megelőző időszakról,

Ez az időszak, 1966 eleje, az Iverson jelölésről az APL-re való átmenet időszaka volt. (Valóban, Adin ’66 tavaszán találta ki az “APL”-t.) A nyelv és a környezet finomítása és bővítése még évekig folytatódott. Szinte semmilyen kódot nem adtak hozzá a kereskedelmi változat elkészítéséhez, csak papírmunkát végeztek.

1968 augusztusára az APL360 már elérhető volt az IBM ügyfelei számára, mint nem támogatott (“Type III”) program az IBM “Contributed Program Library”-ben 5. A fő megvalósítók Larry Breed, Dick Lathwell és Roger Moore voltak; mások, akik hozzájárultak, Adin Falkoff és Luther Woodrum voltak.

Kora APL fejlesztők, balról jobbra: Dick Lathwell, Ken Iverson, Roger Moore, Adin Falkoff, Phil Abrams, Larry Breed. A kép 1983 körül készült.

Az APL-változók dinamikus jellege miatt az APL360-at nem gépi kódot generáló fordítóprogramként, hanem értelmezőként valósították meg. A programokat egy “codestring”-nek nevezett belső formában tárolták, amely közvetlenül megfelelt annak, amit a felhasználó beírt. Az értelmező ezután a program végrehajtása közben megvizsgálta a codestringet, és a kifejezések kiértékelésekor dinamikusan kiosztotta és átkonfigurálta a változókat.

Az APL360 első változatai a teljes gép felett átvették az irányítást. Ez tehát egy kombinált operációs rendszer, fájlrendszer, timesharing monitor, parancsértelmező és programozási nyelv volt. Tekintettel a korlátozott főmemóriára, a felhasználói munkaterületeket szükség szerint dobra vagy lemezre cserélték. A teljesítmény lenyűgöző volt, amit Larry Breed a megvalósítás világos és tömör leírásában 6 annak tulajdonít, hogy az operációs rendszert a nyelv követelményeihez tudták igazítani.

Az APL360 egy társalgási nyelv volt, amely gyors választ és hatékony végrehajtást biztosított akár 50 egyidejű felhasználó számára is. Minden felhasználónak volt egy “aktív munkaterülete”, amely programokat, változókat és a felfüggesztett programvégrehajtás állapotát tartotta. Az olyan rendszerparancsok, mint a “)LOAD”, “)SAVE” és “)COPY” karbantartották a felhasználó tárolt munkaterületek könyvtárát. Más rendszerparancsok a nyelvi jellemzőket irányították; például az “)ORIGIN” paranccsal a programozó szabályozhatta, hogy a vektorok és a tömbök számozása 0-val vagy 1-gyel kezdődjön.

Az APL volt az első bevezetés az interaktív időmegosztásba sok programozó generációja számára, akik a lyukkártyás kötegelt programozást szenvedték el.

Az APL alkalmazásai

Az Iverson Notation már azelőtt is hasznos volt, hogy számítógépes programozási nyelv lett volna, mint az emberek számára az algoritmusok dokumentálására szolgáló nyelv. A klasszikus példa az új IBM System/360 számítógép utasításkészlet-architektúrájának formális definíciója, amelyet Adin Falkoff, Ken Iverson és Ed Sussenguth 1965-ben az IBM Systems Journalban megjelent cikkében tett közzé 7.

A leírás, amely inkább formális, mint szóbeli, közös változókon keresztül kölcsönhatásba lépő, segédtáblákkal együtt használt programok sorozatával valósul meg… Bár a formális leírás teljes és önálló, a szöveg segítséget nyújt a kezdeti tanulmányozáshoz.

A dolgozatban közölt szöveg azonban ennél sokkal több. Ez a formális leírás soronkénti magyarázata, ami azt jelenti, hogy egyben az APL leíró erejének bemutatása és magyarázata is.

A jelölés az Iverson könyvében szereplő grafikus stílust használta a vezérlésátvitelhez. Itt van például egy memória-hozzáférési művelet leírása. (Kattintson rá a nagyításhoz.)

Az APL-t a publikálásra szánt notációból interaktív számítógépes programozási nyelvvé való átalakulás tette virágzóvá. Amikor az APL360 implementációja elérhetővé vált, az IBM és mások változatos alkalmazásokkal ösztönözték a használatát, mint például ezek:

  • Starmap: A csillagok és bolygók helyzetének kiszámítására és ábrázolására szolgáló APL függvények készlete. 8 9 1973-ban írta Paul Berry az IBM-től és John Thorstensen, aki akkoriban a Bryn Mawr College csillagászhallgatója volt, ma pedig a Dartmouth College fizika és csillagászat professzora. A Kepler-egyenletek klasszikus megoldásait használja egy adott dátumra és időpontra, valamint a koordináták forgatásának sorozatát, hogy megmutassa, hol jelennek meg a bolygók és a csillagok az égbolt táljában.
  • IBGS: Interaktív üzleti játék szimuláció: “Egy általános számítógépes menedzsment szimuláció, amely a termelés, a marketing és a pénzügy funkcionális területein történő döntéshozatalt és tervezést foglalja magában.”
  • Zérusok és integrálok az APL-ben: “Mind a klasszikus módszerek, mint a Newton- és Muller-módszerek, mind a közelmúltban kifejlesztett módszerek, mint a Jenkins és Traub-féle módszerek segítségével megtalálja egy valós függvény valós zérusait, egy valós vagy komplex együtthatókkal rendelkező polinom valós és komplex zérusait, valamint egy komplex függvény komplex zérusait.”
  • Graphpak – Interaktív grafikus csomag az APL360-hoz: “…képességek, amelyek a legalacsonyabb szintű grafikus felület támogatásától a magasabb szintű számos alkalmazási területig terjednek… Egy ábrázoló komponens… lineáris vagy logaritmikus… görbeillesztés… Egy leíró geometria komponens lehetővé teszi háromdimenziós objektumok meghatározását, méretezését, nagyítását, fordítását, forgatását és vetített megjelenítését.”
  • Grafikonok és hisztogramok az APL-ben: “görbéket és vonaldiagramokat készít írógépes terminálon.”
  • APL koordinátageometriai rendszer: “koordinátageometriai problémákat old meg interaktívan egy terminálon… földmérők, építőmérnökök, várostervezők használatára…”
  • APL/PDTS – Programozási Fejlesztési Nyomonkövető Rendszer: “…a vezetők és tervezők segítésére a programozási fejlesztési projektek tervhez viszonyított teljesítményének nyomon követésében.” MINIPERT: “A Critical Path Method (CPM) rendszer a projektmenedzsmenthez”
  • APL Econometric Planning Language: “A gyakorló közgazdász, üzleti előrejelző vagy tanár számára könnyen használható eszközöket biztosít az interaktív modellépítéshez és modellmegoldáshoz.”
  • APL pénzügyi tervezési rendszer: “lehetővé teszi a pénzügyi elemző és tervező számára, hogy jelentéseket tervezzen, számítási utasításokat adjon meg, adatokat adjon meg és módosítson, valamint nyomtatott jelentéseket kapjon azonnali átfutással.”
  • APL Text Editor and Composer: “Ezt a programot a szöveg interaktív feldolgozására tervezték egy terminálon… Funkciókat tartalmaz a szöveg bevitelére, átdolgozására, összeállítására, nyomtatására és tárolására… titkárnők, tudósok, mérnökök, adminisztrátorok vagy bárki más számára, aki papírokat, leveleket, jelentéseket vagy specifikációkat készít.”

Ezek közül az alkalmazások közül sokan az interaktivitást hangsúlyozták, ami hatalmas termelékenységnövekedést jelentett az akkoriban jellemzőbb szakaszos feldolgozáshoz képest. Ráadásul az APL lehetővé tette az alkalmazások sokkal gyorsabb fejlesztését. Egy 2012-es e-mailben Larry Breed megjegyezte,

Minden területen, a sebesség, amellyel az APL programokat lehet írni teszi értékes modellezés és prototípusok … Egy példa: 1973 körül a Continental Can-nak szüksége volt egy leltárrendszerre a 21 gyártóüzeméhez. FORTRAN programozókból álló csapatuk egy éven át dolgozott, sikertelenül. Az STSC egyik értékesítője egy hétvége alatt felépített egy használható, működő modellt az APL Plus-ban.

A területek, ahol az APL a legnagyobb mértékben elterjedt, a tudományos, biztosításmatematikai, statisztikai és pénzügyi alkalmazások voltak. Az APL első 25 évének fejlődéséről részletesen lásd az IBM System Journal 10 című folyóirat 1991-es különszámát, amely 12 tanulmányt és egy esszét tartalmaz a témában.

APL dicséret és kritika Az APL-t eredetileg nem programozási nyelvnek tervezték. Ahogy Iverson mondta,

Az APL kifejlesztésének eredeti indítéka az volt, hogy eszközt biztosítson az íráshoz és a tanításhoz. Bár az APL-t főleg a kereskedelmi programozásban használták ki, továbbra is úgy gondolom, hogy a legfontosabb felhasználási területe még kiaknázatlan: egyszerű, pontos, futtatható jelölésként a tantárgyak széles körének oktatásához.11

Az APL számítógépes programok, akárcsak a matematikai jelölés, amely ihlette, sokak számára vonzó tömörséggel és eleganciával bírnak a sok tömör és szokatlan szimbólummal. Az APL-nek fanatikus hívei vannak. Alan Perlis (az ACM Turing-díjának első kitüntetettje, 1966-ban) volt az egyik:

A tekintet egyetlen mondaton való áthúzása a működés és a vezérlés olyan bonyolult, zseniális és gyönyörű összjátékát tárja fel, amely más programozási nyelvekben csak több oldalnyi szövegben figyelhető meg. Az ember kezdi értékelni a stílus kialakulását és jelentőségét. 12

Az APL kifejezés szabadságát sokan felszabadítónak találják.

Az APL-t “fasiszta programozási nyelvnek” szoktam nevezni, mert diktatórikusan merev. …Ha a Pascal fasiszta, akkor az APL anarchista. 13

De az APL programok gyakran rejtélyesek és nehezen dekódolhatóak. Egyesek azzal viccelődtek, hogy ez egy “csak írható nyelv”, mert még a program szerzőjének is gondot okozhat később a program megértése. Programozási trükkökre inspirál. Nehéz ellenállni annak a kihívásnak, hogy egy APL “egysoros” programot írjunk egy teljes, összetett algoritmus megvalósítására. Itt van például két különböző APL egysoros, amelyek John Conway “Game of Life” című játékának változatait valósítják meg:

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

Nem a gyenge szívűeknek való, nyilvánvalóan. Edsger Dijkstra holland informatikus mondta,

Az APL egy hiba, amelyet a tökéletességig vittek. Ez a jövő nyelve a múlt programozási technikáinak: a kódoló csövesek új generációját hozza létre. 14

Az APL rajongói azonban azt mondanák, hogy a rejtélyes APL-kódolás egy rossz programozási stílus, amely bármely nyelvvel együtt járhat. Az APL gazdagabb palettát biztosít az algoritmusok kifejezésére, szól az érvelés, így a nehezebb problémákat gyorsabban és kevesebb irreleváns szintaktikai zűrzavarral lehet megoldani.

Bármi is legyen a véleményed, az APL és az általa inspirált nyelvek, mint például az APL2 és a J, még mindig aktív részei a sokszínű programozási nyelvi univerzumnak.

Ken Iverson rövid életrajza

Kenneth Eugene Iverson 1920. december 17-én született egy farmon Camrose közelében, Alberta államban, Kanadában. Vidéki egytantermes iskolákban tanult egészen a 9. osztály végéig, amikor is otthagyta az iskolát, mert a gazdasági válság csúcspontján volt, és a családi farmon volt munka. Később azt mondta, hogy az iskolai tanulmányok folytatásának egyetlen célja az lett volna, hogy tanítónő legyen, és ezt a szakmát ő határozottan nem akarta. A hosszú téli hónapokban egyedül tanulta a matematikát.

1942-ben behívták katonának, és a szolgálat alatt annyi levelező tagozaton vett részt, hogy majdnem befejezte a középiskolát. A katonai szolgálat után matematikából és fizikából is diplomát szerzett a Kingston Ontario-i Queen’s Egyetemen, majd a Harvard Egyetemen fizikából szerzett mesterdiplomát. 1954-ben doktorált Howard Aiken számítógépes úttörőnél, “Lineáris differenciálegyenletek gépi megoldása: Applications to a Dynamic Economic Model”.

A doktori cím megszerzése után Iverson csatlakozott a Harvard tanszékéhez, hogy Aiken új automatikus adatfeldolgozási programjában tanítson. Egy évig volt ott oktatóként, majd öt évig tanársegédként. Egyre inkább frusztrálta a hagyományos matematikai jelölések alkalmatlansága az algoritmusok kifejezésére, ezért elkezdte kitalálni a sajátját.

1960-ban Iverson a New York-i Yorktown Heightsban lévő új IBM Kutatóközponthoz csatlakozott Frederick Brooks tanácsára, aki a Harvardon az egyik tanársegédje volt, és most az IBM-nél dolgozott. Ők ketten együttműködtek az új jelölés folyamatos fejlesztésében. 1962-ben Ken kiadta a ma már klasszikusnak számító “A Programming Language “1 című könyvet, amelynek címe az APL nevet adta a notációnak, amelyet addig informálisan “Iverson notációjának” neveztek.

Iverson az IBM-nél töltött teljes szolgálati ideje alatt tovább dolgozott az APL fejlesztésén. 1980-ban elhagyta az IBM-et, és visszatért Kanadába, hogy az I.P. Sharp Associates-nél dolgozzon, amely egy APL-alapú timesharing szolgáltatást hozott létre.

1987-ben “visszavonult a fizetett munkaviszonyból”, és teljes figyelmét az APL egy modernebb dialektusának fejlesztésére fordította. Az APL-t sikeresen használták kereskedelmi célokra, de Iverson ki akart fejleszteni egy új, egyszerű, futtatható, tanításra alkalmasabb notációt, amely alacsony áron elérhető lenne. Ennek a nyelvnek az első, J nevű implementációját az APL90 felhasználói konferencián jelentették be.

Iverson képessége az ilyen nyelvek létrehozására “a nyelv és a szavak iránti puszta öröméből fakadt” – emlékszik vissza lánya, Janet Cramer. “Úgy olvasta a szótárakat, mint az emberek a regényeket”. Iverson fontosnak tartotta, hogy a nyelv – mind az angol, mind a matematika – világosan és tömören kommunikáljon.

Iverson munkatársaival – köztük a fiával, Eric-kel – tovább dolgozott a J nyelv fejlesztésén, és továbbra is termékenyen publikált. 2004. október 16-án, szombaton agyvérzést kapott – miközben egy J oktatóprogramon dolgozott -, és három nappal később, október 19-én, 83 éves korában meghalt.

Ken Iversonról sok történet kering. Íme néhány:

Ken nem kapott kinevezést a Harvardon. Letöltötte az öt évet adjunktusként, és a kar úgy döntött, hogy nem terjesztik elő előléptetésre. Megkérdeztem tőle, mi volt a baj, mire azt mondta: “Nos, a dékán behívott, és azt mondta: “az a baj, hogy az egyetlen kis könyvén kívül semmit sem publikált”. Az az egy kis könyv később megkapta a Turing-díjat. Azt hiszem, ez inkább egy megjegyzés az előléptetési eljárások hagyományos gondolkodásmódjára, mint Kenre; ez egy megjegyzés az akadémiai eljárásokra és a Harvardra.

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

Egy korai előadásában Ken a toleráns összehasonlítás előnyeit magyarázta. A közönség egyik tagja hitetlenkedve kérdezte: “Ugye nem arra gondolsz, hogy amikor A=B és B=C, akkor A nem lehet egyenlő C-vel?”. Ken egy pillanatot sem kihagyva azt válaszolta: “Ezt minden asztalos tudja!”, és rátért a következő kérdésre.

– Paul Berry

Egy társasági beszélgetés során azt mondtam Kennek: “Tudod, Ken, te vagy a kedvenc nyelvtervezőm, Don Knuth pedig a kedvenc programozóm”. Erre Ken azonnal azt mondta: “Mi a baj a programozásommal?”.

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

1973-ban vagy 1974-ben Ken és én előadást tartottunk a Kodaknál Rochesterben egy 40-50 programozóból álló csoportnak, akiknek PL/I-ben kellett dolgozniuk. A kérdések időszakában az egyik vezető munkatárs azt mondta: “Ha jól értem, amit ti mondotok, akkor azt javasoljátok, hogy egy új gondolkodásmódot kellene elfogadnunk”. Erre Ken felpattant a székéből, és azt mondta: “Igen! Pontosan ezt mondom!”.

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

Köszönet

Köszönöm Michael Karasicknak, Yvonne Perkinsnek, Steve Selbstnak és Ken Edwardsnak az IBM-től, hogy véget vetettek tízéves odüsszeiámnak, hogy engedélyt kapjak az APL forráskódjának kiadására. Köszönet Curtis Jonesnak, Larry Breednek, Paul Berrynek és Roy Sykesnak a cikk egy korai vázlatához fűzött megjegyzéseikért.

– Len Shustek

Bibliográfia

  1. K. E. Iverson, A Programming Language, John Wiley and Sons, Inc. 1962.
  2. IBM, “APL Language,” March 1975.
  3. IBM, “APL360 felhasználói kézikönyv”, 1970. március.
  4. IBM, Paul Berry, “APL360 Primer – Student Text”, 1969.
  5. L. M. Breed és R. H. Lathwell, “APL360”, 1968.
  6. L. M. Breed és 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 és E. H. Sussenguth, “A Formal Description of SYSTEM/360,” IBM Systems Journal, vol. 3, no. 3, pp. 198-261, 1964.
  8. P. C. Berry és J. R. Thorstensen, “Starmap,” 1978.
  9. P. C. Berry és 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 és K. E. Iverson, “The Design of APL,” IBM Journal of Research and Development, vol. 17, no. 4, 1973.
  16. A. D. Falkoff és K. E. Iversion, “The Evolution of APL,” SIGPLAN Notices, vol. 13, no. 8, pp. 45-57, August 1978.
  17. L. Breed, “How We Got to APL1130”, 2004. május 10.
  18. ACM, “Proceedings of the APL’69 Conference on APL,” SUNY Binghamton, NY, 1969.
  19. “The Origins of APL – 1974”; egy csodálatos interjú az APL eredeti fejlesztőivel.

Historical Source Code Releases

  • MacPaint and QuickDraw Source Code, July 18, 2010
  • APL Programming Language Source Code, October 10, 2012
  • Adobe Photoshop Source Code, 2013. február 13.
  • Apple II DOS forráskód, 2013. november 12.
  • Microsoft MS-DOS Early Source Code, 2014. március 25.
  • Microsoft Word for Windows Version 1.1a Source Code, 2014. március 25.
  • Early Digital Research CP/M Source Code, 2014. október 1.
  • Xerox Alto Source Code, 2014. október 21.
  • Electronic Arts DeluxePaint Early Source Code, 2015. július 22.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.