Il linguaggio Fantom

Introduzione               

I fratelli Andy e Brian Frank sono gli autori del linguaggio di programmazione oggetto di questa sezione, ovvero Fantom. Apparso nel 2005 il suo nome originale era Fan ma si è poi deciso di cambiarlo in quello attuale, anche sotto la spinta degli utilizzatori, per facilitarne la ricerca sul Web. Si arrivò così a Fantom che introduce probabilmente in modo voluto una certa assonanza con la parola "phantom" (spettro, fantasma).
Fantom è un linguaggio general purpose multi paradigma. Esso gira su piattaforma JVM (Java Virtual Machine) ed è stato iniziato anche il lavoro per consentire l'interazione anche con il framework .Net, pur se questo sforzo pare aver subito un certo rallentamento ad uno stadio piuttosto non ottimale. Fantom comunque ha come target anche Javascript per l'uso all'interno del browser e gli autori non nascondono l'ambizione, giustificata dal design del linguaggio, di potersi interfacciare un giorno di altre framework come l'interessantissimo LLVM o Parrot. Per ora fa parte della nutrita schiera di idiomi che si appoggia sulla JVM, schiera che si allarga sempre più a causa del vociferato declino di Java (che per ora tuttavia rimane ben saldamente in cima alla classifica dei linguaggi di programmazioni più usati).

Fantom approccia, come detto più paradigmi, in particolare viene supportata la programmazione:
  • object oriented
  • funzionale (pienamente comprensivo anche delle chiusure)
  • dichiarativa

Il tutto, ovviamente, built-in. Inoltre è ammesso l'uso sia della tipizzazione statica che di quella dinamica. Viene pienamente supportata la programmazione concorrente tramite il modello degli attori. La sintassi di questo linguaggio non si discosta molto da quella di Java o C#, ovviamente al fine di attirare programmatori operanti in quelle aree ed offire comunque un modello di codifca condiviso. In generale si rietiene che il suo apprendimento sia piuttosto semplice (è una promessa che fanno tutti i language writer, a dire il vero). Altri aspetti interessanti sono l'implemetazione dell'inferenza di tipo e dei nullable types come anche dei parametri di default dei metodi (non ci sono invece i named parameters, come in Scala e in Ceylon ma possono essere emulati). Una cosa interessante riguarda i numeri: in Fantom esistono solo interi e float a 64 bits, niente tipi speciali definiti su lunghezze diverse in termini di bytes. Abbiamo accennato che le chiusure, come le funzioni, sono precotte nel linguaggio. E vi è il supporto per funzioni di prima classe, il che ci porta verso la piena programmazione funzionale. Insomma le caratteristiche sono davvero tante e questo breve elenco dovrebbe servire solo a creare un po' di curiosità, certamente non può essere esaustivo.

Inutile dire che le motivazioni che hanno portato alla nascita di Fantom sono quelle comuni a quasi tutti i linguaggi di recenti: la ricerca di qualche cosa di diverso e migliore di quanto gli autori utilizzavano fino a quel momento. Tra gli obiettivi dei due fratelli quello di creare uno strumento portabile (di qui il porsi come target varie piattaforme) dotato di API eleganti e chiare, in modo che Fantom fosse facilmente apprendibile senza rinunciare alla potenza. Un bel manifesto, non c'è che dire.

Per realizzare tutto questo Andy e Brian hanno dotato Fantom di molte caratteristiche proprie dei linguaggi moderni. Non è del tutto agevole in realtà elencare in maniera brutale i vari punti salienti di Fantom; li vedremo poco per volta, per ora dovrete accontentarvi dello scarno elenco delle righe precedenti :-). Così al volo segnalo un approccio molto interessante verso l'ereditarietà, realizzata attraverso i mixin che si pongono a metà strada tra l'ereditarietà singola e quella multipla, in pratica è permessa solo la prima ma si possono definire delle interfaccie con implementazione dalle quali è possibile ereditare in maniera multipla. E' un metodo usato con pieno successo in altri linguaggi, come Ruby. Il type system di Fantom è decisamente semplice e questa sembra una reazione alla complessità che si riscontra invece nell'emergente linguaggio Scala; in tal senso i due linguaggi, Fantom e Scala pur somigliandosi in qualche modo formalmente, sono profondamente diversi e direi opposti come filosofia. Non sono supportati i tipi generici in generale, i fratelli Frank hanno addotto motivi di complessità relative al loro uso per giustificare questa rinuncia e sul sito ufficiale pertanto si parla di "approccio limitato" a ma esistono dei tipi generici precotti che vedremo a suo tempo. Inoltre, forse, è in atto un ripensamento su questa cosa, anche se passerà non poco tempo prima di vedere i generics in Fantom.

Nel dare vita alla loro creatura gli autori hanno pensato bene di fornire anche una libreria grafica, legata a Java, e nell'installazione troverete anche un web server oltre a un piccolo editor dedicato (Flux). Ma non sono queste le cose che rendono davvero interessante Fantom.

Sul sito ufficiale troverete tutte le informazioni necessarie per iniziare ma anche moltissimo materiale per comprendere i meccanismi di questo interessante linguaggio. Per capirne le caratteristiche invito anche a cercare su Internet le varie discussione che lo coinvolgono... aldilà di certi atteggiamenti da tifosi di questo o quello strumento potrete capire molto altro su Fantom. Tra l'altro una breve ricerca su Internet mi ha permesso di raccogliere molti commenti positivi su questo linguaggio. Sarà perchè non da fastidio a nessuno, stante l'attuale scarsa diffusione? A me sembra che l'apprezzamento generalizzato sia dovuto al consenso relativo alle sue caratteristiche.

Ovviamente, stiamo trattando un linguaggio di nicchia, per ora almeno, il suo successo futuro è tutto da valutare. Se è vero che se ne parla come di uno strumento molto sottovalutato è anche vero che resta poco diffuso. Non da sottovalutare il fatto che se certamente il sito ufficiale è una miniera di risorse va anche detto che è uno dei pochissimi che contengono materiale organicamente esposto relativo a Fantom. E, a dire il vero, il reperimento delle informazioni non è banalissimo nemmeno su fantom.org stesso, che, al di là del fatto che sia interessante e ricco, si presenta, a mio avviso, un po' dispersivo e, come dire, coi contenuti "sparsi". Ecco, la carenza di libri, di siti specializzati e di informazioni organizzate può costituire un problema per la diffusione del linguaggio. A mitigare un po' questo problema c'è il buon livello partecipativo e di contenuti della community a sostegno del linguaggio. Aggiungiamoci che alcune scelte, come quella di avere solo elementi numerici a 64 bit o la gestione delle liste, sono un po' penalizzanti quando si parla di performance. Tuttavia, facendone una seconda o terza scelta come strumento di lavoro, secondo me vale la pena di perderci un po' di tempo, proprio per le sue peculiarità che devono essere un po' cercate... però ci sono. E sono decisamente apprezzabili.

A conti fatti concordo con chi afferma che si tratta di un linguaggio ingiustamente sottovalutato quando si parla di "the next Java". Non sempre le cose belle sono apprezzate nel modo giusto.

Prima di proseguire non può mancare il consueto saluto da parte del linguaggio:

  Hello, World!
1
2
3
4
5
6
7
class HelloWorld
{
  static Void main()
  { 
    echo("Hello, World!")
  }
}