texto:   A-   A+
eliax

Sobre el nuevo Google Dart, un reinicio en lenguajes para la Era Web
eliax id: 9004 josé elías en oct 12, 2011 a las 12:09 AM ( 00:09 horas)
Google DartHace par de días Google anunció su rumoreado lenguaje de programación del cual les había informado en eliax, y lo ha bautizado Dart (como "Dardo"), y he estado estudiándolo y hoy les doy mis primeras breves impresiones.

Noten antes de continuar que Dart está en una etapa muy temprana de su desarrollo. Google lo considera un "Technology Preview" (un avance sobre lo que será), y no una versión final, destacando explícitamente que muchas cosas podría cambiar de aquí a la primera versión oficial.

Lo primero a destacar de Dart es la razón de su existencia, las razones son potencialmente las siguientes:

1. Javascript, el lenguaje por defecto para programar aplicaciones web en navegadores está fuera de control. Inició como algo sencillo, pero se ha vuelto toda una bestia, y al no tener estructura promueve demasiado la producción de "código spagetti" en donde al programa le falta estructura y en donde todo se vuelve difícil de mantener, en particular en proyectos grandes (algo que he vivido en carne propia).

2. Con HTML5, es complicado y tedioso cambiar contextos con distintos lenguajes de programación y declarativos, siendo la norma el combinar en un solo código fuente a Javascript, HTML, CSS, y algún otro lenguaje de servidor (como puede ser PHP, JSP, ASP, etc). Esto es algo que los que programamos con frecuencia aplicaciones web nos enfrentamos constantemente.

3. Siguiendo el punto anterior, otro problema es que la aplicación web típica por lo general se divide en dos lenguajes de programación distintos. Uno para el cliente (Javascript) que se ejecuta localmente en el navegador, y otro para servidores (PHP, JSP, ASP, etc). En vez de uno poder programar todo en un solo lenguaje.

4. Lenguajes como Javascript y PHP no fueron diseñados para escalar masivamente de forma horizontal.

Dart promete resolver todo esto, con un lenguaje super sencillo y que resultará familiar para toda persona que tenga al menos un conocimiento básico de Java, C#, o similares.

Dart parece un cruce entre Java y Javascript, por un lado soportando las estructuras de Java (Classes, Interfaces), pero por otro permitiendo opcionalmente la declaración de variables sin tipos explícitos (de forma similar a Javascript, Visual Basic o ColdFusion).

Dart además fue pensado para escalar masivamente, de modo que aplicaciones creadas en Dart para ambientes de servidores podrían por ejemplo comportarse como las de Google en sus inmensas granjas de servidores, tomando ventaja de patrones de alta escalabilidad.

Por ejemplo, algo que noté curioso sobre Dart es que intencionalmente es single-threaded (es decir, soporta un solo hilo de ejecución), lo que a primera vista aparenta una gran restricción, pero al leer la especificación técnica se hace evidente que reemplazaron el concepto de multi-threading por el concepto de Isolates (popularizado por el lenguaje Erlang).

Isolates en esencia es bastante similar a programar Processes en C bajo ambientes UNIX. Es decir, es como hacer un fork (o bifurcación de código) de un nuevo programa, en esencia separando el Isolate de tu programa por completo.

Esto tiene como gran beneficio que ahora tanto tu programa como los que desprendas de él en forma de Isolates se pueden paralizar de forma sencilla y altamente escalable.

Obviamente es necesario poder uno comunicarse entre el programa principal y los Isolates desprendidos, y para eso se adoptó un sistema de mensajería por queue.

Según Google, estas facilidades de Dart permitirán crear desde pequeños programas por un solo desarrollador, hasta complejos mega-sistemas con grandes equipos de desarrolladores, programando desde aplicaciones móviles hasta aplicaciones en la nube para millones de usuarios, todas con un solo lenguaje y entorno de ejecución.

Por si no lo han notado, Dart entonces apunta no solo a ser un reemplazo de Javascript en navegadores web al largo plazo, sino que además un reemplazo de Java, .Net, Metro, Objective-C, PHP y todo otro lenguaje que se puedan imaginar.

