Le Nuove Avventure di un Pythonista in Schemeland

Qualche tempo fa si è concluso il secondo ciclo delle “Avventure di un Pythonista in Schemeland”. Scrivevo nell’editoriale che annunciava la fine del ciclo: “Per darvi il tempo di riflettere e di assorbire le puntate pubblicate finora, conto di lasciare una breve pausa tra la fine di questo ciclo e l’inizio del prossimo”. La “breve pausa” si è allungata a cinque mesi, un pò per le due trilogie di articoli su Python che sono apparsi nel frattempo, un pò per le vacanze estive e un pò per esigenze personali (vi dice qualcosa la parola matrimonio? 😉 Inoltre, in questi mesi ho un pò ripensato la strategia di pubblicazione delle “Avventure”.

[Read more…]

Le avventure del futuro

Con la puntata pubblicata la settimana scorsa abbiamo chiuso il
secondo ciclo delle “Avventure di un Pythonista in Schemeland”. È
tempo di una pausa di riflessione. Il primo ciclo di cinque puntate è
stato puramente introduttivo e rivolto a tutti, mentre il secondo
ciclo è stato più tecnico e rivolto ad un pubblico attento. In
particolare, siamo entrati nel cuore di Scheme, andando a discutere il
concetto di code is data ed introducendo le macro di tipo
syntax-rules. Adesso è il momento di avere un pò di feedback
dai lettori. Sondando nella lista degli autori di Stacktrace ho
scoperto che molti trovano il ritmo di pubblicazione attuale (poco
meno di un articolo a settimana) un pò difficile da seguire. Voi
lettori abituali che ne dite? State ancora seguendo? Vi è scoppiata
la testa leggendo la decima puntata?

[Read more…]

Le avventure di un Pythonista in Schemeland/11

gears.gif

Dopo la teoria discussa nelle puntate precedenti, finalmente è il
momento di un pò di pratica. Dedicherò questa puntata alla discussione
di alcune applicazioni concrete delle macro. In
particolare implementerò un mini-framework di unit test ed un semplicissimo
sistema ad oggetti. Entrambe le cose si possono trovare come librerie
(per i test si vedano gli SRFI 64 e 78, di sistemi ad oggetti ce ne sono
a bizzeffe) ma secondo me è
estremamente utile avere un’idea degli ingranaggi che stanno dietro ad
una libreria di unit test o ad un sistema ad oggetti. D’altra parte, è
anche utile conoscere i problemi che possono far inceppare gli
ingranaggi della macrologia e quindi per prima cosa discuterò una
sottigliezza delle macro che teoricamente è facile da capire, ma che
in pratica può trarre in inganno anche programmatori esperti.

[Read more…]

Le avventure di un Pythonista in Schemeland/10

exploding-head.jpg

In questo puntata chiudo il discorso sulle macro del secondo ordine
iniziato nella puntata scorsa, spiego i segreti dell’operatore di
ellipsis e mostro le soluzioni alle sfide da me lanciate. Inoltre,
spiego come definire una macro define-syntax+ che fornisce delle
funzionalità di introspezione e debugging alle macro che
definisce. Prima di cominciare a leggere, vi consiglio di prepararvi
una grossa scorta di caffè. Come si dice nel mondo Python, questa è
una puntata che rischia di farvi scoppiare la testa, quindi leggetela
con cautela e a vostro rischio e pericolo. Siete avvisati!

[Read more…]

Le avventure di un Pythonista in Schemeland /9

Non c’è limite al livello di sofisticazione che si può raggiungere con
le macro; in particolare è possibile definire delle macro di ordine
superiore, ovverossia delle macro che definiscono macro. Questa
tecnica permette uno stile di programmazione molto elegante, che però
può facilmente condurre a codice incomprensibile e indebuggabile.
Per evitare ciò,
sarò costretto ad introdurre dei tool di supporto. Sfortunamente tali tool non saranno standard, in
quanto la tradizione di Scheme è quella
di fornire degli strumenti di base estremamente potenti con cui è
possibile definire delle utilità che rendono la programmazione in
Scheme relativamente semplice e debuggabile, ma di non inserire
tali utilità direttamente nello standard. Questo significa che ogni
programmatore è obbligato a invertarsi dei tool di sviluppo personali
diversi da quelli di tutti gli altri.

Il sistema di macro non fa eccezione a questa filosofia e per esempio
non esistono nello standard strumenti di debugging per le macro tipo
il macroexpand del Common Lisp anche se sono facilissimi da
costruire. La cosa fastidiosa è che non sarebbe stato difficile
rendere gli strumenti di base più usabili. Ci possono essere varie
spiegazioni per questa omissione. Volendo essere cattivi, si potrebbe
pensare che sia stato fatto per obbigare gli studenti a svolgere i
compiti, o addirittura che sia stato fatto per rendere Scheme un
linguaggio per pochi eletti.

[Read more…]

Le avventure di un Pythonista in Schemeland/8

Come promesso, in questa puntata parlerò di macro. Le macro di Scheme
sono particolarmente avanzate, di gran lunga più sofisticate di quelle
del Lisp e di qualunque altro linguaggio ed hanno una reputazione di
formidabile complessità. Per essere più precisi,
Scheme ha due sistemi di macro inclusi nello standard (più molti altri
sistemi più o meno diffusi): le macro basate su syntax-rules, che
sono di potere limitato ma relativamente semplici, e le macro basate su
syntax-case, che sono potentissime ma decisamente più complesse da
utilizzare. In questo puntata darò soltanto degli esempi di macro
basate su syntax-rules, assieme ad una minima discussione sui
pro e contra delle macro.
Prendete un bel respiro e allacciatevi le cinture che si parte!

[Read more…]

Le avventure di un Pythonista in Schemeland/7

Alcuni lettori mi hanno chiesto se c’è qualche libro
per imparare Scheme che io consiglio particolarmente. In effetti
esistono molti buoni testi, ma nessuno che mi soddisfa al cento per cento
e che io raccomanderei senza riserve ai lettori di Stacktrace.
Questo è il motivo per cui finora sono stato restio a
parlare di bibliografia. C’è anche da dire che io sono uno di quelli che impara
dai manuali e dai newsgroup più che dai libri, quindi non sono ferratissimo
sulla letteratura esistente. Io qui citerò soltanto risorse disponibili in rete.
I lettori che ne sanno più di me in materia di letteratura sono caldamente
invitati a postare le loro raccomandazioni come commenti a questa puntata.

[Read more…]

Le avventure di un Pythonista in Schemeland /6

Dopo cinque puntate introduttive è finalmente arrivato il momento
di fare sul serio. In questa puntata e nella prossima getteremo le basi
per capire cosa stia dietro al celebre motto del Lisp code is data,
che molti considerano il cuore e l’anima del Lisp.
Come sempre, capire richiede qualche preliminare. In questa puntata
descriveremo due tipi di dati fondamentali del Lisp (e quindi
di Scheme): i simboli e le liste. Nella prossima discuteremo
l’operazione di quoting che permette di trasformare un frammento di
codice in una lista di simboli e valori primitivi (cioè converte
codice in dati) e l’operazione di eval che permette di eseguire una
qualunque lista di simboli e valori primitivi corrispondente a codice valido
(cioè converte dati in codice).

[Read more…]

Il futuro de “Le avventure di un Pythonista in Schemeland”

In un commento alla prima puntata delle mie “Avventure” dicevo che questa
era una serie di ampio respiro che ci avrebbe accompagnato per molte
puntate. Parlavo seriamente: in questo momento, dopo cinque puntate,
siamo soltanto alla conclusione dell’introduzione. La serie vera
comincia adesso
.

[Read more…]

Le avventure di un Pythonista in Schemeland /5

Il sottotitolo di questa puntata potrebbe essere “I pericoli del
benchmark”. I benchmark sono utili negli articoli, in quanto
suscitano discussioni e accesi dibattiti e costituiscono
un trucco strategico per attirarsi lettori.
D’altra parte, il pericolo maggiore dei benchmark è quello di
crederci: parafrasando Mark Twain there are lies, damned lies, and
benchmarks
. Questo vuol dire non soltanto che i benchmark lasciano il
tempo che trovano perché la realtà è diversa dal benchmark, ma anche
che è facilissimo sbagliare un benchmark o non interpretarlo
correttamente. In questa puntata mostrerò alcuni dei pericoli
inerenti al benchmark del fattoriale mostrato nella puntata precedente,
che pure potrebbe sembrare banale ed inoppugnabile. Se un benchmark
così semplice è così delicato, vi lascio immaginare che succede per
benchmark più complessi. L’unico vantaggio dei benchmark è che spesso e
volentieri fanno capire quanto siano sbagliati i pregiudizi che
abbiamo sull’efficienza di una certa soluzione rispetto all’efficienza
di un’altra soluzione.

[Read more…]