Ceylon

El lenguaje de programación creado por Gavin King para aplicaciones empresariales

El balance entre el uso de métodos como operadores.

Estaba escribiendo una respuesta al post de ezamudio Operadores en Ceylon pero como siempre me extendí más de la cuenta y mejor cree esta entrada separada.

El tema es la sobre carga de operadores en Ceylon.

Es interesante tratar de alcanzar el balance entre el uso de operadores y métodos en un lenguaje de programación.

Por un lado, si se permite que cualquier método se pueda utilizar como operador, se puede terminar creando código que solamente el autor del programa o la biblioteca entienda y eso cuando aún lo tiene fresco en la mente. Me parece que este es una de las críticas más fuertes hacía C++ y a Scala ( aunque Scala además permite una sintaxis diferente para la invocación de métodos que es sin usar punto )

Por otro lado si se prohibe del todo se tiene un lenguaje que es sumamente claro y fácil de entender por cualquiera pero que resulta tedioso porque el programador tiene que escribir toooodo el nombre del método y no simplemente un operador ( Java , Javascript y Go por ejemplo )

Operadores en Ceylon

El capítulo 6 de la especificación de Ceylon trata de los operadores. Recientemente he estado implementando algunos de estos para el compilador de Ceylon a Javascript y me doy cuenta de que realmente son bastante convenientes, y pues quiero compartir algunas de sus peculiaridades, ya que algunos caben dentro de lo que muchos llaman "azúcar sintáctica".

Los más básicos no son nada extraños; por ejemplo para obtener un miembro de un objeto, simplemente es objeto.miembro; una invocación (a función o método) es con paréntesis, si van a usar argumentos posicionales: f() o f(a,b,c); pero si van a usar argumentos con nombre (cosa que se puede hacer cuando la definición de la función o método tiene argumentos con valores por default y simplemente se los quieren saltar), entonces usan llaves: f{a=1;b="2";}.

La asignación a variables (ojo: variables, no valores inmutables) es como en Pascal, con := pero hay un par de variantes interesantes: en vez de hacer var:=var.f, pueden abreviarlo como var.=f. Y en vez de hacer var:=var.f(x), pueden escribir var.=f(x).

Problemas al usar Ceylon IDE ... no ceylon runnable element

Creo y nombro el proyecto Ceylon

Crear el archivo: Hola.ceylon

Surge un problema.

Aqui sale el mensaje de error al tratar de compilar/ejecutar el programa

Ceylon: Introducción rápida

Una forma de contribuir con Ceylon, o con cualquier otro proyecto de open source, es escribir en la lengua de Cervantes (modificada por Bárbaro), mucho de lo que ya está escrito en el sitio de Ceylon en la lengua de Shakespeare ( modificada por Gavin). Mi intención es traducirlo todo al español y confío en Manzanero con su semana de más de 7 días.
Por lo pronto lo que sigue es una traducción libre de Quick Introduction

Introducción rápida

Es imposible captar la esencia de un lenguaje de programación observando solamente la lista de características. Lo que realmente hace al lenguaje es la combinación de esa pequeñas cosas trabajando juntas. Y resulta que es imposible apreciar esa sinergia sin escribir código. En esta sección vamos a mostrar de manera rápida lo suficiente de Ceylon para lograr un interés suficiente que te conduzca a probar el lenguaje. Lo que sigue por supuesto que no es una lista completa de las características del lenguaje.

Una sintaxis legible y familiar

Hola Ceylon, adiós NullPointerException

Todo programador que haya hecho aunque sea la más pequeña aplicación en Java, se ha topado en algún momento con la odiosa NullPointerException. Una excepción que sólo ocurre en tiempo de ejecución, cuando resulta que nuestro código invoca un método o quiere obtener un miembro de un objeto que realmente apunta a null. Y puede ocurrir por cosas tan simples como esto:

String x = "hola";
//algunas líneas más abajo...
if (cualquierCosa) { hola = null; }
//y otras líneas más abajo
int largo = x.length();

El código compila perfectamente. Es más, esto es código que compila sin darnos ningún error, ni advertencia, ni nada:

String x = null;
x.length();

Y uno se pone a pensar... es tan difícil que el compilador se diera cuenta que tengo una variable que apunta a null, y en la siguiente línea estoy invocando un método sobre ese null??????; pero pues así funciona Java. Y si lo anterior es posible, por supuesto puede ocurrir dentro de cualquiera de nuestros métodos que esperan recibir un objeto.

Unpublished
n/d

Tipos en Ceylon: Un sistema de tipos con sentido

Para mi primer post acerca de Ceylon, quiero hablar un poco acerca del sistema de tipos. Una de las metas de Ceylon es la legibilidad del código; otra es tener un sistema de tipos que sea sencillo pero a la vez poderoso (Ceylon es un lenguaje de tipado estático). A continuación pretendo demostrar cómo estos dos objetivos se unen, dando como resultado código más legible, con un ejemplo sencillo: una lista heterogénea (es decir, que contiene elementos de distintos tipos). Veamos el ejemplo en un par de lenguajes de tipado estático, incluso en algunos de tipado dinámico. Primero obviamente en Java:

List<Object> list = Arrays.asList(new Object[]{ 0, "uno", 2, "tres", 4, "cinco" });
for (Object elem : list) {
  if (elem instanceof String) {
    //Para hacer algo con el string requerimos un cast
    String minusc = ((String)elem).toLowerCase();
    System.out.println(minusc);
  } else if (elem instanceof Number) {
    //Igual aqui
    int doble = 2 * ((Number)elem).intValue();
    System.out.println(doble);
  }
}

Primeras impresiones de Ceylon

Como bien saben, hace un par de días contamos con la presencia de Gavin King en las Opentalks, hablando de Ceylon, un nuevo lenguaje de programación que en el que ya lleva cerca de 3 años trabajando. Es un proyecto prioritario dentro de RedHat, pues la intención es tener un nuevo lenguaje de nivel enterprise que sustituya a Java.

Esto no es una reseña del evento; quiero enfocarme a hablar del lenguaje Ceylon, algunas de mis impresiones en este primer contacto que tuve (porque la verdad, no había tenido tiempo de meterme a fondo, más allá de ver aquellos slides que se habían filtrado hace unos meses de una conferencia en China o no sé dónde). He estado pensando acerca de si es mejor hacer una comparativa con otros lenguajes o simplemente hablar de las características de Ceylon sin hablar de ningún otro lenguaje, más que acaso Java, ya que finalmente será un lenguaje que funciona sobre la JVM. Y pues creo que habrá momentos para hacer comparaciones y otros donde es mejor sólo hablar de Ceylon.

Razón de ser

Ceylon surge por razones muy similares a las que han salido otros lenguajes para JVM: Java está evolucionando muy lentamente, se ha vuelto más complicado cada vez, hay que escribir demasiado código para realizar tareas simples, etc. Pero a diferencia de otros lenguajes, la intención de Ceylon es tener adopción a nivel enterprise; es un lenguaje pensado para hacer sistemas grandes con equipos de desarrollo grandes (varios integrantes trabajando sobre una misma base de código, etc). Una consideración importante en el diseño de Ceylon es la legibilidad, tomando en cuenta que en desarrollos grandes, un programador generalmente pasa más tiempo leyendo código ajeno (y propio) que escribiendo código. Por eso es que la legibilidad es una característica muy importante.

Distribuir contenido