E’ molto difficile scrivere una recensione di questo libro edito da O’Reilly poiché, per diversi motivi che spiegherò nel prosieguo, è probabilmente il libro tecnico più particolare che abbia mai letto in vita mia.
L’
argomento è molto interessante e trendy, poiché tratta della programmazione concorrente su
Mac OSX Lion e
iOS 5. Apple, nel trimestre corrente, pare sia diventata, grazie soprattutto all’iPad, il venditore numero uno di
client PC, e tutti i device di ultima generazione sono già perlomeno dei dual core. Tutti i
rumors portano a pensare che già dalla prossima generazione si potranno comunemente avere chip quad core su un dispositivo portatile, per cui anche gli sviluppatori più ad alto livello di
iApp dovranno acquisire qualche nozione di programmazione concorrente per sfruttare adeguatamente tutte queste CPU.
Apple ha introdotto il
GCD (Grand Central Dispatch) con
Lion e
iOS 5: queste API permettono di astrarsi dai thread modellando la concorrenza per code (
queue) e rendendo molto più semplice e mantenibile la scrittura di codice concorrente. Il
GCD ha a sua volta bisogno dei blocchi (block, o closure, termine che va più di moda) per poter esprimere il concetto di azione, caratteristica questa che era stata introdotta da Apple nella generazione precedente dei suoi sistemi operativi (Snow Leopard e iOS 4).
Una
closure è sostanzialmente una funzione trattata come
First Class Object: in pochissime parole una funzione che può essere passata come parametro — senza puntatori a funzioni— che può essere restituita come tipo di ritorno e che può “catturare” lo stato delle variabili nel suo
lexycal scope. Una closure può rappresentare efficacemente un’azione e dunque in sintesi si può dire che
GCD permette di effettuare uno
scheduling di
closure che saranno eseguite su diverse CPU/core liberando il programmatore dal fardello della gestione diretta di thread.
Un fatto interessante e sottovalutato da molti, compreso l’autore del libro in questione, è che l’introduzione delle
closure è stata realizzata a livello di C, direttamente nel compilatore clang, e proposta come estensione al linguaggio
C stesso. Questo implica che i blocchi, ma anche
GCD stesso, non sono appannaggio di Objective-C e dunque solo di Apple, ma possono essere utilizzati anche in altri contesti: uno degli sforzi più interessanti in tal senso è
libdispatch, un progetto che mira a creare una versione di Apache in modalità
MPM (Multi Process Module) più efficiente e scalabile su OSX e BSD
rifattorizzando il codice
multithreaded con le API di
GCD.
La prima cosa che si nota del libro è la sua estrema
brevità: 46 pagine in totale, divise in due capitoli. Sulle prime pensavo che la confezione fosse vuota e fosse un catalogo. Vista la copertina, ho pensato allora che fosse un estratto del libro. Ho dovuto controllare online per assicurarmi che quello sotto mano fosse il testo vero e proprio e che non ci fossero errori!
Togliendo indice, prefazioni e pagine bianche o di pubblicità, stiamo parlando di
17 pagine effettive per il capitolo sui blocchi e
27 pagine effettive per il capitolo su
GCD. Ora, è vero che essere concisi è spesso un pregio più che un difetto, ma c’è anche da dire che è in assoluto la prima volta che vedo un libro trattare un argomento specialistico in maniera così stringata. Soprattutto tenendo conto che la
companion guide di Apple sui blocchi è di circa 20 pagine, e quella analoga su
GCD di circa 90. E le
companion guide di Apple non sono esattamente famose per essere
prolisse.
La seconda cosa che si nota è che nel libro
non ci sono rappresentazioni grafiche, che aiutino a capire la sintassi dei blocchi, sintassi piuttosto ostica per i neofiti e dovuta principalmente alla necessità di dover essere retrocompatibile con 40 anni circa di storia, con Objective-C, con C++ e Objective C++. Disegnini che per inciso nelle
companion guide di Apple ci sono.
Passando ai
contenuti veri e propri, l’autore illustra le caratteristiche di blocchi e
GCD con semplici
snippet di codice, di fatto parafrasando le guide Apple e poco più: non ci sono pattern di utilizzo o esempi di esperienze reali in
GCD, non ci sono linee guida,
best practice o idiomi. Non essendo il testo esaustivo, rimangono dei dubbi da colmare e sarebbe comunque necessario leggere le guide ufficiali: credo che il libro fosse pensato per essere un (buon) tutorial online, o un'estensione del
cookbook dello stesso autore, e che dunque non giustifichi assolutamente il suo prezzo, peraltro non contenuto come l’esiguo numero di pagine lascerebbe sperare.