Archive

Articles taggués ‘ceylon’

Mix-IT 2015 – Le langage Ceylon

logo-mixit

Le langage Ceylon étant présenté dans l’une des nombreuses et intéressantes conférences du Mix-it. Au passage, je ne peux que vous conseiller d’assister au Mix-it pour vous tenir au courant des nouveautés dans le monde du Java et de l’agilité, mais pas uniquement.

Revenons donc au langage présenté :

Origine du langage

ceylon-logo
C’est un langage créé par Gavin King et publié par Red Hat sous licence Apache v2 depuis 2011. Il est actuellement en version 1.1.

Les points importants de Ceylon :

  • Il tourne sur la JVM et sur un moteur JS
  • Il est complètement interopérable avec Java et Javascript: on peut appeler du code Java depuis Ceylon, et on peut appeler Ceylon depuis du Java.
  • Il a une syntaxe qui ne déroute pas un programmeur Java, mais avec de fortes évolutions : l’inférence de type, le type union, les properties, les modules, le générique réifié, les opérations, et de nombreuses évolutions sur la gestion des types d’une manière générale.
  • Il a son propre dépôt : Herd qui est le pendant de Maven central (avec une publication facilitée par rapport au dépot Maven)
  • Il s’intègre à JEE ou Vertx

 

Ceylon, le langage de programmation

Ce langage basé sur la JVM, peut-être vu comme une amélioration de Java, même s’il est bien plus que ça.

 

Le langage et sa syntaxe

Dans les amélioration du langage, on retrouve des concepts de Java, C#, aussi un peu de Scala :
– Les modules : cela permet un découpage au sein du projet, et également de déclarer les dépendances au sein du langage. On va retrouver cette notion en Java 9
– les properties : comme en C# inutile de déclarer getter et setter
– inférence de type : inutile de répéter le type de la variable lorsqu’on l’affecte dans une déclaration, une boucle for etc.
– les métadonnées : on peut faire référence à un attribut par une métadonnée (pour hibernate par exemple) sans avoir à générer une classe.
– les expression lambda
– operations : sur les map par exemple, on utilise map["clef"] au lieu de map.get("clef")

Voir des exemples de code ici :
http://try.ceylon-lang.org/

Exemple: les opérateurs définis simplement à l’aide d’une interface (ceux qui ont manipulé le BigDecimal comprendront l’intérêt)

 

class Product(String name, Float price) satisfies Comparable {
  shared actual String string = name;
  shared actual Comparison compare(Product other) => price <=> other.price;
  shared actual Boolean equals(Object other) {
    if (is Product other) { return price==other.price; }
      return false;
    }

  shared actual Integer hash => price.hash;
}

 

Environnement de développement

Eclipse dispose déjà de son plugin de développement Ceylon. Le plugin pour IntelliJ est en cours de réalisation.

En ligne de commande, on a une commande unique : « ceylon » avec des sous commandes, un peu dans l’esprit de git, ce qui permet d’avoir rapidement une liste exhaustive des sous commandes possibles.

$ceylon compile … compiler un programme Ceylon
$ceylon run … le lancer le programme Ceylon

 

Environnement d’exécution

On peut intégrer Ceylon en tant qu’exécutable standalone bien sûr, mais aussi :
– au sein d’un environnement JEE
– au sein de Vertx, le nouveau serveur asynchrone.

Etant donné qu’il se compile en bytecode, on peut parfaitement l’intégrer dans un environnement d’exécution Java ou Javascript, pas besoin de runtime Ceylon.

 

Le mot de la fin

Ce qui m’a vraiment impressionné dans ce langage, c’est son approche simple autour des « manques » de Java: les properties, les métadonnées.
Cette approche est intéressante et contrairement aux autres langages, il ne remet pas tout en question, comme ça peut être le cas avec Scala ou jython.

Ce qui me donne envoie d’essayer, c’est aussi la possibilité d’intégration en Javascript.

En terme d’intégration web, je vois cette technologie sur une approche de type Ceylon/Angular en remplacement de Java/Angular.

En conclusion, je trouve ce langage plein de promesses (une V1.3 à venir fin 2015) avec une intégration parfaite dans nos environnements Java/Web actuels,
avec en plus la possibilité d’utiliser le tout nouveau Vertx à l’aide du module Cayla : à essayer !

Categories: Divers, Java EE Tags: