Dart: ¿Programación web mas estructurada?

En Octubre de 2011 Google anunciaba un nuevo lenguaje de programación orientado a web para sustituir a Javascript (aunque no lo dijeron explícitamente) que pretende ofrecer

- un entorno más estructurado y flexible
- familiaridad a los programadores con experiencia
- un alto rendimiento en todo tipo de plataformas, desde dispositivos móviles a servidores
Dicho lenguaje se denomina Dart y puede ejecutarse de dos maneras: en modo nativo en su propia máquina virtual o sobre una máquina Javascript usando un compilador para traducir el código. En la página principal del proyecto podemos descargar todas las herramientas necesarias para trabajar con él: desde el editor hasta un navegador tipo Chrome con la VM ya incluida (Dartium). La sintaxis del lenguaje es de tipo C orientado a objetos así que la curva de aprendizaje para cualquier programador C o Java debería ser rápida, aunque no parece que se oiga hablar mucho de él en las nuevas versiones de los navegadores.

Algunos contras que he leído son:
  • Según la especificación: Los programas Dart pueden ser checkeados estáticamente y puede que el resultado advierta de alguna violación de las reglas de tipos. Aún así tales violaciones no impiden la compilación del programa ni su ejecución. Es decir, podemos escribir un programa Dart con declaraciones erróneas de tipo  (incluso inexistentes) y el programa funcionará igual, lo que significa que el compilador no puede realizar optimizaciones basadas en los tipos. Además esta especificación se contradice con el hecho de usar interfaces para emular la herencia múltiple, que sólo tienen sentido en lenguajes fuertemente tipeados.
  • Sólo admite un valor booleano para cierto: true. Cualquier otro es false. Si codificamos if (1) { ... } el procedimiento entre llaves nunca se ejecutará (deberemos escribir (1 == 1)). Por otro lado los operadores ===, != y !== devuelven todos un booleano, pero no hace lo mismo el operador == porque puede ser sobrecargado y, volviendo al punto anterior, no hay comprobación de tipo.
  • No hay conversión de tipo implícita entre número, cadenas y booleanos. La distinción entre cadenas y números permite sobrecargar el operador + para concatenaciones pero, al no existir comprobación de tipo, podemos codificar "2" + 2 o 2 + "2" y ambos casos son tratados como concatenación pero el segundo genera un aviso del compilador.
  • Excesiva proliferación de clases para control de excepciones.
  • El código Dart corre siempre en un único thread. No existe concurrencia de estados compartidos en Dart. La concurrencia se soporta mediante unidades denominadas isolates. Esto implica la dificultad de gestionar dichos isolates y la carga extra de memoria que requieren dado que deben clonarse las estructuras de datos del hilo principal. Además gestionar la UI de un navegador, altamente interactivo, puede ser dificil.
Aún así pienso que puede ser una buena idea darle una oportunidad, al menos para probar que tal se recompila en Javascript. El tipeado debil mencionado en los contras puede ser debido precisamente al intento de generar código JS rápido. Si es así y además podemos programar para la web en un entorno más estructurado opino que salimos ganando.

No hay comentarios:

Publicar un comentario