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%
Scarica

APLslides