Si bien la pregunta era "¿Son los propósitos de los idiomas los mismos?", La pregunta real es: "¿Cómo podemos mejorar la programación web desde donde estamos?" .
Ambos proyectos intentan hacer esto considerando
lenguaje de programación (TypeScript hace un paso pequeño pero muy limpio, Dart hace el movimiento más revolucionario que todavía se está moviendo)
interoperabilidad con el código js existente (transición 0 en TypeScript que compila a js, complicado en Dart, ya que 2 máquinas virtuales se comunican entre sí)
prácticas de ingeniería de software (solo Dart, componentes web y shadow dom)
En los últimos 3 días me sumergí profundamente en Dart y luego en TypeScript. Mi base de código CoffeeScript fue a las líneas de código de la década de 2000, demasiado para ser manejada con CoffeeScript encantador pero demasiado esponjoso. El problema que enfrenté fue que CoffeeScript carece de características que los lenguajes diseñados para la programación de mediana a gran escala tienen: interfaces, módulos, seguridad de tipo. Pero había una incluso mucho problema más grave con el café y JS: Los js "este puntero" rareza afectado mi cordura y CoffeeScript no ayuda nada aquí.
Así que aquí mis resultados después de 3 días de evaluación y uso:
Dardo
Revisé a fondo el tutorial, leí 1 libro, hojeé el segundo libro y probé las demos. Yo pensé, dardo que es el futuro . Luego intenté migrar mi aplicación a Dart. Fue allí donde mi entusiasmo bajó de 100 a 10. Aquí está la razón:
El Editor de Dart es la única forma de programar Dart. Si bien existen complementos para Sublime Text, no proporcionan características como intellisense, finalización de código (corríjame si me equivoco). Sin embargo, el Dart Editor está en calidad pre alfa. Si bien admite cosas mágicas súper frías, como actualizar la página web cuando edita el archivo CSS (! Realmente genial), se cuelga o se bloquea varias veces por minuto. Entonces escribe 5 letras y 2 veces tiene que esperar 2 segundos o 15 segundos entre escribir. Y tenía un proyecto con algunas líneas de código, por lo que no quería esperar lo que sucede cuando hay líneas de 1000. Moví un archivo de una carpeta a otra dentro del Editor de Dart, se bloqueó. Depuracióncon Dart Editor es a primera vista mejor que todas las herramientas de depuración de js que conozco (Chrome es mi elección), pero todavía faltan muchas cosas: sin ventana inmediata (esto hace que la depuración de js sea mucho mejor en este momento), sin relojes.
Política y posibilidades de escape : algunos dicen que Apple, MS y Firefox nunca proporcionarán máquinas virtuales Dart. Bueno, no estoy tan seguro, pero al menos para Apple esto parece muy seguro en este momento. Para los demás es más probable que lo contrario. Así que no hay problema, podemos convertir Dart a JavaScript. La forma en que funciona esta integración es realmente excelente, Dart mantiene un stub js que mantiene el código js conectado al Dart Editor, por lo print()
que todavía aparece una declaración en Dart Editor, genial. Pero aquí viene el pero: la huella de dicho código convertido es alta. 150kB más o menos (antes de la minificación). No excavé demasiado en el tamaño exacto, así que no me apuntes en esto.
Madurez del lenguaje . Además de los problemas demasiado serios con Dart Editor apareciendo en mi cara 3 veces por minuto, también encontré inaceptable que cada fuente sobre el código Dart que encuentre use un Dart diferente. El idioma cambia todos los días. ¿Encontraste una publicación de hace 5 semanas? Está desactualizado. ¿Pruebas las muestras del tutorial de Google? Al menos 1 muestra no se compila desde que cambió una API. Incluso cosas mundanas, como adjuntar un evento a un elemento DOM, están en buen movimiento .
La integración con las bibliotecas js existentes es un poco complicada. 2 VM necesitan comunicarse aquí, es complicado.
Como conclusión, no puedes usar Dart en serio a partir de hoy, y sumergirte en él no es demasiado divertido debido a 1 y 3. Ambos puntos desaparecerán con el tiempo. Sobre el punto 2, Google publicó puntos de referencia de rendimiento hace unos días demostrando que su js compilado es mejor que js escrito a mano. Mis cumplidos, buen trabajo. El tiempo de carga aún podría estar retrasado debido al problema de la huella como se dijo. Sin embargo, si el código de la huella se usa en muchos sitios, puede estar disponible en caché y listo, también desaparece.
Entonces: considero que Dart es un gran proyecto, usarlo en este momento conlleva una buena parte del riesgo imprevisible y tomará este año llevarlo a un buen nivel estable.
Mecanografiado
Evaluar TypeScript es muy fácil, lleva 1 o 2 horas y lo sabes todo. Leyendo el documento de especificaciones del lenguaje y un libro corto (TypeScript revelado) revelado, lo sabía todo y comencé a programar. Luego me sorprendió descubrir que las adiciones de TypeScript a JavaScript solo satisfacen todas las necesidades serias que tenía para mejorar la programación de mi cliente . Aquí lo más destacado:
Interfaces . La encapsulación y las interfaces me permiten estructurar mi código fácilmente. ¡Perfecto!
Estado de clase. . TypeScript permite expresar el estado que las instancias de una clase llevan explícitamente, o mejor lo hace cumplir. Este es un gran paso mejor en comparación con js o café.
this
llamada mitigación mitigada . Dentro de las funciones de flecha, TypeScript hace que el this
puntero sea como cualquier ciudadano de comportamiento normal.
Editor, Intellisense . TypeScript viene con un 100% de inteligencia superior perfecta que reacciona en el rango de micro o milisegundos como se usa desde Visual Studio cuando se programa C #. También existen encabezados TypeScript para todas las bibliotecas js importantes . Genial genial genial.
Experiencia y riesgo . El uso de TypeScript conlleva un riesgo cero, el lenguaje está claramente definido, perfectamente estable, es solo js con azúcar, nada imprevisible.
En realidad, estas mejoras me dan todo lo que necesitaba. Lo único que me gustaría ver en el futuro son las colecciones genéricas. Pero eso es maní.
Entonces, ¿qué pasa con el rendimiento? Si bien me considero un fanático del rendimiento, no creo que haya ningún proyecto que haga la elección de tecnología aquí en función del rendimiento. Ambos están en la liga js.
Si está interesado en el futuro de la programación web, ambos son grandes esfuerzos, TypeScript es mucho más pragmático y utilizable ahora, Dart es un proyecto de laboratorio muy interesante que será utilizable una vez que los editores y depuradores maduros estén disponibles y el alcance de los proyectos sea factible con Dependerá de la política.
En cualquier caso, los 3 días evaluados fueron en su mayoría divertidos y aprendí mucho, si encuentra el tiempo, Dart demora 1 día para TypeScript y 2 horas para dar su propia opinión. Intentalo.
Actualización de octubre de 2014
Ha pasado un tiempo y, a posteriori, parece que la suposición de que TypeScript es la ruta segura y estable era bastante correcta. Acabo de encontrar una declaración (muy) destacada sobre Typecript, Dart y Closure:
He estado interesado en el desafío de la programación web en general durante bastante tiempo. Creo que Google Closure sigue siendo la mejor opción para el desarrollo a gran escala de JavaScript / Web, pero que finalmente será reemplazado por algo que sea menos detallado. Aunque Dart muestra una promesa considerable, todavía estoy consternado por el tamaño del JavaScript que genera. En comparación, si TypeScript se puede traducir directamente a JavaScript que se puede compilar utilizando el modo avanzado del compilador de cierre, entonces podemos tener todos los beneficios de JavaScript optimizado de Closure sin la verbosidad. Además, dado que TypeScript es un superconjunto de JavaScript, creo que sus extensiones de sintaxis tienen la posibilidad de convertirse en el estándar ECMAScript en algún momento,
http://blog.bolinfest.com/2013/01/generating-google-closure-javascript.html
Michael Bolin es un héroe de front end de google (ex) google (ex) desde hace mucho tiempo, también está involucrado en el cierre de google (obtenga su libro sobre Closure).
Google Traceur
La aplicación de Google para vivir ECMA Script 6 hoy es su proyecto Traceur:
https://github.com/google/traceur-compiler
En comparación con Typecript, el soporte de herramientas está presumiblemente muy por detrás de hoy. Por el lado positivo, sin embargo, es mucho más rápido adoptar adopciones de lenguaje js futuras demasiado geniales como iteradores o comprensiones.
Flujo de Facebook, Google AtScript
Proporcionar características similares a TypeScript.
"Uno puede preguntarse qué pasa con estas diferentes soluciones de verificación de tipos de JavaScript y qué hacer al respecto. Una buena noticia es que Microsoft, Facebook y Google están colaborando en esto, según Jonathan Turner de Microsoft:
El equipo de TypeScript está trabajando con los equipos de Flow y AtScript para ayudar a garantizar que los recursos que ya han sido creados por la comunidad de mecanografía de JavaScript se puedan utilizar en estas herramientas. Hay mucho que estos proyectos pueden aprender unos de otros, y esperamos trabajar juntos en el futuro y crear las mejores herramientas que podamos para la comunidad de JavaScript. A largo plazo, también trabajaremos para incorporar las mejores características de estas herramientas en ECMAScript, el estándar detrás de JavaScript. "
Artículo de infoq sobre flujo de fb