Il codice sorgente del linguaggio di programmazione APL

Software Gems: The Computer History Museum Historical Source Code Series

Ken Iverson at Harvard University

Migliaia di linguaggi di programmazione furono inventati nei primi 50 anni dell’era dell’informatica. Molti di loro erano simili, e molti seguivano un percorso evolutivo tradizionale dai loro predecessori.

Ma alcuni linguaggi rivoluzionari avevano un’inclinazione che li differenziava dai loro fratelli di uso più generale. Il LISP era per l’elaborazione delle liste. SNOBOL era per la manipolazione delle stringhe. SIMSCRIPT era per la simulazione. E APL era per la matematica, con un’enfasi sull’elaborazione delle matrici.

Quello che alla fine divenne APL fu inventato dal professore di Harvard Kenneth E. Iverson nel 1957 come una notazione matematica, non come un linguaggio di programmazione per computer. Anche se esistevano altri sistemi di simboli orientati alle matrici, compresa la concisa notazione tensoriale inventata da Einstein, erano orientati più all’analisi matematica e meno alla sintesi di algoritmi. Iverson, che era uno studente di Howard Aiken, insegnò quella che divenne nota come “Iverson Notation” ai suoi studenti di Harvard per spiegare gli algoritmi.

Iverson fu assunto da IBM nel 1960 per lavorare con Adin Falkoff e altri sulla sua notazione. Nel suo ormai famoso libro del 1962 “A Programming Language” 1, dice che la notazione è per la descrizione di “procedure…chiamate algoritmi o programmi”, e che è un linguaggio perché “esibisce una notevole struttura sintattica”. Ma a quel punto era solo una notazione da leggere, non un linguaggio per programmare i computer. Il libro dà molti esempi del suo uso sia come strumento descrittivo (come per documentare la definizione dei set di istruzioni del computer) che come mezzo per esprimere algoritmi generali (come per l’ordinamento e la ricerca). Anticipando la resistenza a qualcosa di così nuovo, dice nella prefazione, “È la tesi centrale di questo libro che il potere descrittivo e analitico di un linguaggio di programmazione adeguato ripaga ampiamente il considerevole sforzo richiesto per la sua padronanza”. Forse stava avvertendo che padroneggiare il linguaggio non era banale. Forse stava anche segnalando che, secondo lui, altri linguaggi di notazione erano meno che “adeguati”.

Il team, naturalmente, vide presto che la notazione poteva essere trasformata in un linguaggio per programmare i computer. Quel linguaggio, che fu chiamato APL a partire dal 1966, enfatizzava la manipolazione degli array e usava simboli non convenzionali. Era come nessun altro linguaggio di programmi per computer che era stato inventato.

APL divenne popolare quando IBM introdusse “APL360” per il loro computer mainframe System/360. A differenza della maggior parte degli altri linguaggi dell’epoca, APL360 era anche un ambiente di programmazione interattivo completo. Il programmatore, seduto a una macchina da scrivere elettromeccanica collegata a un computer in timesharing, poteva digitare istruzioni APL e ottenere una risposta immediata. I programmi potevano essere definiti, debuggati, eseguiti e salvati su un computer che veniva usato simultaneamente da decine di altre persone.

Scritto interamente in linguaggio assembly 360, questa versione di APL prendeva il controllo dell’intera macchina. Implementava un sistema operativo timesharing completo oltre ad un linguaggio di alto livello.

Con il permesso di IBM, il Computer History Museum è lieto di rendere disponibile il codice sorgente della versione 1969-1972 “XM6” di APL per il System/360 per uso non commerciale.

Il file di testo contiene 37.567 linee, che includono codice, macro e definizioni globali. I 90 file individuali sono separati da comandi ‘./ ADD”. Per accedere a questo materiale, è necessario accettare i termini della licenza mostrata qui, che permette solo l’uso non commerciale e non dà il diritto di concederlo in licenza a terzi pubblicando copie altrove sul web.

Scaricare il codice sorgente APL360

Jürgen Winkelmann all’ETH Zürich ha fatto un lavoro incredibile nel trasformare questo codice sorgente in un sistema eseguibile. Per maggiori informazioni, vedi MVT per APL Versione 2.00.

Creazione del linguaggio di programmazione APL

Il libro di Iverson “A Programming Language” 1 usa una notazione grafica che sarebbe stata difficile da usare direttamente come linguaggio di programmazione per computer. La considerava un’estensione dell’algebra matriciale, e usava comuni convenzioni tipografiche matematiche come pedici, apici e distinzioni basate sul peso o sul carattere dei caratteri. Qui, per esempio, c’è un programma per ordinare i numeri:

Per linearizzare la notazione per l’uso come linguaggio di programmazione per computer digitato su una tastiera, gli implementatori APL dovettero certamente rinunciare all’uso di frecce etichettate per i trasferimenti di controllo. Ma una caratteristica che furono in grado di mantenere, in una certa misura, fu l’uso di simboli speciali per funzioni primitive, come illustrato in questo programma che crea codici Huffman:

APL usa simboli che sono più vicini alla matematica standard che alla programmazione. Per esempio, il simbolo per la divisione è ÷, non /. Per supportare i simboli non convenzionali, APL360 usava una tastiera progettata su misura con simboli speciali in maiuscolo.

APL360 usava una tastiera progettata su misura

Anche così, c’erano più caratteri speciali che potevano stare sulla tastiera, così alcuni venivano digitati sovrascrivendo due caratteri. Per esempio, il carattere “grade up” ⍋, un operatore primitivo usato per l’ordinamento, fu creato digitando ∆ (shift H), poi backspace, poi ∣ (shift M). Non c’era più spazio per le lettere maiuscole e minuscole, così APL supportava solo le lettere maiuscole.

Per la stampa dei programmi, Iverson e Falkoff fecero progettare a IBM una speciale type ball per i loro terminali 1050 e 2741, che usavano il meccanismo della macchina da scrivere IBM Selectric.

Ora i programmi potevano essere sia scritti che stampati. Ecco, per esempio, la versione stampata di un programma dal manuale del linguaggio APL 2 che calcola il determinante matematico di una matrice:

Un assaggio di APL

APL è un conciso linguaggio di programmazione ad alto livello che differisce dalla maggior parte degli altri sviluppati negli anni ’60 per diversi aspetti:

Ordine di valutazione: Le espressioni in APL sono valutate da destra a sinistra, e non c’è una gerarchia di precedenza delle funzioni. Per esempio, digitando l’espressione

2×4+3

il computer digita immediatamente il valore risultante

Il valore non è, come in molti altri linguaggi che hanno precedenza degli operatori, 11. Naturalmente, le parentesi possono essere usate per raggruppare una sottoespressione per cambiare l’ordine di valutazione. La regola generale è che l’argomento destro di qualsiasi funzione è il valore dell’espressione alla sua destra.

Creazione automatica di vettori e matrici: Una struttura a più dimensioni viene creata automaticamente valutando un’espressione che la restituisce, e gli scalari possono essere mescolati liberamente. Per esempio,

A ← 2 + 1 2 3

crea il vettore “1 2 3”, vi aggiunge lo scalare 2, e crea la variabile A per contenere il vettore il cui valore è

3 4 5

Le variabili non vengono mai dichiarate; vengono create automaticamente e assumono la dimensione e la forma di qualsiasi espressione venga loro assegnata.

Una pletora di primitive: APL ha un ricco set di funzioni incorporate (e “operatori” che vengono applicati alle funzioni per ottenere funzioni diverse) che operano su scalari, vettori, matrici, anche oggetti di dimensioni superiori, e combinazioni di essi. Per esempio, l’espressione per sommare i numeri nel vettore “A” creato sopra è semplicemente