Esa es una meta bastante ambiciosa, pero creo que dado que Dart es apoyado por Google (lo que significa que no tardaremos en ver entornos de ejecución nativos de Dart en Google Chrome y Android OS), y que Dart intrínsecamente es un lenguaje sencillo de rápido aprendizaje y con una sintaxis que resultará familiar a muchos, que tiene buenas posibilidades de tener éxito.

Y hablando de entornos de ejecución, Dart funciona de dos maneras: La primera y más obvia es en una máquina virtual Dart, similar a como ejecuta Java, lo que podemos llamar la forma "nativa" de ejecutar aplicaciones Dart.

La otra manera es con un convertidor que convierte programas Dart a Javascript, lo que permitiría a desarrolladores ir trabajando con Dart mientras migran de Javascript y esperan que los proveedores de navegadores web adopten el lenguaje.

Por el momento el convertidor funciona con versiones recientes de Chrome, Firefox y Safari (todavía no con Internet Explorer). Lo ideal obviamente sería que Mozilla, Apple y Microsoft implementaran la máquina virtual de Dart en sus navegadores, pero habrá que esperar a ver si estas instituciones y empresas no se sienten amenazadas por Dart y están dispuestas a adoptarlo.

Una buena noticia es que Google ha hecho a Dart 100% Open Source, con la esperanza sin duda de que Dart se convierta en un estándar por-defecto, y que quizás sea adoptado por competidores bajo la promesa que al igual que HTML5, la industria sería quien defina su futuro (aunque bajo la tutela de Google, muy posiblemente).

Personalmente, este es el primer lenguaje de programación que verdaderamente me emociona desde los días del inicio de Java, pues con su simpleza se presta mucho a uno ser muy productivo rápidamente.

En nota relacionada, les traigo lo que para muchos quizás sea una primicia relacionada a Dart: Todos los rumores apuntan a que Google está desarrollando también un IDE (un entorno de programación visual integrado) que se ejecutará como un servicio "en la nube" al cual internamente llaman "Brightly" ("Brillante").

La idea de Brightly sería una que he mencionado varias veces en muchas de mis charlas en vivo: El desarrollo de un IDE que funciona al 100% dentro de tu navegador Web, con todos tus archivos fuentes archivados en la nube, lo que significa que podrás trabajar desde cualquier lugar, a cualquier hora, en cualquier máquina que tenga un navegador web moderno, y quizás con un simple clic arrancar la aplicación en un ambiente de prueba o producción (como bien podría ser el Google App Engine).

Una nota final que quiero agregar es que no se apresuren a declarar la muerte prematura de Javascript. Javascript estará con nosotros por mucho tiempo más, en particular dada las millones de páginas web que dependen de ese lenguaje en la actualidad, y del hecho que Dart aun está en etapa de desarrollo, por lo que aun si se convierte en todo un éxito su impacto no se empezará a sentir por al menos 2 años más.

Sin embargo, si tienen un tiempo libre, no estaría mal que le dieran una repasadita a los documentos técnicos de Dart, e incluso que prueben crear un par de programas en el lenguaje, o hasta sugerir cambios a Google en esta etapa abierta para comentarios. Este bien podría ser parte del futuro de la web...

página oficial de Dart

especificación preliminar del lenguaje Dart (PDF)

anuncio oficial de Google sobre Dart

Actualización 24 de Octubre 2011: Encontré este excelente artículo con más detalles técnicos de Dart que recomiendo leer.

autor: josé elías

