Tech

Swift: il sistema di sviluppo che segna una nuova era per Apple

Michele Costabile | 23 Settembre 2014

Apple

In totale segretezza Apple ha lavorato per quattro anni su un nuovo ambiente di sviluppo che cambia le regole del […]

In totale segretezza Apple ha lavorato per quattro anni su un nuovo ambiente di sviluppo che cambia le regole del gioco

Alcuni mesi fa, una platea di sviluppatori raccolta al Worldwide Developer Conference, l’appuntamento annuale di Apple, ha accolto con un boato una notizia rivoluzionaria: la società  di Cupertino ha sviluppato un nuovo linguaggio di programmazione. Si chiama Swift e dietro all’architettura del linguaggio c’è Chris Lattner: uno dei progettisti di Llvm, la nuova architettura di compilatori che ha preso il posto di Gcc e ha dato origine al compilatore Clang.

Il nome del linguaggio è interessante: il vocabolo swift, come aggettivo, significa veloce, ma come sostantivo è il nome inglese del rondone (apus apus), un uccello capace di raggiungere 112 km/h in volo battuto e 220 km/h in picchiata. La caratterizzazione con un simbolo di forza, velocità  e leggerezza, fa intuire che Swift non sarà  un’alternativa entry level, non sarà  un Visual Basic per Apple. Swift è pensato per diventare il linguaggio primario per gli sviluppatori della mela. Un atto rivoluzionario, è vero, ma che ha illustri precedenti, come la transizione a C# che ha operato Microsoft.

swift 01

Le motivazioni per un linguaggio nuovo sono due. La difficoltà  di fare evolvere Objective-C, concepito con il vincolo di compatibilità  con il predecessore C, aggiungendo fra le righe un’infrastruttura per la creazione di oggetti ispirata a Smalltalk. Dall’altro la difficoltà  di lavorare con un linguaggio schizofrenico, con una sintassi elevata per operare con gli oggetti di Cocoa, mescolata all’austera, disadorna, semplicità  del C. Il C, che è noto per la sua propensione a lasciar filtrare attraverso la compilazione costrutti pericolosi, che altri linguaggi catturano in fase di compilazione.

La misura della novità  sta in un tweet del giornalista americano John Gruber (@gruber) durante l’annuncio: «Le persone con un badge stampa sono in silenzio, gli sviluppatori sono impazziti. È una notizia enorme: si tratta del futuro di tutto lo sviluppo Apple». I più accreditati technical writer di area Apple consigliano però di aspettare a prepensionare Objective-C e buttare via i vecchi manuali di programmazione.

Il nostro prossimo progetto iOs o OS X potrà  essere in Swift, ma per anni a venire il framework con cui interagiremo sarà  scritto in Objective-C, così come nel linguaggio tradizionale saranno scritti per qualche tempo i layer di interfaccia verso codice legacy in C o C++. La buona notizia è che in Swift l’interazione col framework è nativa e naturale. Questo giustifica la slide che lo presentava come «un Objective-C senza il C».
Sorprende come Apple sia riuscita a mantenere segreto un progetto di queste proporzioni per gli anni necessari alla creazione di un compilatore. Il responsabile del progetto, Chris Lattner, nella sua homepage (https://nondot.org/sabre/) afferma infatti di avere iniziato il lavoro su Swift nel 2010, poco più di quattro anni fa.

L’ABC di un linguaggio

Cominciamo a dare uno sguardo di insieme a Swift, iniziando con un esempio

let base = 3
let power = 10
var answer = 1
for _ in 1...power {
answer *= base
}
println("\(base) to the power of \(power) is \(answer)")
// prints "3 to the power of 10 is 59049"

Si tratta di un modo rozzo di calcolare la decima potenza di tre, ma queste poche righe si colgono in azione particolarità  interessanti del linguaggio.
La prima cosa che salta all’occhio è la parola chiave let per l’assegnazione, una keyword che è capace di dare qualche brivido ai reduci dei primi Basic. Come vedremo è la spia di una funzione avanzata. Notiamo l’assenza dei punti e virgola come separatori fra le istruzioni. I punti e virgola sono opzionali, ma ridondanti, come in JavaScript, e si possono omettere del tutto, salvo nel caso che si accumulino più istruzioni sulla stessa riga. Un’altra reminiscenza del linguaggio dei browser è l’istruzione var nella terza riga. La compresenza di let e var per la definizione di variabili, discende da un aspetto fondamentale del linguaggio, l’immutabilità  di alcune variabili. Let si usa per creare variabili che possono essere assegnate una volta sola, mentre var si usa per variabili che possono mutare di valore nel corso dell’esecuzione. Si tratta di un impegno che il compilatore ci farà  rispettare, avvisandoci se trovasse un’istruzione come power = 5 perché è un errore tentare di alterare il valore di una costante.

Il ciclo che segue mostra un altro paio di dettagli interessanti. L’indice del ciclo è un underscore, questo esprime che non ci interessa usare il valore dell’indice all’interno del loop, vogliamo solo eseguire il ciclo un certo numero di volte. Specificando un underscore, usiamo una variabile anonima.
In secondo luogo, for _ in specifica un ciclo in un range di valori. L’espressione 1…power denota un intervallo di valori e specifica anche che l’intervallo è chiuso a destra, perché abbiamo scritto tre puntini, non due.
Il linguaggio è compatibile unicode: possiamo usare caratteri internazionali nel nome degli identificatori, come in questo esempio

let π = 3.14159
let 你好 = "你好世界"

Come tutti i linguaggi moderni, non mancano collezioni di vario tipo. Ecco, per esempio, come si crea e inizializza un dizionario

var airports = ["TYO": "Tokyo", "DUB": "Dublin"]
println("Il dizionario degli aeroporti contiene \(airports.count) elementi.")
// stampa " Il dizionario degli aeroporti contiene 2 elementi."

Un dizionario, ovviamente, è mutabile, quindi possiamo aggiungere un elemento

airports["LHR"] = "London"
// ora gli elementi sono tre

E possiamo cambiare il valore associato a una chiave

airports["LHR"] = "London Heathrow"

Nell’esempio successivo mostriamo il modo naturale per gestire una variabile non assegnata in Swift, un if sull’assegnazione:

if let airportName = airports["DUB"] {
println("Il nome dell'aeroporto con codice DUB è \(airportName).")
} else {
println("Non abbiamo il codice DUB nell'elenco.")
}

➜ Continua a leggere: Swift: il nuovo linguaggio

< Indietro Successivo >