+/A

dove / è l’operatore di “riduzione” che fa sì che la funzione a sinistra sia applicata successivamente a tutti gli elementi dell’operando a destra. L’espressione per calcolare la media dei numeri in A usa anche la funzione primitiva ρ per determinare quanti elementi ci sono in A:

(+/A) ÷ ρA

Queste sono alcune tabelle dal “Manuale dell’utente APL360” 3 del 1970 che danno un assaggio della potenza e sofisticazione delle funzioni e degli operatori APL integrati. (Cliccare sulle immagini per versioni più grandi.)

APL vi incoraggia a pensare diversamente alla programmazione, e ad usare strutture dati temporanee ad alta dimensione come valori intermedi che vengono poi ridotti usando le potenti primitive. Un esempio famoso è il seguente breve ma completo programma per calcolare tutti i numeri primi fino a R.

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

Ecco come si valuta questa espressione:

subespressione

significato

valore se R è 6

⍳R

Generare un vettore di numeri da 1 a R.

1 2 3 4 5 6

T←1↓

Smetti il primo elemento del vettore e assegna il resto al vettore temporaneo T.

2 3 4 5 6

T∘.×T

Crea il prodotto esterno di moltiplicazione: una tabella che contiene il risultato della moltiplicazione di ogni elemento di T per ogni elemento di T.

T∊

Utilizza l’operatore “set membership” per trovare quali elementi di T sono nella tabella.

0 0 1 0 1

~

Negare il risultato per identificare quali elementi di T non sono nella tabella. Questi sono gli interi che non hanno multipli nella tabella.

1 1 1 0 1 0

( )/T

Selezionare gli elementi di T che abbiamo identificato. Questi sono tutti i primi inferiori a R.

2 3 5

Nota che non ci sono cicli in questo programma. La potenza delle espressioni APL significa che i rami condizionali e i loop sono richiesti molto meno spesso che nei linguaggi di programmazione più tradizionali.

Gli operatori APL possono essere usati in modo semplice per tutti i tipi di calcoli che normalmente richiederebbero dei loop. Per esempio, un’espressione che calcola il numero di elementi del vettore X che sono maggiori di 100 è

+/X>100

Funziona perché X>100 restituisce un vettore di bit di 0 e 1 che mostra quali elementi di X sono maggiori di 100, e +/ aggiunge tutti i bit in quel vettore.

Ma l’esecuzione condizionata e i cicli sono, ovviamente, a volte necessari. Alla luce dei successivi sviluppi della programmazione strutturata, l’unica primitiva di APL per il trasferimento di controllo, l’istruzione “GO TO LINE x” →, è particolarmente debole. Ecco un esempio di una funzione che calcola il massimo comune divisore dei suoi due argomenti. L’ultima istruzione crea un ciclo andando all’inizio. Nella linea 2, il trasferimento condizionale del controllo alla linea 0 fa sì che la funzione esca e restituisca l’ultimo valore assegnato a G.

Per saperne di più sul linguaggio APL degli anni ’60, consultate il manuale di riferimento “APL Language” 2 e “APL360 Primer” di Paul Berry del 1969 4.

Il linguaggio si è naturalmente evoluto nel corso degli anni, e le versioni più recenti includono strutture di controllo come IF-THEN-ELSE.

Come è stato implementato APL

La prima implementazione informatica della notazione APL fu un interprete di linguaggio orientato al batch scritto in FORTRAN nel 1965 per il computer mainframe IBM 7090, da Larry Breed al Centro di Ricerca IBM di Yorktown Heights NY e Philip Abrams, allora studente laureato all’Università di Stanford.

La prima versione interattiva fu scritta poco dopo per il 7093 (un 7090 sperimentale con memoria virtuale) da Larry Breed e Roger Moore. Funzionava sotto il sistema di timesharing TSM e fu chiamato capricciosamente “IVSYS”, che fa rima con “IBSYS”, il nome del sistema operativo standard 7090. In una e-mail del 2012 Breed dice,

