Anunciando Dart 2 Stable y la Plataforma Web de Dart

Marca el renacimiento de Dart como un lenguaje de programación mainstream para desarrollo móvil y web

Hoy anunciamos la disponibilidad inmediata del release estable de Dart 2, incluyendo una reescritura de la plataforma web de Dart que ofrece una combinación única de productividad, rendimiento y escalabilidad.

El logo de Dart.

Los desarrolladores de Flutter ya están disfrutando muchos de los beneficios de Dart 2, ya que Flutter ha estado incluyendo versiones preliminares del Dart 2 SDK desde hace varios meses. Sin embargo, el release estable de Dart 2 es otro hito importante hacia el release estable de Flutter, debido a la estrecha relación entre el framework y el lenguaje. Si aún no has instalado Flutter, empieza aquí.

Con el release de Dart 2, los desarrolladores web ahora pueden aprovechar el mismo lenguaje, bibliotecas y herramientas junto con una serie de mejoras específicas para web. Los desarrolladores web deberían empezar en la página Get Started para instrucciones sobre cómo instalar las herramientas y construir una primera aplicación.

Dart: Creciente entusiasmo

#

Dart 2 marca el renacimiento de Dart como un lenguaje de programación convencional enfocado en habilitar un desarrollo rápido y excelentes experiencias de usuario para aplicaciones móviles y web. Queremos que los desarrolladores que crean aplicaciones de cliente sean productivos, con un lenguaje, framework y componentes que reduzcan el código repetitivo y les permitan concentrarse en la lógica de negocio, junto con herramientas que identifiquen errores temprano, habiliten depuración potente y entreguen código de tiempo de ejecución pequeño y rápido.

En el último año, Dart ha visto un crecimiento dramático. Nuestros propios análisis sugieren un crecimiento de diez veces en el uso externo. En el último trimestre, Dart fue uno de los lenguajes de más rápido crecimiento en GitHub, medido por pull requests; el crecimiento de preguntas en StackOverflow también proporciona una demostración vívida del impulso de Dart:

Gráfico de preguntas relacionadas con Dart en Stack Overflow a lo largo del tiempo.

Internamente, Dart es uno de los pocos lenguajes que Google usa para el desarrollo de aplicaciones web, con millones de líneas de código de docenas de proyectos diferentes incluyendo Google Ads, Google Shopping y nuestros propios equipos de infraestructura interna.

De hecho, es posible que ya estés usando Dart sin darte cuenta: el popular preprocesador de hojas de estilo Sass fue recientemente reescrito en Dart para hacerlo más rápido, más portátil y más fácil de escribir. Sass ahora se distribuye como un ejecutable independiente en Homebrew y Chocolatey, y compilado a JavaScript puro en npm. Dart hace fácil instalar aplicaciones en cualquier lugar sin dependencias externas, y encajar en los flujos de trabajo tanto de personas que usan Dart como de las que no.

Dart destaca un lenguaje optimizado para cliente, frameworks ricos y herramientas flexibles para construir experiencias nativas a través de pantallas.

Dart 2 se centra en tres áreas: fortalecer y ajustar el lenguaje, desarrollar nuestro soporte para frameworks web y móviles, y llevar algunas de las herramientas y componentes que soportan el uso de Dart en Google al mundo exterior. El resto de esta publicación explorará estos temas.

Dart 2: Un lenguaje optimizado para cliente

#

Como destacamos en febrero, el sistema de tipos de Dart es sólido. Esto significa que una gran clase de problemas se encuentra antes de que tus usuarios ejecuten tu aplicación — durante el análisis y la compilación. A medida que escalamos Dart a apps extremadamente grandes dentro de Google, el sistema de tipos detectó más errores temprano en el ciclo de desarrollo, llevando a código de producción de mayor calidad.

Con Dart 2, no puedes llegar a un estado donde una expresión evalúe a un valor que no coincida con el tipo estático de la expresión. Esto significa que puedes escalar tu base de código a millones de líneas, abordar grandes proyectos de refactoring y desplegar tu código con confianza.

No te preocupes: la solidez no significa montañas de código repetitivo. El sistema de tipos incluye inferencia avanzada — incluso para argumentos de tipo genérico.

final _field = [3.14, 6.28];

void main() {
  // No type parameter is provided, but <int> is inferred
  print([1, 2, 3].runtimeType); // List<int>

  // If types are unmatched, their common base type is used
  // int (1) and double (3.14) are both `num`
  print([1, 3.14].runtimeType); // List<num>

  // Inference goes beyond variables.
  // You can omit types on fields, too.
  print(_field.runtimeType); // List<double>
}

Para aprender más sobre el sistema de tipos de Dart 2, consulta esta página.

Como se mencionó en publicaciones anteriores del blog, Dart 2 también reduce la ceremonia del lenguaje en algunas áreas clave: por ejemplo, la palabra clave new ahora es opcional, y la palabra clave const es opcional dentro de un contexto constante.

Por último, hemos hecho mucho trabajo detrás de escena para unificar varias herramientas de soporte, con un front-end común que ahora soporta nuestros compiladores y runtimes. Esto asegura consistencia para nuestros usuarios ahora y promete mejorar la velocidad y calidad de nuevas características a medida que Dart continúa evolucionando.

Dart en la Web: Un framework rico y potente

#

