Ceylon 1.2

Pues al fin, después de un año de arduo trabajo, hoy liberamos Ceylon 1.2.0. Trae muchas, muchas cosas nuevas:

  • API para serialización
  • constructores
  • desestructuración para declaraciones
  • Expresiones inline: if, switch, let, object
  • Soporte para declaraciones nativas
  • Un IDE con varias mejoras
  • Soporte a Android en el IDE

Les explico algunas de estas:

Serialización

Dado que Ceylon compila a varias plataformas, el tema de serialización se complica. Hemos visto cómo Java incluyó una implementación de serialización en su JDK y resultó no ser muy eficiente, lo cual ha causado que aparecieran varias implementaciones alternas: protobuf, thrift, etc. Es por esto que decidimos diseñar una API para serialización, de la cual podrá haber varias implementaciones con distintos objetivos: que sea compacta, rápida, etc y funcione en una sola plataforma, o que sea multiplataforma (probablelmente a expensas de desempeño, etc).

Esto permitirá comunicación entre aplicaciones escritas en Ceylon aunque corran en distintas plataformas (JVM, JS, LLVM, etc).

Constructores

Originalmente, una clase tenía un solo constructor. Pero se ha visto la necesidad de que en vez de eso, una clase pueda tener varios constructores. No funcionan igual que en Java, hay algunas diferencias en cuanto a sus mecanismos internos, pero lo cierto es que permiten mayor flexibilidad en los casos en que se requieren. También hay constructores sin argumentos, que sirven para tener singletons dentro de una clase.

Por supuesto todavía se pueden definir clases con inicializador como antes, eso no se vio afectado.

  • Desestructuración
  • La desestructuración (destructuring) consiste en poder extraer datos de ciertos objetos y poder asignarlos a nuevos valores. Por ejemplo si se tiene una tupla, se pueden obtener sus elementos de manera individual en una sola declaración:

     

    Es similar a una forma muy simple de pattern matching.

    Expresiones inline

    Ahora   puede ser una expresión, al igual que  . Y ya tenemos la expresión  , muy útil para realizar cálculos intermedios. También hay expresiones  , lo que permite simplificar algo como esto:

     

    En algo un poco más simple:

     

    Expresiones con switch e if:

     

    Y finalmente, así es como funciona  :

     

    Declaraciones nativas

    Hay casos en los que la implementación de ciertos métodos cambia según la plataforma, porque en algunos casos se puede usar interop con código externo para una plataforma específica. En esos casos se pueden definir dependencias en el módulo que sólo aplican para cierta plataforma:

     

    Cuando se hagan imports de paquetes de ese módulo, el compilador valida que esas declaraciones únicamente sean utilizadas dentro de código marcado como nativo:

     

    Otra cosa nueva es que también nuestro IDE web ha mejorado bastante, ahora pueden guardar sus ejemplos en gists de github.

    En fin, muchas novedades, vale la pena que revisen aunque sea el IDE web, den una ojeada al tour en la página oficial ceylon-lang.org e incluso instalen el IDE, que es un plugin para Eclipse, para poder probar esta nueva versión de Ceylon.