IVSYS forniva login, logout, esecuzione immediata e definizione delle funzioni; forniva spazi di lavoro, sia attivi che memorizzati. L’implementazione di questi era rudimentale; per lo più usavamo quello che il progetto TSM ci offriva per il login/logout/salvataggio dei file. Avevamo solo poche settimane per usare il 7093 prima che fosse dismesso e Roger ed io iniziammo a pianificare un sistema autonomo su System/360. In quelle settimane, Ken e il suo gruppo videro per la prima volta come sarebbe stato l’APL eseguibile.

Un’altra implementazione di un sottoinsieme del linguaggio fu fatta nel 1967 per il minicomputer IBM 1130.

La prima implementazione di APL ad avere un uso diffuso fuori da IBM fu per il System/360 IBM. Chiamata “APL360”, entrò in servizio prima all’interno di IBM nel novembre 1966. (La notazione “APL360″, poiché il backslash era l’operatore di “espansione” di APL, aveva anche un significato nascosto: “APL espande il 360″).

Breed dice del periodo appena precedente,

Questo periodo, all’inizio del 1966, fu il tempo di transizione dalla Iverson Notation ad APL. (Infatti, Adin arrivò con “APL” nella primavera del ’66.) Il perfezionamento e l’estensione del linguaggio e dell’ambiente continuarono per molti anni. Non fu aggiunto quasi nessun codice per fare una versione commerciale, solo scartoffie.

Nell’agosto 1968 APL360 era disponibile per i clienti IBM come programma non supportato (“Tipo III”) nella “Contributed Program Library” 5 di IBM. I principali implementatori erano Larry Breed, Dick Lathwell e Roger Moore; altri che avevano contribuito erano Adin Falkoff e Luther Woodrum.

I primi sviluppatori APL, da sinistra a destra: Dick Lathwell, Ken Iverson, Roger Moore, Adin Falkoff, Phil Abrams, Larry Breed. La foto è stata scattata intorno al 1983.

A causa della natura dinamica delle variabili APL, APL360 fu implementato come un interprete, non come un compilatore che generava codice macchina. I programmi erano memorizzati in una forma interna chiamata “codestringa” che corrispondeva direttamente a ciò che l’utente aveva digitato. L’interprete esaminava quindi la stringa di codice durante l’esecuzione del programma, e assegnava e riconfigurava dinamicamente le variabili mentre le espressioni venivano valutate.

Le prime versioni di APL360 prendevano il controllo dell’intera macchina. Era quindi una combinazione di sistema operativo, file system, monitor timesharing, interprete di comandi e linguaggio di programmazione. Data la limitata memoria principale, gli spazi di lavoro degli utenti erano scambiati su tamburo o su disco secondo necessità. Le prestazioni erano impressionanti, cosa che Larry Breed attribuisce, nella sua chiara e succinta descrizione dell’implementazione 6, alla capacità di adattare il sistema operativo ai requisiti del linguaggio.

APL360 era un linguaggio conversazionale che forniva una risposta veloce e un’esecuzione efficiente per un massimo di 50 utenti simultanei. Ogni utente aveva uno “spazio di lavoro attivo” che conteneva programmi, variabili e lo stato di esecuzione del programma sospeso. Comandi di sistema come “)LOAD”, “)SAVE”, e “)COPY” mantenevano la libreria dell’utente degli spazi di lavoro memorizzati. Altri comandi di sistema controllavano le caratteristiche del linguaggio; per esempio, con “)ORIGIN” il programmatore poteva controllare se i vettori e gli array erano numerati a partire da 0 o da 1.

APL fu la prima introduzione alla condivisione interattiva del tempo per molti della generazione di programmatori che avevano sofferto attraverso la programmazione batch con schede perforate.

Applicazioni di APL

Anche prima che fosse un linguaggio di programmazione per computer, Iverson Notation era utile come linguaggio per documentare algoritmi per le persone. L’esempio classico è la definizione formale dell’architettura dell’insieme di istruzioni del nuovo computer IBM System/360, che fu pubblicata in un articolo sull’IBM Systems Journal da Adin Falkoff, Ken Iverson e Ed Sussenguth nel 1965 7.

La descrizione, che è formale piuttosto che verbale, è compiuta da un insieme di programmi, che interagiscono attraverso variabili comuni, usati insieme a tabelle ausiliarie… Sebbene la descrizione formale sia completa e autonoma, il testo è fornito come aiuto allo studio iniziale.

Ma il testo fornito nel documento è molto più di questo. È una spiegazione linea per linea della descrizione formale, il che significa che è anche una dimostrazione e una spiegazione del potere descrittivo di APL.

La notazione ha usato lo stile grafico per i trasferimenti di controllo che era nel libro di Iverson. Ecco, per esempio, la descrizione di un’operazione di accesso alla memoria. (Cliccare per ingrandire.)

È stata la transizione di APL da una notazione per la pubblicazione in un linguaggio di programmazione interattivo per computer che l’ha fatto fiorire. Quando l’implementazione APL360 fu disponibile, IBM e altri stimolarono l’uso producendo diverse applicazioni come queste:

  • Starmap: Un insieme di funzioni APL per calcolare e tracciare le posizioni delle stelle e dei pianeti. 8 9 È stato scritto nel 1973 da Paul Berry di IBM e John Thorstensen, allora studente di astronomia al Bryn Mawr college, ora professore di fisica e astronomia al Dartmouth College. Utilizza le soluzioni classiche delle equazioni di Keplero per una particolare data e ora e una serie di rotazioni di coordinate per mostrare dove apparirebbero i pianeti e le stelle nella conca del cielo.
  • IBGS: Interactive Business Game Simulation: “Una simulazione generale di gestione al computer che coinvolge il processo decisionale e la pianificazione nelle aree funzionali di produzione, marketing e finanza.”
  • Zeri e integrali in APL: “Usando sia metodi classici come quelli di Newton e Muller che metodi sviluppati recentemente come quelli di Jenkins e Traub, trova gli zeri reali di una funzione reale, gli zeri reali e complessi di un polinomio con coefficienti reali o complessi, e gli zeri complessi di una funzione complessa.”
  • Graphpak – Interactive Graphics Package for APL360: “…capacità che vanno dal supporto dell’interfaccia grafica al livello più basso a diverse aree di applicazione ai livelli più alti… Un componente di plottaggio… lineare o logaritmico… curve-fitting… Un componente di geometria descrittiva permette la definizione, scalatura, ingrandimento, traduzione, rotazione e visualizzazione proiettata di oggetti tridimensionali.”
  • Grafici e istogrammi in APL: “produce curve e diagrammi a barre in un terminale di macchina da scrivere”.
  • Sistema di geometria a coordinate APL: “risolve problemi di geometria a coordinate in modo interattivo su un terminale…per l’uso di geometri, ingegneri civili, urbanisti…”
  • APL/PDTS – Programming Development Tracking System: “…per assistere i manager e i pianificatori nel monitoraggio delle prestazioni rispetto al piano sui progetti di sviluppo della programmazione.” MINIPERT: “Un sistema CPM (Critical Path Method) per la gestione dei progetti”
  • APL Econometric Planning Language: “L’economista praticante, il previsore d’affari o l’insegnante viene fornito con strumenti facili da usare per la costruzione di modelli interattivi e la risoluzione di modelli.”
  • APL Financial Planning System: “Permette all’analista finanziario e al pianificatore di progettare rapporti, specificare dichiarazioni di calcolo, inserire e modificare dati e ottenere rapporti stampati con consegna immediata.”
  • APL Text Editor and Composer: “Questo programma è progettato per elaborare il testo in modo interattivo in un terminale…Sono incluse funzioni per l’inserimento, la revisione, la composizione, la stampa e l’archiviazione del testo…per l’uso da parte di segretarie, scienziati, ingegneri, amministratori o qualsiasi altro che produce documenti, lettere, rapporti o specifiche.”