Las aplicaciones web han sido centrales a la misión de Dart desde el principio. De hecho, la mayor parte del desarrollo de Dart en Google es para aplicaciones web. Una de las más grandes es Google Ads, que mueve miles de millones de dólares de la economía web. En el proceso de migrar su código a Dart, redujeron el tamaño de su base de código de UI en un 40% mientras mejoraban la productividad de los desarrolladores y la calidad de la aplicación.

Mientras que el Dart SDK principal proporciona bibliotecas para acceder a las APIs modernas del navegador, también soportamos un robusto framework inspirado en Angular para construir aplicaciones web complejas. AngularDart 5, incluido como parte de Dart 2, aprovecha el sistema de tipos sólido de Dart y el nuevo sistema de build (descrito abajo) para ofrecer builds incrementales rápidos durante el desarrollo y JavaScript compilado más pequeño cuando estés listo para desplegar.

Una de las principales áreas de enfoque de este release ha sido mejorar la cantidad de código que se procesa al cargar la página, reduciendo significativamente el 'tiempo hasta interactividad' de las páginas web. Muchas apps han visto el tamaño del código reducido en más de la mitad en comparación con AngularDart 4.

Para mostrar las mejoras en la plataforma web de Dart, construimos una implementación de cliente basada en Dart para el sitio HackerNews como una Progressive Web App; esta está publicada junto con otras implementaciones de ejemplo en el popular sitio HNPWA. Usando las mejores prácticas para construir apps web de Dart, pudimos lanzar una experiencia completa con todas las funciones que es totalmente interactiva en un segundo en dispositivos modernos y en menos de cinco segundos en un dispositivo móvil modesto en una red 3G lenta. Esto es competitivo incluso con frameworks web ligeros que están optimizados para apps más pequeñas.

Clon de Hacker News construido con Dart.
hnpwa.dartlang.org

Nuestras inversiones en el framework se extienden a nuestros componentes principales, que también hemos actualizado. Ahora tienes acceso a 100 nuevas clases, incluyendo varios componentes Material de fecha, hora y menú. Puedes explorar todos nuestros componentes en la galería de componentes.

Animación que demuestra el componente Material Date Picker.
Material Date Picker — uno de los componentes ricos disponibles para tu aplicación web

Herramientas flexibles para Dart 2

#

Con Dart 2, Dart se convierte en un lenguaje compilado a JavaScript de primera clase, con un ciclo de desarrollo que los desarrolladores web esperan y excelentes características de rendimiento en tiempo de ejecución. Esto se hace mientras proporciona beneficios que la mayoría de los lenguajes dirigidos a JS no proporcionan: un sistema de tipos sólido y excelente soporte para apps móviles nativas.

Con Dart 2, nuestras herramientas web adoptan un modelo de desarrollo 100% JavaScript con dos compiladores de JavaScript complementarios. El compilador de desarrollo, dartdevc, proporciona compilación incremental rápida mientras genera JavaScript que es fácil de leer y depurar. Esto permite que nuestro compilador de producción, dart2js, se enfoque en producir JavaScript altamente optimizado para progressive web apps móviles y experiencias empresariales complejas para escritorio. Ambos compiladores aprovechan el sistema de tipos sólido de Dart para optimizar su salida.

Nuestras herramientas web están basadas en un nuevo sistema de build, diseñado para ser rápido, depurable y extensible. Ahora tareas como generar código de serialización, compilar Sass a CSS y compilar Dart a JavaScript ocurren en una sola cadena de herramientas que soporta actualizaciones rápidas e incrementales a medida que cambias partes de tu aplicación. El sistema de build también está diseñado para soportar usos más allá de la web. Un ejemplo: está siendo usado por desarrolladores de Flutter, para generar código de serialización JSON.

Con Dart 2, también tenemos un conjunto ampliado de herramientas de desarrollo. Además del soporte para Android Studio y el conjunto de herramientas de JetBrains, incluyendo IntelliJ IDEA y WebStorm, también soportamos Visual Studio Code con la extensión Dart Code. Y también tenemos un gran scratchpad para experimentar: DartPad, que ha sido completamente actualizado para Dart 2.

Finalmente, el Dart SDK viene con un conjunto de otras herramientas útiles: un gestor de paquetes que funciona con nuestro sitio de paquetes, un analizador estático, un linter que puedes usar desde la línea de comandos o como paquete, y herramientas para documentación web y formateo de código que cumplen con la guía de estilo de Dart.

Más información

#

Consulta las instrucciones para empezar con Flutter y el conjunto de herramientas web de Dart.

Las notas de la versión proporcionan un desglose técnico detallado de las numerosas otras mejoras más pequeñas hechas desde Dart 1, algunas de las cuales son cambios que rompen compatibilidad con código Dart más antiguo. Si encuentras problemas que una búsqueda en Google no puede resolver, recomendamos empezar en StackOverflow. Suscríbete a la lista de correo de Anuncios de Dart y síguenos en Twitter para obtener actualizaciones. También nos encantaría verte en nuestras comunidades, por ejemplo el chat de Gitter y el subreddit r/dartlang.

Gracias

#

Dart se ha convertido en un lenguaje de propósito general que está optimizado para desarrollo web y móvil. Hemos estado trabajando en Dart 2 durante varios años, durante los cuales ha tocado cada aspecto de nuestro ecosistema y ha requerido migrar millones de líneas de código y cientos de paquetes.

Estamos agradecidos con las comunidades de Dart y Flutter así como con los cientos de ingenieros de Google que nos han ayudado en este viaje. ¡No podríamos haberlo hecho sin ustedes!

Más de Dart