Primeras impresiones sobre el lenguaje de programación Dart de Google

by , under Technical practices

FacebooktwitterlinkedinmailFacebooktwitterlinkedinmail
Esta semana me ha dado por aprender Dart, el lenguaje de Google. Era algo que tenía en el tintero, puesto que soy fan de Google Web Toolkit (GWT) desde que apareció. Así que sí: soy de los que están convencidos de que Javascript a pelo no lleva a ningún sitio. Posiblemente si programas solo, haces TDD con una cobertura del 100% y eres mas disciplinado que un monje tibetano puedes programar en Javascript y aprovecharte de sus peculiaridades únicas. Pero para el resto de los mortales, y especialmente para entornos empresariales, en los que los equipos de desarrollo no están formados por semidioses precisamente, usar Javascript para cosas más grandes que una página HTML es jugar a la ruleta rusa.

Los de Google tampoco han sido nunca amigos del Javascript a pelo y por eso hicieron GWT y ahora Dart. Dart es la evolución lógica de GWT y resuelve sus problemas. Así mismo, es la apuesta de futuro de Google para cuando la plataforma Java decaiga (cuando digo “decaiga” digo “que empiece a ser reemplazada en favor de otras plataformas”, al estilo de cuando la gente dice “COBOL está muerto”; frase que llevo oyendo a algunos desde hace veinte años mientras otros siguen programando en COBOL día tras día 🙂 ).

En este artículo voy a contar mis primeras impresiones sobre Dart. En sucesivos profundizaré en las peculiaridades del lenguaje y en las herramientas de que ya dispone.

 

El lenguaje

Mi acercamiento a Dart fue sin mucha emoción. Lo probé porque estaba ahí y porque parte del equipo de GWT se pasó a Dart hace poco. Pensé que sería un lenguaje más, ni más divertido ni más aburrido que otros. Que diferente fue mi percepción final después de echarle un vistazo. No es un lenguaje más, es la evolución/unificación de la Babel de lenguajes que tenemos que dominar ahora mismo para hacer desarrollo web. Vaya por delante que yo vengo de Java y mi percepción de Dart seguramente sea diferente de la de alguien que venga de Javascript o Ruby, por ejemplo. Sin embargo, Dart parece tener todas aquellas cosas que en el día a día en Java echas en falta (ejemplo: closures, parámetros opcionales, parámetros por defecto, generics sin erasure, …). Por otro lado todo resulta muy familiar: las librerías son similares, las ideas son similares, y no cuesta nada adaptarse ni al lenguaje ni a las APIs.

Como yo no sólo uso Java sino también Javascript, me puedo hacer una idea de como se sentiría alguien que llega a Dart desde Javascript. Y creo que tampoco le parecería mal. El lenguaje es un poquito más estructurado y quizás pierdas algunas ventajas de Javascript, pero la transición es sumamente natural también. Creo que la curva de aprendizaje sería igualmente pequeña. En otras palabras, a menos que seas un talibán 😉 del javascript de esos que dicen que la orientación a objetos basada en clases está obsoleta, te gustará.

En resumidas cuentas, el lenguaje es como el punto medio entre un lenguaje de tipado estático y otro dinámico. De hecho el tipado en Dart es opcional, lo que quiere decir que sólo afecta durante la fase de desarrollo, y en ejecución no hay tipos. ¿Cómo se come esto? Pues muy sencillo: el IDE y el compilador usan los tipos para documentar el código, chequearlo estáticamente, y refactorizarlo, mientras que la máquina virtual ignora los tipos. Tenemos la flexibilidad de un sistema dinámico en ejecución y las ventajas de tener tipos en desarrollo.

El entorno de desarrollo

Cuando descargamos el SDK de Dart tenemos a nuestra disposición todas las herramientas para desarrollar. Estas son: un IDE, el compilador, el runtime y un navegador Chromium tuneado para ejecutar la maquina virtual de Dart. Y con eso basta, en principio. Es realmente sencillo ponerse a programar en DART porque con una sola descarga ya tienes todo lo que necesitas. Vamos, que no tienes que pasarte un día entero descargando software, instalando y encajando piezas.

El IDE de momento es sencillo: un Eclipse modificado y minimalista que, no obstante, tiene lo imprescindible para poder desarrollar. No es una navaja suiza, pero no se echa de menos funcionalidad básica. El Dart Editor es a los IDEs lo que Chrome a los navegadores: lo más discreto posible pero permitiéndote hacer tu trabajo. Supongo que han basado el IDE en Eclipse por dos razones: empezar rápido, y poder evolucionar la funcionalidad lo más rápido posible y con ayuda de la comunidad.

Las APIs del runtime

El runtime de Dart es previsible. Las APIs recuerdan a las de Java o Javascript. El DOM del navegador es como el de Javascript. Las colecciones y clases de utilidad son como las de Java. Y en general trae lo básico imprescindible para programar en web: el core del lenguaje, colecciones, criptografía, HTML, entrada/salida, JSON, SVG, encodings, Web audio y Web SQL.