Comentarios

  • Esto sí que sería fenomenal, los que trabajamos en Web realmente sentimos una frustración muy grande al tratar de empatar todas las tecnologías sin terminar en un desorden, sobre todo con js.

    A leer la documentación : )

  • perdon por el comentario que no viene al caso, elias, pero, podrias decirme por favor que significan los ghz del procesador de una computadora?o sea, en qué afectan el desempeño. lo unico que se es que mientras mas tenga, mejor

  • Excelentes comentarios, gracias por procurarnos siempre información de este tipo, sin duda muy interesante las consecuencias que se generen a partir de Dart

  • Que bueno! Era de esperar que no faltaba mucho para algo así. Excelente, esperemos que sea algo cada vez más útil para los programadores.

  • Jose, aparte deque los navegadores web tienen que adaptarlo, los servidores donde hospedamos las pagina tambien tendrian que adoptarlo? Para remplazar a PHP?

    • Si el servidor está bajo tu control será bastante fácil ya que Google te proveerá una máquina virtual para Dart similar a la manera que instalas el VM de Java en cualquier máquina.

      Y si te refieres a aplicaciones "hosted" (alojadas), es muy posible que las empresas que proveen esos servicios de hosting adopten Dart, particularmente por el hecho que Dart en teoría es bastante eficiente en recursos y se podría ofertar como un servicio tipo nube.

      • Este fue el principal obstaculo a corto plazo que se me vino a la mente.

        Sin lugar a dudas si tiene un crecimiento en cuanto a comunidad, los hostings no van a demorar en implementar una vm para Dart, lamentablemente esto va a ocasionar (en un principio) que los hosting para aplicaciones Dart sean mas costos incluso que los servidores para aplicaciones Java.

        Leyendo los feedbacks de la gente me encontre con esta humorada que ya habia leido en otro momento, pero que me causo mucha gracia. http://xkcd.com/927/

  • Es cierto que se quiere hacer un esfuerzo para combatir la complejidad que se presenta en el desarrollo de un aplicativo web, y para esto se esta buscando de alguna forma estandarizar (si se puede llamar así, la verdad no se me ocurre otro término), todo bajo un mismo lenguaje.

    Pero, qué opinas por ejemplo de Node.js ? el entorno para desarrollar javascript del lado del servidor. Hasta el momento lo he probado y me ha parecido excelente.

    • Node.js es interesante, pero lleva la carga que es Javascript que no promueve código estructurado, cosa que en aplicaciones complejas de servidores es un grave problema, problema que se resuelve naturalmente con Dart.

      Además, Node.js es casi seguro que nunca tendrá el apoyo que Dart tendrá eventualmente.

      • Los problemas de javascript suelen ser su mayor potencial. El desarrollo bajo NodeJs es hoy por hoy una realidad.

        Existen actualmente aplicaciones realmente complejas funcionando bajo NodeJs y aventurar que Node no tendrá el apoyo que sí tendrá Dart más que un 'delirio fantástico' es una falacia. La comunidad de desarrollo que empuja a node es realmente amplia, crece a pasos agigantados y han desarrollado en 2 años lo que PHP no hizo en su historia. Basta darse una vuelta por github para corroborar esto.

        Y por cierto ... estamos hablando de desarrolladores, no de usuarios consumidores como gmail, google docs, picasa, etc. fácilmente de captar por una empresa multimillonaria.

        De todas formas me gusta el proyecto, pero no será fácil.

      • muy linda la reseña, la mejor que he leido de dart hasta ahora..pero horrible esta linea
        "Personalmente, este es el primer lenguaje de programación que verdaderamente me emociona desde los días del inicio de Java"

        no voy a emitir comentarios sobre esto porq no quiero caer en polemica, pero lo que si no me convence es que digas que node nunca tendrá el apoyo de dart, primero es osado hablar sobre un lenguaje que está en pañales y que puede tener exito o puede sucederle igual que Go, segundo...node ha sido practicamente una revolucion, aunque si solo trabajas en entornos java tal vez no la conozcas, actualmente javascript es el lenguaje mas usado dentro de github y que mas proyectos tiene, en gran medida por node.js, además tiene una cantidad de modulos y librerias que da miedo considerando que solo tiene poco mas de 2 años y ya grandes empresas como amazon lo estan utilizando

        otro detalle es que segun tengo entendido (no meto las manos en el fuego por esto) es que por el lado del cliente, el codigo dart compila a javascript (utilizando closures lo que ayuda un poco a "limpiar" el codigo), similar a clojurescript..es decir..que dart se va a basar en la popularidad de javascript pudiendo utilizar librerias propias de este lenguaje y usar el motor de javascript v8, es decir, NO es un plan a corto plazo como indicas, esperando a que los navegadores incorporen la maquina virtual de dart...algo que suena improbable e imposible (o será una futura prediccion de eliax?!)

        • angel,

          La idea de Dart compilar a Javascript es solo algo temporario. El objetivo es que se ejecute en una máquina virtual similar a como se ejecuta Javascript mismo o Java.

          En cuanto a opinar sobre algo en pañales, voy a dejar la modestia aparte y decir que a la fecha tengo un buen historial de apostar por tecnologías y tendencias que aun en pañales terminaron siendo muy exitosas, como lo fue Java, el iPhone, Android, HTML5, el mismo Javascript, Amazon, Palm (en sus días), Facebook, el Nintendo Wii, el iPad, etc, y más recientemente predije además el éxito del Kindle Fire.

          Hoy día mencionar esa lista es algo "obvio" (después del hecho), pero por lo general cuando predije sus éxitos ni siquiera eran cosas conocidas, y tal cual comentas, muchos se mostraron incrédulos...

          Démosle tiempo al tiempo como dicen.

      • mi linea favorita:
        Además, Node.js es casi seguro que nunca tendrá el apoyo que Dart tendrá eventualmente

        la verdad me saca una gran sonrisa cada vez que la leo, nodejs es la gran evolucion en internet, hoy por hoy existen mas proyectos en github de nodejs que de cualquier otro lenguaje, miles de modulos y todos orientados a la web en tiempo real...asi que el "es casi seguro que nunca tendrá el apoyo" demuestra que no estas muy informado sobre herramientas de la programacion actual, con todo el respeto

        vivi el crecimiento de java, el crecimiento de ruby y el crecimiento de nodejs y la verdad es que no se compara con nada, permite que cualquiera pueda crear aplicaciones escalables sin preocuparse en concurrencias o threads. Precisamente alli radica la potencia de nodejs, resolvieron un problema de la manera mas original e inimaginada posible: al ser asincrona y no bloqueante permite el mejor rendimiento en un single threath

        hoy por hoy se toma con mas cuidado lo que sale de google, despues del fiasco de go...ademas en su momento no existía una opcion consolidada, go no fue mas que un Scala con sintaxis de c# y sin la cantidad de herramientas que te da scala al estar basado en java

        Este lenguaje, a leguas, busca enamorar a los javistas de corazon que no estan muy al tanto de los avances tecnicos en la programación, por que?, primero porque tienen que pensar que javascript es un lenguaje mal diseñado (y no entender que los prototipos es algo muy diferente a las clases), tambien porque no saben que el codigo javascript se puede estructurar y ser tan mantenible que cualquier codigo java (y lo dice un exjavista) ya que no solo nodejs permite usar modulos (a la namespace en lenguajes como lisp) sino tambien porque existe backbonejs, ademas ecmascript 5 incluye clases

        otro problema es la concurrencia en lenguajes no funcionales, si conoces java sabrás que es un dolor de cabeza y es algo donde lenguajes funcionales como scala y mi favorito clojure relucen

  • Realmente es una bonita iniciativa de parte de google pero el punto que no me gusta de google es que le gusta reinventar la rueda y me explico. Por que no mejor darle a javascript el verdadero pontecial como lenguaje optimizandolo y conviertiendole un lenguaje verdaderamente oop y que se integre de manera transparente a todos los lenguajes de servidor. Yo creo que esa es la verdadera solucion y no crear otro lenguaje que por de mas costaria tiempo de aprendizaje y la adopcion por partes de sus competidores(apple,microsoft) dificilmente se haga realidad. Asi que entiendo que es mejor apostar por javascript y html 5, ya google saco un lenguaje llamado go que fue un fracaso por no comprar a sun microsystem en su momento y ahora estan pagando por ese grave error inventando nuevos lenguajes.

  • por que sera siempre veo como que google quiere definir sus propios estándares, como lo hacia microsoft hace un tiempo solo que ellos dicen es Open Source para que así todo el mundo no lo vea como lo que realmente es.

  • a DART, le vendria bien para su release final, un administrador de memoria cache como "memcached". El manejo de cola integrado a DART, sera unas de la opciones mas interesante en un lenguaje de programacion web como este.

  • Ruby on Rails FTW!!

  • La verdad es que está haciendo falta un lenguaje que permita integrar los procesos que se ejecutan en el browser (javascript, css, etc.) con los que se ejecutan en el servidor (php, jsp, etc.)

  • Reinventar la rueda? como dijo "serdna", lo que deberían hacer es realizar aportes al lenguaje ya existente (JavaScript).

    Dart no me entusiasma para nada... :-/ eso sería agregarle otro problema, otra curva de aprendizajes y paradigmas al desarrollo web.

    http://blogs.perl.org/users/rafael_garcia-suarez/2011/10/why-dart-is-not-the-language-of-the-future.html

    • Acabo de leer el artículo ese que enlazas y lo único que puedo decir es que las "razones" (si se le pueden llamar así) que esa persona ofrece son muy pero muy débiles.

      Incluso, van en contra de la filosofía de la simpleza (se nota que es un programador Perl como bien dice en el título de su blog).

      Pero como siempre he dicho, para el gusto los colores...

  • Yo hace poco comencé a utilizar CoffeeScript para todo lo que tenga que hacer en JavaScript.
    CoffeeScript es una máscara sobre JavaScript que le brinda de un montón de mejores al lenguaje, como por ejemplo la creación de clases al estilo clásico (en vez de prototype). Además gana la indentación con significado sintáctico como Python.

    Y genera código en JavaScript complétamente válido y optimizado, que pasa las pruebas de JSLint.

    Pueden ver más sobre CoffeeSCript acá: http://jashkenas.github.com/coffee-script/

    También en Ruby on Rails se acostumbra el uso de SASS y HAML que son reemplazos de este mismo tipo para CSS y HAML respectivamente, le agregan montones de funciones nuevas y una sintaxis lo más DRY posible ^^

  • Disculpen el poco conocimiento del tema, pero que no al ser este el estándar mundial de programación web, si es que llega a serlo,no serian mas fácil las intrusiones de hackers a aplicaciones o paginas y servidores de determinada empresa?

    • No tiene nada que ver. El lenguaje solo da una forma de comunicarse con el PC. Se puede hacer lo mismo en C, que en Javascript, que en perl, que en código máquina. Solo cambia la complejidad.

      Cuando más estándar sea un lenguaje, mas programadores experimentados habrán y menos fallos en los programas se cometerán dando como consecuencia menos errores por los cuales colarse.

  • Eliax y que paso con el lenguaje Google Go ?

  • Offtopic:
    ...Quizas por el impacto que fue para muchos la muerte de stev jobs, se a opacado un poco la muerte de otro de los grande en la industria de la informatica. Dennis Ritchie creador lenguaje de programacion C y unix.

    Ya no me gusta este mes :'(

    • :(

    • #include stdio.h // no salen los simbolos de menor mayor

      int main(){
      printf("Adios papa :'(\n");
      return 0;
      }

      man dennis

      Gran hombre,gran programador.
      Adios :( .

      • Y es bueno también notar que la sintaxis del mismo lenguaje Dart proviene de la de C, al igual que Java, Javascript, C# y otros tantos lenguajes más...

  • Eliax Dennis Ritchie tiene tanto meritos como steve jobs, se deberia dar merito a personas como él. Ya todo el merito que tiene una persona es el dinero, que pena que hayan personas pensando asi. Sin los aportes de Dennis Ritchie no existieran algunas cosas como Lenguaje C, Unix, MAC y cuidado las tantas tecnologia que se apoyan en estos aportes...

  • Probablemente nada que no tengamos desde hace tiempo con el lenguaje Groovy y el framework Grails.
    El problema es la difusión que tiene Google, que parece que lo inventa todo.

Añadir Comentario

tu nombre
tu email
(opcional)
web personal
(opcional)
en respuesta a...
comentario de caracteres máximo
2 + 2 = requerido (control anti-SPAM)
¿De qué color es el cielo?: requerido (control anti-SPAM)
 

"Interesante en extremo..!

Sería fascinante poder compartir tu consciencia de esa forma con otra persona..
"

por "Nestor Sanchez" en dic 22, 2010


en camino a la singularidad...

©2005-2024 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax