APL Italiana SpA “APL as a tool of thought” Un linguaggio di programmazione, un bagaglio personale negli studi scientifici Mauro Guazzo Codework Italia srl [email protected] Viviamo in un’epoca eccitante di sorprendenti sviluppi software… Vero ? Falso ? … ma rimangono dei motivi di frustrazione: -convivenza con bugs in numero spropositato -accettazione della filosofia “Best effort” invece di “Funzionamento garantito” -malfunzionamenti non riproducibili, perche’ tutto e’ dinamico e interdipendente. -prevalenza dell’imballaggio sul prodotto, cioe’ dell’interfaccia stile “Carnevale di Rio” sui meriti dell’applicazione. -regola del silenzio: applicazioni che non spiegano il loro rifiuto ma rendono un’opzione “fioca” e non cliccabile. “Non ho capito il loro modo di ragionare, la mia richiesta e’ assurda, l’opzione e’ temporaneamente inattiva o si tratta di un bug ?” -accettazione del crash come evento fisiologico. Vero ? Falso ? Non sta a noi cambiare il panorama del software… … ma forse possiamo trovare un parziale sollievo, un’ambiente in cui il “Funzionamento garantito” vale ancora ? Cercasi interprete che ci eviti questo genere di oltraggi: APL (A Programming Language) Kenneth Iverson, Harvard University, circa 1960 Una notazione eseguibile, nata per comunicare algoritmi fra persone, in seguito eseguita anche da un interprete. Un linguaggio di programmazione “fuori del coro”, eccellente per applicazioni scientifiche, ma adottato spesso anche per applicazioni gestionali. Rigore, concisione, potenza espressiva, portabilita’, indipendenza dall’ambiente ospite. APL e’ il principe degli Array Programming Languages, nel senso che tutte le sue primitive nascono per tabelle multidimensionali. Ed e’ uno strumento divertente per “pensare ad alta voce”. APL e’ un ottimo candidato per: -Catturare la versione di riferimento di un algoritmo (eventualmente poi realizzato in altri linguaggi) -Comunicare idee fra persone -Costruire prototipi -Accompagnare una persona come strumento personale negli studi scientifici -Sviluppare applicazioni scientifiche -Costruire in tempi brevi un linguaggio specialistico per gli oggetti in corso di studio (per es. permutazioni, matrici di numeri complessi, tensori, grafi, campi finiti, codici, immagini bitmap, spartiti musicali, stringhe di DNA, etc. etc.) -Simulare sistemi -Simulare un processore e sviluppare software per una CPU che ancora non esiste -Raddoppiare la produttivita’ di un team di sviluppo software. -Elaborare programmi sorgente. Dove invece l’applicabilita’ dell’ APL e’ dubbia: -Come strumento unico di un programmatore professionista (il cui ambiente di sviluppo e’ spesso prescritto da altri). -Dove un compilatore e’ preferibile ad un interprete o le prestazioni dell’applicazione sono piu’ importanti della rapidita’ di sviluppo. -Dove l’algoritmo da realizzare e’ banale e lo sforzo di sviluppo sta tutto nella “delivery”: Graphic User Interface, API, connettivita’ Internet. -Dove la macchina target non dispone di un interprete APL ! Cosa rende l’APL unico: -Rigore matematico, potenza espressiva, concisione ineguagliata -Sintassi semplicissima, geniale sintesi tra semplicita’ e potenza -Trattamento elegante di tabelle multidimensionali e strutture ricorsive -Indipendenza dal sistema operativo ospite (portabilita’). Possibilita’ di concentrarsi sul problema, ignorando i vincoli informatici. -Linguaggio nato adulto (?). Scelte dettate dalla razionalita’ e non da considerazioni di accettazione commerciale. -Massima generalita’. Niente eccezioni. Quello che funziona per 3 elementi funziona per 30000 (e nei casi estremi e degeneri) -Standard di linguaggio consolidato e immutabile (NB. questo vale per la specifica di algoritmi - molte altre componenti necessarie sono lasciate alla creativita’ dei realizzatori dell’interprete, compresi il file system, l’interfaccia grafica, le primitive TCP/IP, le API offerte, …) Character set: specifico dell’APL ! (non ASCII, ANSI o EBCDIC. Tuttavia lo standard UNICODE contiene anche il character set APL ) Problema di simboli criptici (tastiera, schermo, stampa ?) (oltre a A…Z a…z 0…9) Tipi dato: ridotti a due. Una cella contiene o un carattere o un numero. NB. I problemi di rappresentazione interna (float, integer, binary…), di precisione e di calcolo numerico non scompaiono, ovviamente, ma in prima battuta sono gestiti dall’interprete . Strutture dati: 1-Singleton ovvero scalare. La variabile contiene un solo carattere o numero e non e’ indicizzabile come tabella. 2-Simple array. Tabella ad N dimensioni (che non mescola numeri e caratteri). Le primitive APL operano tutte su questa struttura, in modo uniforme. La variabile e’ indicizzabile come per es. A[ 1; 5; 12; 1] 3-Array of arrays. Estensione ricorsiva (senza limiti di nesting) di un simple array in cui ogni celletta contiene a sua volta un simple array o un array of arrays. Miscela di contenuto numerico e carattere. Simple array (rango 2, dimensioni 2 4, numerico) 126 0 1.1E12 0.234 444 75 126 126 Array of arrays (rango esterno 1, dimensione 5, misto) 3.14159E6 A Tre tipi di istruzioni: Nell’uso immediato (line-by-line): -Assegnazione (vedi sintassi di base) Nella programmazione, anche -GOTO condizionato -Definizione di funzione di utente Strutture di controllo esecuzione: - Definite nel linguaggio: -Chiamate ricorsive -GOTO condizionato, equivalente a : IF condizione GOTO label - Aggiunte dagli implementatori: tutte le strutture usuali (equivalenti a IF-THEN-ELSE, FOR-NEXT, WHILE, REPEAT, CASE, etc.) Istruzioni dichiarative: nessuna per dichiarare variabili. La testata di una funzione di utente specifica la sintassi voluta, in una delle tre forme: Pluto Pluto X X Pluto Y (nessun argomento di input) (un argomento) (due argomenti) Le funzioni primitive APL sono rappresentate da simboli adhoc, le funzioni definite (i programmi) hanno nomi alfabetici. Es. per la potenza 2 * 5 (funzione primitiva) 32 2 Power 5 32 (funzione definita) Sintassi di base (Da destra a sinistra) Operando Funzione 3 + 2 - 53 + - 12 , ABC / a = b , Log 12 12 13 ( 1 + 2 ) , ( X , Y ) ABC [ 3 / 2 ; 5 + 6 ] Precedenza di esecuzione: Da destra a sinistra senza eccezioni 4 x 2 + 3 20 ( 4 x 2 ) + 3 11 Risultato immediato: Se un’espressione non e’ assegnata ad una variabile, il risultato va a schermo. In alternativa: ABC 4 x 3 + 2 L’ APL e’ realizzato da un interprete, non da un compilatore. I vantaggi di un ambiente interpretato sono sfruttati al massimo dall’APL. Per es. -E’ possibile assemblare ed eseguire codice “al volo” con estrema generalita’. -In caso di errore, l’interprete riprende il controllo senza abortire l’applicazione. In ambiente di sviluppo e’ facile rimediare all’errore e proseguire. In ambiente di produzione e’ agevole proteggere l’utente intercettando e gestendo l’errore. Ambienti in cui l’ APL e’ disponibile: -CMS, TSO per S/390 (Mainframe IBM) -UNIX -LINUX -DOS -Windows -MacOS . . . Fornitori di APL: -IBM (prima implementazione) -Dyalog (usato in questa presentazione) -APL 2000 (erede di STSC) -Soliton (erede di I.P. Sharp) . . . Risorse WEB: www.sigapl.org/ Materiale ACM su APL e J www.sigapl.org/whyapl.htm Articolo Why APL http://elliscave.com/APL_J/tool.pdf Articolo “APL as a tool of thought” www.apl2000.com/ Fornitori di APL 2000 www.dyalog.com/ Fornitori di Dyalog APL chilton.com/~jimw/Welcome.html Collezione di links www.vector.org.uk/ Rivista APL www.apl.it/apl.html APL Italiana www-306.ibm.com/software/awdtools/apl/ Fornitori di APL2 directory.google.com/Top/Computers/Programming/Languages/APL/ Directory dmoz.org/Computers/Programming/Languages/APL/ Directory en.wikipedia.org/wiki/APL_programming_language Storia dell’ APL http://www.bookrags.com/Kenneth_E._Iverson Sviluppo dell’APL news:comp.lang.apl Newsgroup www.quantys.fr/produits/apl/cours/index.htm Corso di Apl Dyalog www.afapl.asso.fr/AFAPL_2006_v2.pdf Introduzione elementare “OK, sono pronto a provare l’APL” “Concretamente, che devo fare ?” 1.Procurarsi un interprete 2.Accertarsi che sia ben installato (documentazione ? mappa tastiera ? Fonts ? Stampa caratteri ? Salvataggio del lavoro fatto ? Uso della sessione ? Uso dell’ editore ?) 3.”Da chi imparo ?” (corsi, libri, materiale Web, APLista senior, amico che impara con me ?) 4.Accertarsi di imparare solo l’ APL standard --- distinguere il prodotto dall’imballaggio. (vedi slide seguente). 5.Capite le poche regole del gioco, sperimentare ! Non pretendere di impararlo tutto. 6.Riflettere bene prima di lanciarsi a trasformare un algoritmo in un prodotto finito consegnabile in APL (completo di GUI, grafica, file system, interazione con Windows, Internet ecc.) File system Error trapping TCP/IP APL standard Simple arrays Trace API (OLE,DDE,ODBC, COM,.Net, ...) Arrays of arrays, estensioni non standard, bizzarrie,… Strutture di controllo. Strumenti GUI objects, properties, events, methods Portabilita’ tra dialetti APL: 100% 70% 20%