Molte di queste applicazioni enfatizzavano l’interattività, che forniva un enorme aumento di produttività rispetto all’elaborazione in batch più tipica a quel tempo. Inoltre, APL permetteva alle applicazioni di essere sviluppate molto più rapidamente. In una e-mail del 2012, Larry Breed ha notato,

In tutti i campi, la velocità con cui i programmi APL possono essere scritti lo rende prezioso per la modellazione e la prototipazione… Un esempio: Intorno al 1973, Continental Can aveva bisogno di un sistema di inventario per i suoi 21 stabilimenti di produzione. Il loro team di programmatori FORTRAN aveva lavorato per un anno, senza alcun successo in vista. Un venditore della STSC, in un fine settimana, costruì un modello utilizzabile e funzionante in APL Plus.

Le aree in cui APL ebbe la maggiore penetrazione furono le applicazioni scientifiche, attuariali, statistiche e finanziarie. Per i dettagli sulla progressione di APL nei suoi primi 25 anni, si veda il numero speciale del 1991 dell’IBM System Journal 10 con 12 articoli e un saggio sull’argomento.

Lode e critica di APL APL non fu originariamente progettato come un linguaggio di programmazione. Come disse Iverson,

Il motivo iniziale per sviluppare APL era quello di fornire uno strumento per la scrittura e l’insegnamento. Sebbene APL sia stato sfruttato soprattutto nella programmazione commerciale, continuo a credere che il suo uso più importante rimanga da sfruttare: come notazione semplice, precisa ed eseguibile per l’insegnamento di una vasta gamma di argomenti.11

Con così tanti simboli tersi e insoliti, i programmi per computer APL, come la notazione matematica che lo ha ispirato, ha una concisione ed eleganza che molti trovano attraente. APL attrae fanatici aderenti. Alan Perlis (il primo destinatario del premio Turing dell’ACM, nel 1966) era uno di loro:

Lo sguardo su una singola frase può esporre un intricato, ingegnoso e bellissimo gioco di operazioni e controlli che in altri linguaggi di programmazione è osservabile solo in diverse pagine di testo. Si comincia ad apprezzare l’emergere e il significato dello stile. 12

Molti trovano la libertà di espressione in APL liberatoria.

Io descrivevo come un ‘linguaggio di programmazione fascista’, perché è dittatorialmente rigido. …Se Pascal è fascista, APL è anarchico. 13

Ma i programmi APL sono spesso criptici e difficili da decodificare. Alcuni hanno scherzato dicendo che è un “linguaggio di sola scrittura” perché anche l’autore di un programma potrebbe avere problemi a capirlo in seguito. Ispira trucchi di programmazione. La sfida di scrivere un “one-liner” APL per implementare un algoritmo complesso completo è difficile da resistere. Qui, per esempio, ci sono due diversi one-liner APL che implementano versioni del “Gioco della vita” di John Conway:

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

Non per i deboli di cuore, chiaramente. L’informatico olandese Edsger Dijkstra disse,

APL è un errore, portato alla perfezione. È il linguaggio del futuro per le tecniche di programmazione del passato: crea una nuova generazione di fannulloni codificatori. 14

Ma i fan di APL direbbero che la codifica criptica APL è un cattivo stile di programmazione che può essere un’afflizione con qualsiasi linguaggio. APL fornisce una tavolozza più ricca per esprimere gli algoritmi, l’argomento va, così si possono risolvere problemi più difficili più velocemente e con meno disordine sintattico irrilevante.

