Ceylon project
   

Introduzione                   

Ceylon è un nuovo linguaggio di programmazione voluto da RedHat e pensato da Gavin King insieme ad un gruppo di collaboratori. Il linguaggio nasce come fortemente ispirato a Java ma proponendosi come alternativa moderna allo stesso. Si appoggia sulla arcinota JVM (Java Virtual Machine) ed il suo ambiente di sviluppo principale, almeno inizialmente, sarà Eclipse. Tutto insomma confluisce alla creatura di Sun (adesso Oracle). Tuttavia la genesi di questo linguaggio nasce, in base a quanto riferito dallo stesso King, da un profonda analisi delle debolezze di Java stesso. Debolezze sulle quali si può discutere a lungo ma, obiettivamente, è certo che sono nati molti linguaggi (il più promettente sembra Scala ma ci sono anche Fantom, Groovy, Gosu, il recentissimo Kotlin) che hanno tutti la comune ambizione di essere "migliori" di Java. Un motivo ci sarà. Ceylon si inserisce in questo filone anche se il suo autore respinge decisamente l'etichetta presto affiabbiata al suo nuovo linguaggio, quella di "Java killer".

Le caratteristiche di Ceylon sono ben espresse sul sito ufficiale. Lo sforzo di King e del suo team è rivolto su vari fronti:
  • creare un linguaggio general-purpose che strizzi un occhio alla programmazione in team
  • proporre una sintassi semplice e vicina a quella della maggior parte dei linguaggi di programmazione (quindi vicina a Java, C/C++, C#)
  • rendere agevole la leggibilità dei programmi.
  • poter disporre di tutta la potenza della immensa libreria disponibile per Java ma appoggiandosi su di un SDK più moderno
  • rimediare a tutta una serie di pesantezze e contorsioni dalle quali Java non può strutturalmente più liberarsi e migliorarne la "type safety". Ad esempio Ceylon odia certe verbosità eccessive, pur senza cadere nel difetto opposto, come a volte è stato detto di Scala del quale invece si vorrebbero evitare le complessità..

Relativamente all'ultimo punto King ha espresso il suo pensiero durante la prima presentazione di Ceylon. Uno dei tanti link disponibili sull'argomento è questo.

Prima di passare ad un rapidissimo sunto delle caratteristiche del linguaggio mi piace parlare di un aspetto che mi ha incuriosito molto ed è stata la reazione decisamente "esagerata" che la presentazione di Ceylon ha suscitato nonostante, tutto sommato, non sia stata poi una cosa fatta in pompa magna, anzi. In particolare la comunità che ruota intorno a Scala sembrerebbe aver digerito decisamente male il nuovo arrivo (la cosa non è però successa per Kotlin, stranamente ma forse perchè l'autore di questo linguaggio, Breslav, ha subito specificato sul sito di presentazione "if you are happy with Scala you probably don't need Kotlin") e questo ha dato origine a dei pepati botta e risposta tra il combattivo King, che ha il suo carattere, e, appunto alcuni sostenitori di Scala (la cosa non ha ovviamente coinvolto un personaggio del calibro di Martin Odersky, il papà di Scala che si è tenuto ben al di fuori della polemica, per quanto ne so). Non so sinceramente il perchè di tutto questo astio, forse non piace King? Forse il fatto che dietro ci sia una società potente come RedHat preoccupa chi conosce un certo linguaggio e teme di vedere ridotti gli spazi del proprio strumento preferito? Non è cosa buona che arrivino più alternative? Non si sa, il mondo che ruota intorno a Java ha quasi smesso di preoccuparsi di Microsoft, che continua intanto a guadagnare consensi col suo framework .Net in generale e col suo C# in particolare (buone novità introdotte con le versioni 4.5 e 5.0), per combattere una (stupida) guerra intestina finalizzata a trovare "the next Java". Che dire, contenti loro....

Detto questo vediamo qualche caratteristica di Ceylon:

  • come abbiamo detto è un linguaggio general-purpose.
  • naturalmente, come molti nuovi linguaggi, è fortemente orientato agli oggetti.
  • Si tratta di un linguaggio a tipizzazione statica (questo mi piace) quindi il compilatore esegue un type-check
  • è un high-order language, il che significa che ogni elemento di un programma dotato di nome è un valore. Questo aiuta a ragionare in modo funzionale, tra l'altro, anche se la spinta verso il paradigma funzionale mi pare meno decisa di quanto ad esempio si trova in Scala.
  • Utilizza l'inferenza di tipo (tramite la keyword local).
  • in Ceylon non è previsto l'overload degli operatori (cosa che non piace a qualcuno) bensì un loro comportamento polimorfico.
  • gestisce l'ereditarietà singola + le interfacce, proprio come Java e C#. Posso dire che sono un nostalgico dell'ereditarietà multipla (ho torto, lo so)?
  • favorisce la modularità.
  • Ceylon appoggiandosi sulla JVM usufruisce di tutti i vantaggi della stessa (gestione della memoria, concorrenza ecc.).
  • Java e Ceylon possono collaborare in forma biunivoca.
  • compila anche avendo javascript come target.

Riguardo al penultimo punto si può rimarcare un dettaglio di carattere "interno" che sottolinea la vicinanza estrema tra Ceylon e Java. Per l'esecuzione dei programmi il compilatore Ceylon si affida al compilatore javac (ironia della sorte sviluppato in buona parte da Martin Odersky, il già citato padre del linguaggio Scala, concorrente di Ceylon) cosa che è possibile traducendo la sintassi Ceylon direttamente nel linguaggio interno di javac. Da notare che, contrariamente a quel che qualcuno potrebbe pensare, non vi è alcuna produzione di codice java puro in nessuno stadio intermedio. In questo senso lo stesso King afferma che il compilatore Ceylon è "mezzo compilatore" che si occupa di gestire grosso modo le fasi parsing e di costruzione di un albero sintattico che sia comprensibile per il compilatore java. Va detto che tutto  questo è trasparente al programmatore, oltre che naturalmente all'utente.

Ovviamente c'è qualche punto quanto meno oscuro. Alcuni dubbi si possono ad esempio sollevare sull'introduzione di alcune keyword nuove che si discostano da quelle di uso comune in Java delle quali dovrebbero ricalcare le funzionalità. King ha giustificato l'introduzione delle stesse con il supporto a funzionalità che presentano caratteristiche peculiari per cui sarebbe stato spesso fuorviante mantenere la stessa keyword, comunque, a suo dire, la semplicità di apprendimento del linguaggio non viene inficiata in alcun modo (e su questo sono sostanzialmente d'accordo, la cosa è stata origine di polemiche pretestuose da parte dei critici di King). Altro grosso problema, secondo alcuni, è l'assenza dell'overload degli operatori, Ceylon adotta un polimorfismo per gli stessi. Insomma ci sono i pro e ci sono anche dei contro. A voi la scelta.

Per quanto Ceylon e Java siano vicini (il compilatore Ceylon evidentemente dovrebbe essere in grado di compilare anche Java) e possano essere collaboranti, il linguaggio da RedHat avrà un suo SDK che rimpiazzerà tra l'altro parti fondamentali della libreria di classi di Java.

Conformemente alla ormai comune idea che un linguaggio di programmazione ambizioso non possa fare a meno di un buon supporto da parte di editors e ancor di più IDE evoluti, pare che Eclipse, come è per Java, sia l'ambiente di sviluppo prediletto (anche Kotlin, restando il tema, essendo prodotto da Breslav creato sotto l'ala protettrice di Jetbrains sarà integrato da subito con IntelliJIdea) e fin dalle prime fasi di vita sarà sviluppato un apposito plugin. Onestamente non sono un gran tifoso di questo pur potentissimo ambiente di sviluppo ma tant'è, senza dubbio si tratta di una cosa positiva, non lo posso negare.....