Una peculiaridad del lenguaje es que casi todas las APIs son asíncronas, al estilo de Javascript. Esto para alguien que solo haya desarrollado en Java puede ser causa de algún quebradero de cabeza, porque el paradigma de programación cambia y, al principio, es bastante más incomodo.

Las librerías y frameworks

A pesar de ser un lenguaje inmaduro, ya hay todo un catálogo de librerías listas para usar. Entre las mas relevantes están las de test unitarios y mocks, que -casi- son parte del core del lenguaje. Pero también hay un embrión de framework para desarrollar las interfaces de usuario en HTML. E incluso frameworks para la parte del servidor. Normalmente todos están inspirados en librerías ya existentes, así que son sencillos de adoptar. Por haber, ya hay disponibles hasta drivers para bases de datos (como mínimo, que yo haya buscado, para MongoDB y PostgreSQL).

El lenguaje nace, además, con un repositorio de referencia y su herramienta de manejo llamada “pub”, que funciona de forma similar a las “gemas” de Ruby. La URL del repositorio es http://pub.dartlang.org y cuenta con documentación de cada librería, generada mediante al equivalente de javadoc en Dart.

Además, es posible albergar cualquier paquete de Dart en un repositorio Git (en lugar de en pub.dartlang.org) y la herramienta pub también se lo baja. Como es de esperar, eso hace que haya varias librerías de Dart publicadas en GitHub.

La comunidad

En contra de lo que pensé en un principio, parece que Dart ha despertado bastante interés. La comunidad es muy activa y la lista de discusión de Dart genera unos 70 correos al día. En este momento se discute bastante acerca de la estructura del lenguaje y, como estamos en fases tempranas, se puede influir en la dirección que tome el lenguaje. Según dicen ellos mismos, los ingenieros de Google están abiertos a todo tipo de ideas y feedback de los usuarios.

La filosofía de Google

En mi opinión la filosofía de Google es clara: hacer un lenguaje sin grandes sorpresas pero suficientemente potente como para que la gente se sienta inclinado a usarlo. Una de las premisas fundamentales es que pueda compilarse a Javascript de forma eficiente y, en general, no se permite hacer nada que pueda derivar en ineficiencias (por ejemplo: inicialización estática de clases). Los ingenieros del equipo de desarrollo son expertos en compiladores y maquinas virtuales y tienen suficiente experiencia adquirida con otros productos de Google como para hacer un lenguaje altamente eficiente y adaptado al desarrollo actual.

Respecto a la planificación del desarrollo, el equipo no se moja dando fechas, aunque el progreso es continuo. Lo que si queda claro es que entre sus prioridades está la del lenguaje por encima de las librerías. Según los ingenieros de Google, ellos prefieren dedicarse a aquello en lo que son expertos (la compilación y la maquina virtual) mientras que la comunidad se dedica a idear como usar el lenguaje. No dicen que no vayan a marcar pautas de desarrollo, pero prefieren que emerjan de la comunidad que dedicarse a dictarlas ellos solos. En otras palabras: tiene pinta de que vamos a seguir teniendo un ecosistema de librerías parecido al de Java (sí, ese en el que das una patada a una piedra y aparece un framework), con sus ventajas y sus inconvenientes.

Por último, supongo que la apuesta de Google es que en el medio/largo plazo la plataforma Java vaya decayendo en favor de otras alternativas más adaptadas al ecosistema de dispositivos actuales. Para ese momento Dart debería ser una alternativa viable y madura como para ser usada de forma general. De confirmarse este punto, Dart sería la plataforma ideal para los que vienen del mundo Java y/o Javascript.

Conclusión

Dart puede ser un lenguaje más atractivo de lo que pueda parecer en un principio. Es perfecto para los que estamos cansados de la Babel del desarrollo web y nos permite usar un único lenguaje “para dominarlos a todos”: el cliente y el servidor. La licencia, además, es BSD por lo que no debería causar reticencias a pesar de estar patrocinado por Google. Como mínimo merece la pena seguirle la pista aunque seamos más fan de otros lenguajes.

Y bueno, sobre su aplicación, pues está clara: sirve para hacer aplicaciones web del estilo de las que hace Google, así como herramientas de consola. Lo que no se ve (y no sé si veremos) es un API para desarrollo de interfaces de usuario en escritorio. No es una sorpresa, pero no está de más comentarlo.

Queda la duda de si algún día se programará Android mayoritariamente en Dart o no. Se admiten apuestas…

  1. rodrigo

    todo lo bueno de dart que mensionas ya existe en apache flex hace años.. incluso con mas capasidades.pero como usa flash por ahora para muchos no es una opcion

    Reply

Leave a Reply