Qualunque sia la vostra opinione, APL e i linguaggi che ha ispirato, come APL2 e J, sono ancora una parte attiva dell’universo dei diversi linguaggi di programmazione.

Una breve biografia di Ken Iverson

Kenneth Eugene Iverson è nato il 17 dicembre 1920 in una fattoria vicino a Camrose, Alberta, Canada. È stato educato in scuole rurali di una sola stanza fino alla fine della nona classe, quando ha abbandonato la scuola perché era il culmine della Depressione e c’era del lavoro da fare nella fattoria di famiglia. Più tardi disse che l’unico scopo di continuare gli studi sarebbe stato quello di diventare un insegnante, e quella era una professione che decisamente non voleva. Durante i lunghi mesi invernali studiò il calcolo da solo.

Fu arruolato nel 1942, e durante il suo servizio prese abbastanza corsi per corrispondenza da completare quasi la scuola superiore. Dopo il servizio militare ha conseguito una laurea in matematica e fisica alla Queen’s University di Kingston Ontario, e poi un master in fisica alla Harvard University. Nel 1954 ha completato un dottorato di ricerca sotto il pioniere dei computer Howard Aiken, con una tesi intitolata “Machine Solutions of Linear Differential Equations: Applications to a Dynamic Economic Model”.

Dopo aver completato il suo dottorato, Iverson si unì alla facoltà di Harvard per insegnare nel nuovo programma di elaborazione automatica dei dati di Aiken. Vi rimase per un anno come istruttore e per cinque anni come professore assistente. Divenne sempre più frustrato dall’inadeguatezza della notazione matematica convenzionale per esprimere gli algoritmi, così iniziò a inventarne di propri.

Nel 1960 Iverson si unì al nuovo centro di ricerca IBM a Yorktown Heights, New York, su consiglio di Frederick Brooks, che era stato uno dei suoi borsisti ad Harvard e ora era all’IBM. I due collaborarono allo sviluppo continuo della nuova notazione. Nel 1962 Ken pubblicò l’ormai classico libro “A Programming Language” 1, il cui titolo diede il nome APL alla notazione che fino ad allora era stata informalmente chiamata “Iverson’s notation”.

Iverson continuò a lavorare allo sviluppo di APL durante il suo mandato in IBM. Nel 1980 lasciò IBM e tornò in Canada per lavorare per I.P. Sharp Associates, che aveva stabilito un servizio di timesharing basato su APL.

Nel 1987 si “ritirò dal lavoro retribuito” e rivolse tutta la sua attenzione allo sviluppo di un dialetto più moderno di APL. APL veniva usato con successo per scopi commerciali, ma Iverson voleva sviluppare una nuova semplice notazione eseguibile più adatta all’insegnamento, che fosse disponibile a basso costo. La prima implementazione di questo linguaggio, chiamata J, fu annunciata alla conferenza degli utenti APL90.

L’abilità di Iverson di creare tali linguaggi veniva dal suo “puro piacere del linguaggio e delle parole”, ricorda sua figlia Janet Cramer. “Leggeva i dizionari come la gente legge i romanzi”. Iverson pensava che fosse importante che il linguaggio, sia inglese che matematico, comunicasse in modo chiaro e conciso.

Con collaboratori che includevano suo figlio Eric, Iverson ha continuato a lavorare allo sviluppo di J, e ha continuato a pubblicare prolificamente. Sabato 16 ottobre 2004 ebbe un ictus – mentre lavorava ad un tutorial di J – e morì tre giorni dopo, il 19 ottobre, all’età di 83 anni.

Ci sono molte storie su Ken Iverson. Eccone alcune:

