Ceylon : le nouveau langage de programmation

Parmi les dernières sessions de Devoxx 2011, l'une propose de découvrir un nouveau langage de programmation destiné à la JVM. Il s'agit du langage Ceylon lancé par Red Hat. Alors réelle révolution ou s'agit-il ni plus ni moins qu'un énième langage de programmation ?

Le langage Ceylon s'inspire fortement du monde Java : vous ne serez donc pas dépaysé en voyant les premières lignes de code. Les créateurs du langage ont voulu gommer certains défauts de Java et s'inspirer d'éléments syntaxiques venant de Scala ou du C#.
Le slogan de Ceylon est "Say more, more clearly". La volonté est clairement affichée : le langage doit s'apprendre facilement, être intuitif pour les habitués de Java et surtout moins verbeux.
Les principales caractéristiques et composantes de Ceylon sont alors passées en revue :
  • L'amélioration de la gestion du "Type Safe" : les speakers nous promettent la fin des NullPointerException et de beaucoup d'autres exceptions levées seulement au moment de l'exécution dans Java. Le mot réservé "exists" permet de tester l'existence réelle d'un objet
  • La simplification des niveaux de visibilité. Pour Java, on trouvait 4 niveaux (public, private, protected et package). Pour Ceylon, seuls 2 niveaux ("shared" qui équivaut au "public" et le reste prend le scope de "private")
  • Une représentation basée sur une syntaxe déclarative pour s'affranchir du XML
  • La suppression du mot clé "new" pour construire des nouvelles instances d'objet
  • La gestion des types dans un switch-case (case(is Rectangle) {...} case(is Circle) {...})
  • La fin de la surcharge ("overloading") à la fois au niveau des méthodes et des constructeurs. Chaque objet devra avoir désormais un seul et unique constructeur. Cette suppression de l'overloading peut faire peur et être perçue comme une régression par rapport à Java mais en contrepartie, le passage des paramètres de méthodes devient optionnel
  • La possibilité de définir des méthodes directement à l'intérieur du constructeur
  • Au niveau des attributs, les getters et setters au sens Java disparaissent. Par défaut, les attributs sont "immutables" à moins qu'ils soient marqués "variable". Et un nouvel opérateur d'assignation ":=" fait son apparition
  • Au niveau des abstractions, le "override" de Java devient "actual" pour Ceylon. Par défaut, les éléments ne sont pas redéfinissables. Pour permettre la redéfinition ("overridding"), il faut explicitement le faire à l'aide des mots réservés "default" ou "formal"
  • Au niveau des interfaces, de la flexibilité a été apportée. Il est désormais possible de définir dans une interface des méthodes concrètes. De nouveaux mots réservés apparaissent au niveau des définitions de méthodes (passage de "public abstract" à "shared formal") et au niveau de l'implémentation (passage de "implements" à "satisfies")
  • L'introduction d'objets séquences dans lesquels il est possible de mettre des objets de différents types (union type ou intersection type)

Puis vient le moment de la démonstration où sont créés les premiers fichiers ".ceylon". Un plugin Eclipse dédié au développement Ceylon est téléchargeable. On y retrouve l'auto-complétion, des outils de refactor et d'extraction de code ainsi qu'un debugger.
Il n'existe pas encore de version officielle de Ceylon. L'équipe Red Hat prévoit 3 Milestones avant de sortir la version 1.0. Aucune date officielle n'a été communiquée pour la 1ère Milestone mais les speakers nous promettent sa sortie sous peu.
Pour ce qui est de la simplicité de prise en main du langage, l'objectif me paraît en tout cas rempli. Certes, il y a quelques fonctionnalités qui me semblent intéressantes et prometteuses (comme l'amélioration du "type safe", l'ouverture des interfaces ou les nouveaux objets séquences) mais beaucoup de composantes ne sont en définitive que du sucre syntaxique.
Reste à savoir ce que les développeurs feront comme accueil à ce nouveau langage à sa sortie officielle.