Category Archives: Smalltalk

C++, Objective-C, Smalltalk: “estendere” una classe

byte_1981_08

Qualche anno fa (sicuramente meno di 10) scoprii l’Objective-C e mi piacque molto. Ci sono almeno due cose da considerare: ① non sono mai stato un amante del C++ (potendo ho sempre provato ad evitarlo; ho iniziato ad usarlo per me stesso giusto con il C++11); ② per non ricordo quale motivo mi ero imbattuto già nello Smalltalk.

Continua a leggere

Ancora su Smalltalk

Il post precedente su Smalltalk ha generato qualche perplessità. Anche a me. Ma un passo per volta, non voglio fare il solito pasticcio.

In una email (ma perché non commentate che così lo vede l’intera dozzina di lettori affezionati) un mio amico e ex-collega è rimasto perplesso dal codice di “Hello World!”, questo

"Hello World!" printNl

OK, provo a riscriverlo, in modo più tradizionale, ecco il contenuto del file hw.st.

"hw.st"
"scrive Hello World! sul terminale"

| hw |                  "dichiaro la variabile hw"

hw := 'Hello World!'.   "assegno alla variabile hw la stringa"
                        ""
hw printNl              "invio all'oggetto hw il messaggio printNl"

I testi tra le virgolette sono commenti e sono ignorati dall’interprete (sì, di solito sono molto meno commentoso 😉 è che oggi sono in vena di didascalismi).

eseguendolo si ottiene:

* : smalltalk $ gst hw.st
'Hello World!'
* : smalltalk $ 

Allora, grazie ai commenti (vedete che a volte servono?), adesso la sintassi di Smalltalk, benché diversa dalle solite cui siamo abituati, acquista un senso.
In un colloquio successivo il caso si è ampliato, ecco:

* : smalltalk $ gst
GNU Smalltalk ready

st> 1 + 2 * 3
9
st> 

Eh? Ma a scuola (credo in prima media) mi dicevano che la “per” ha priorità più elevata e si deve fare prima; e anche in C, Basic, Delphi, Python et al. sono tutti d’accordo (tranne Lisp e Forth ma quelli sono fuori di melone, si sa).
Come mai? È di nuovo la filosofia degli oggetti: all’oggetto 1 inviamo il messaggio + con il dato 2 e poi il messaggio + con il dato 3.
E qui entrano in gioco le regole di esecuzione di espressioni complesse, regole che dipendono dal tipo di messaggio, mi sa che dovete davvero leggere il capitolo “Unary, Binary and Keyword Messages” p.33 del PDF computer_programming_using_gnu_smalltalk.pdf consigliato nel post precedente, scaricabile qui

(Ritenetevi tutti avvisati: la prossima volta interrogo!).

Naturalmente possiamo aggiustare le cose, così:

st> 1 + (2 * 3)
7
st> 

OK? Io mi ricordo (sono vecchio e i vecchi sono soliti partire con “una volta…” quando meno te lo aspetti) che ero rimasto sconvolto da quest’istruzione (la scrivo come si usava allora in FORTRAN IV):

I=I+1

perché sapevo che per ogni numero intero (e I è intero, vero? e gli interi allora erano confinati in [-32768, 32767]) minore di infinito non ne esiste nessuno per cui sia verificata quell’ugualianza (Peano docet). Poi leggendo il Wirth scoprii che = (Wirth naturalmente usava :=) si deve leggere “diventa” (becomes) e tutto acquista senso, la matematica è salva.

E tornando a Smalltalk merita davvero un po’ di attenzione, e la programmazione a oggetti dopo risulta più razionale. Magari non si usa nel mondo del lavoro, ma…

Squeak

A proposito: Smalltalk era diventato famoso perché strettamente interconnesso a quella che oggi si chiamerebbe GUI (Graphic User Interface). Quest’interfaccia esiste ancora, è disponibile free, l’implementazione più conosciuta è Squeak, trovate tutto qui.

Io ho provato a installarla ma l’ho abbandonata. Perché fa troppo: è un vero e proprio ambiente, le applicazioni girano dentro la GUI di Squeak, valgono le regole della GUI che sono molto diverse da quelle cui sono (siamo) abituati. O si decide di adottarla e si mette in conto il tempo per impararla (ma allora deve davvero servire a qualcosa, anzi poi si farà tutto con quella) o si passa ad altro.

Sarà che sono vecchio (e dai!) ma a me piacciono di più altre cose, più piccole, più immediate.
E sono ancora abituato alla linea di comando — sono vecchio 😉

Smalltalk

Questo è un post lungo ~25 anni 8)

Non so se può interessare qualcuno (oltre a t-Lex) ma devo postarlo. Davvero.
Mi spiego: il 24 gennaio 1984 esce il MacIntosh, oggi universalmente conosciuto come Mac. Ma il Mac era stato preceduto da Lisa e un mio collega ne era stato folgorato e parlava solo di quello; poi è finito a fare il gestionale e non usava nemmeno più il ‘puter, ma questa è un’altra storia.

Lisa, Mac e famiglia erano Apple ma le loro origini vanno ricercate in Xerox PARC, con tantissimi altri aggeggi (es.: la stampante laser) senza i quali la vita di tutti i giorni sarebbe quasi completamente diversa. E al PARC c’era il Learning Research Group con Alan Kay (et al.).
E questi usavano Smalltalk. Allora non c’era tutto questa roba open source che siamo abituati a trovare sul Web, anzi non c’era nemmeno il Web 😦

Io avevo letto qualcosa su Smalltalk ma senza mai andare a fondo anche perché il mondo informatico aveva recepito le idee e i concetti di LRG –la programmazione orientata agli oggetti– ma con altri linguaggi. A dire il vero ricordo che un mio amico me ne parlava, in relazione a OS/2 ma poi non se ne fece niente.

Poi una decina di giorni fa FSM mi instilla nella mente Squeak. E Squeak (prossimamente su questo blog, forse) è Smalltalk. Ed eccomi qua 🙂

Per installare GNU/Smalltalk con Ubuntu basta dare nel terminale

sudo apt-get install gnu-smalltalk

e avrete a disposizione l’interprete, invocabile con gst 😀

Smalltalk è un linguaggio di programmazione orientato agli oggetti con gestione dinamica dei tipi e con un paradigma di programmazione riflessivo.

dice Wilipedia. Ed ha una sintassi particolare, tutta sua. Ma siamo fortunati: esiste un manuale dovuto a Canol Gökel veramente ottimo, con esempi, non troppo lungo: “Computer Programming using GNU Smalltalk“. Lo potete scaricare da qui con tantissimi altri.

Ho provato a riassumerlo ma non ci sono riuscito: secondo me è impossibile. E poi, dai, sono un centinaio di pagine chiare, semplici, fondamentali.

In ogni caso, anche per rispetto alla tradizione, ecco la schermata della mia prima sessione

e questo è il codice per hello_world.st

"hello_world.st"
"scrive 'Hello World!' nel terminale."

'Hello World!' printNl

Questo è il mio contributo per l’anniversario del Mac, buon compleanno Mac! 😀
E domani è il compleanno di mio padre: buon compleanno papà! 😀