Ken non ha ottenuto la cattedra ad Harvard. Ha fatto i suoi cinque anni come assistente e la facoltà ha deciso di non proporlo per la promozione. Gli chiesi cosa fosse andato storto e lui disse: “Beh, il decano mi ha chiamato e mi ha detto: ‘il problema è che non hai pubblicato nulla, tranne un piccolo libro'”. L’unico piccolo libro ha poi ricevuto il premio Turing. Penso che questo sia un commento sulla mentalità convenzionale delle procedure di promozione piuttosto che un commento su Ken; è un commento sulla procedura accademica e su Harvard.

– Fred Brooks, Una celebrazione di Kenneth Iverson, 2004-11-30

In un primo discorso Ken stava spiegando i vantaggi del confronto tollerante. Un membro del pubblico chiese incredulo: “Sicuramente non intendi dire che quando A=B e B=C, A può non essere uguale a C?”. Senza saltare un colpo, Ken rispose: “Qualsiasi falegname lo sa!” e passò alla domanda successiva.

– Paul Berry

In una conversazione sociale con Ken, ho detto: “Sai, Ken, tu sei il mio designer di linguaggio preferito e Don Knuth è il mio programmatore preferito”. E Ken ha detto immediatamente: “Cosa c’è di sbagliato nella mia programmazione?”.

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

Nel 1973 o 1974 Ken ed io tenemmo un discorso alla Kodak di Rochester ad un gruppo di 40-50 programmatori che dovevano lavorare in PL/I. Durante il periodo delle domande un membro anziano dello staff disse: “Se ho capito quello che state dicendo, state suggerendo che dovremmo adottare un nuovo modo di pensare”. E Ken saltò dalla sedia e disse: “Sì, è esattamente quello che sto dicendo”.

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

Acknowledgements

Grazie a Michael Karasick, Yvonne Perkins, Steve Selbst, e Ken Edwards di IBM per aver messo fine alla mia odissea decennale per ottenere il permesso di rilasciare il codice sorgente APL. Grazie a Curtis Jones, Larry Breed, Paul Berry e Roy Sykes per i loro commenti su una prima bozza di questo articolo.

– Len Shustek

Bibliografia

  1. K. E. Iverson, A Programming Language, John Wiley and Sons, Inc., 1962.
  2. IBM, “APL Language,” marzo 1975.
  3. IBM, “Manuale utente APL360”, marzo 1970.
  4. IBM, Paul Berry, “APL360 Primer – Testo per studenti”, 1969.
  5. L. M. Breed e R. H. Lathwell, “APL360”, 1968.
  6. L. M. Breed e 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 e J. R. Thorstensen, “Starmap,” 1978.
  9. P. C. Berry e 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, giugno 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, maggio 1982.
  15. A. D. Falkoff e K. E. Iverson, “The Design of APL,” IBM Journal of Research and Development, vol. 17, no. 4, 1973.
  16. A. D. Falkoff e K. E. Iversion, “The Evolution of APL,” SIGPLAN Notices, vol. 13, no. 8, pp. 45-57, agosto 1978.
  17. L. Breed, “How We Got to APL1130,” 10 maggio 2004.
  18. ACM, “Proceedings of the APL’69 Conference on APL,” SUNY Binghamton, NY, 1969.
  19. “The Origins of APL – 1974”; una meravigliosa intervista con gli sviluppatori originali di APL.

Rilascio di codice sorgente storico

  • Codice sorgente di MacPaint e QuickDraw, 18 luglio 2010
  • Codice sorgente del linguaggio di programmazione APL, 10 ottobre 2012
  • Codice sorgente di Adobe Photoshop, 13 febbraio 2013
  • Codice sorgente Apple II DOS, 12 novembre 2013
  • Codice sorgente Microsoft MS-DOS Early, 25 marzo 2014
  • Microsoft Word per Windows versione 1.1a Codice sorgente, 25 marzo 2014
  • Early Digital Research CP/M Source Code, 1 ottobre 2014
  • Xerox Alto Source Code, 21 ottobre 2014
  • Electronic Arts DeluxePaint Early Source Code, 22 luglio 2015

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.