Dart es un lenguaje de programación diseñado para el desarrollo de clientes, [9] [10] como para la web y aplicaciones móviles . Está desarrollado por Google y también se puede utilizar para crear aplicaciones de servidor y de escritorio.
Paradigma | Multi-paradigma : funcional , imperativo , orientado a objetos , reflexivo [1] |
---|---|
Diseñada por | Lars Bak y Kasper Lund |
Desarrollador | |
Apareció por primera vez | 10 de octubre de 2011 [2] |
Lanzamiento estable | 2.13.0 [3] / 18 de mayo de 2021 |
Versión de vista previa | 2.12.0-259.16.beta / 22 de febrero de 2021 [4] |
Disciplina de mecanografía | 1.x: Opcional 2.x: Inferido [5] ( estático , fuerte ) |
Plataforma | Multiplataforma |
SO | Multiplataforma |
Licencia | BSD |
Extensiones de nombre de archivo | .dardo |
Sitio web | dardo |
Implementaciones importantes | |
Dart VM, dart2native, dart2js, DDC, Flutter | |
Influenciado por | |
C , C ++ , C # , Erlang , Java , JavaScript , Kotlin , [6] Ruby , Smalltalk , Strongtalk , [7] TypeScript [8] |
Dart es un orientado a objetos , basado en la clase , recolección de basura lenguaje con el C al estilo de sintaxis . [11] Dart puede compilar tanto en código nativo como en JavaScript . Admite interfaces , mixins , clases abstractas , genéricos reificados e inferencia de tipos . [12]
Historia
Dart fue presentado en la conferencia GOTO en Aarhus , Dinamarca, del 10 al 12 de octubre de 2011. [13] El proyecto fue fundado por Lars Bak y Kasper Lund. [14] Dart 1.0 fue lanzado el 14 de noviembre de 2013. [15]
Dart inicialmente tuvo una recepción mixta y la iniciativa Dart ha sido criticada por algunos por fragmentar la web, debido a los planes originales de incluir una Dart VM en Chrome. Esos planes se abandonaron en 2015 con la versión 1.9 de Dart para centrarse en su lugar en compilar Dart en JavaScript. [dieciséis]
En agosto de 2018, se lanzó Dart 2.0, con cambios de idioma que incluyen un sistema de tipo de sonido. [17]
Dart 2.6 introdujo una nueva extensión, dart2native. La función extiende la compilación nativa a las plataformas de escritorio Linux, macOS y Windows. Los desarrolladores anteriores podían crear nuevas herramientas solo con dispositivos Android o iOS. Además, con esta extensión es posible componer un programa Dart en ejecutables autónomos. Por lo tanto, según los representantes de la compañía, ahora no es obligatorio tener instalado Dart SDK, los ejecutables autónomos ahora pueden comenzar a ejecutarse en unos segundos. La nueva extensión también está integrada con el kit de herramientas Flutter , lo que hace posible utilizar el compilador en servicios pequeños (soporte de backend, por ejemplo). [18] [19]
- Estandarización
Ecma International ha formado el comité técnico TC52 [20] para trabajar en la estandarización de Dart y, dado que Dart se puede compilar en JavaScript estándar, funciona de forma eficaz en cualquier navegador moderno. Ecma International aprobó la primera edición de la especificación del lenguaje Dart en julio de 2014, en su 107ª Asamblea General, [21] y una segunda edición en diciembre de 2014. [22] La última especificación está disponible en la especificación del lenguaje Dart .
Uso
Hay cuatro formas de ejecutar el código Dart:
- Compilado como JavaScript
- Para ejecutarse en los navegadores web convencionales , Dart se basa en un compilador de fuente a fuente para JavaScript . Según el sitio del proyecto, Dart fue "diseñado para ser herramientas de desarrollo fáciles de escribir, adecuado para el desarrollo de aplicaciones modernas y capaz de implementaciones de alto rendimiento". [23] Cuando se ejecuta código Dart en un navegador web, el código se precompila en JavaScript utilizando el compilador dart2js. Compilado como JavaScript, el código de Dart es compatible con todos los navegadores principales sin necesidad de que los navegadores adopten Dart. Mediante la optimización de la salida de JavaScript compilada para evitar costosas comprobaciones y operaciones, el código escrito en Dart puede, en algunos casos, ejecutarse más rápido que el código equivalente escrito a mano utilizando modismos de JavaScript. [24]
- Ser único
- El kit de desarrollo de software (SDK) de Dart se envía con una máquina virtual de Dart independiente, lo que permite que el código de Dart se ejecute en un entorno de interfaz de línea de comandos . Como las herramientas de lenguaje incluidas en el SDK de Dart están escritas principalmente en Dart, la máquina virtual de Dart independiente es una parte fundamental del SDK. Estas herramientas incluyen el compilador dart2js y un administrador de paquetes llamado pub. Dart se envía con una biblioteca estándar completa que permite a los usuarios escribir aplicaciones del sistema que funcionen completamente, como servidores web personalizados. [25]
- Compilado con anticipación
- El código Dart se puede compilar con AOT en código de máquina (conjuntos de instrucciones nativas). Las aplicaciones creadas con Flutter , un SDK de aplicaciones móviles creado con Dart, se implementan en las tiendas de aplicaciones como código Dart compilado por AOT. [26]
- Nativo
- Dart 2.6 con el compilador dart2native para compilar en código ejecutable nativo autónomo. Antes de Dart 2.6, esta función solo exponía esta capacidad en dispositivos móviles iOS y Android a través de Flutter . [27]
Aisla
Para lograr la simultaneidad, Dart usa aislamientos, que son trabajadores independientes que no comparten memoria, sino que usan el paso de mensajes. Esto es similar a los procesos de Erlang (ver también el modelo Actor ). Cada programa de Dart utiliza al menos un aislado, que es el principal. Dado que Dart 2, la plataforma web de Dart ya no admite aislamientos, sugiere que los desarrolladores utilicen Web Workers en su lugar. [28]
Instantáneas
Las instantáneas son una parte fundamental de Dart VM. Las instantáneas son archivos que almacenan objetos y otros datos en tiempo de ejecución.
- Instantáneas de secuencias de comandos
- Los programas de Dart se pueden compilar en archivos de instantáneas. Estos archivos contienen todo el código del programa y las dependencias preparadas y listas para ejecutarse. Esto permite inicios rápidos.
- Instantáneas completas
- Las bibliotecas centrales de Dart se pueden compilar en un archivo de instantánea que permite una carga rápida de las bibliotecas. La mayoría de las distribuciones estándar de la Dart VM principal tienen una instantánea prediseñada para las bibliotecas centrales que se carga en tiempo de ejecución.
- Instantáneas de objetos
- Dart es un lenguaje muy asincrónico . Con esto, utiliza aislamientos para la concurrencia . Dado que estos son trabajadores que pasan mensajes, necesita una forma de serializar un mensaje. Esto se hace usando una instantánea , que se genera a partir de un objeto dado, y luego se transfiere a otro aislado para deserializar.
Aplicaciones móviles nativas
Google ha introducido Flutter para el desarrollo de aplicaciones móviles nativas tanto en Android como en iOS . [29] Flutter es un SDK de aplicaciones móviles, completo con marco, widgets y herramientas, que ofrece a los desarrolladores una forma de crear e implementar aplicaciones móviles, escritas en Dart. Flutter funciona con Firebase y otros SDK de aplicaciones móviles, y es de código abierto.
Compilando en JavaScript
El SDK de Dart contiene dos compiladores de Dart a JavaScript. Durante el desarrollo, dartdevc admite ciclos de actualización rápidos. Para la versión final de una aplicación, dart2js produce JavaScript implementable . [30]
El primer compilador que generó JavaScript a partir del código de Dart fue dartc, pero quedó obsoleto. El segundo compilador de Dart a JavaScript fue Frog. Fue escrito en Dart, pero nunca implementó la semántica completa del lenguaje. El tercer compilador de Dart a JavaScript fue dart2js. Una evolución de los compiladores anteriores, dart2js está escrito en Dart y tiene la intención de implementar la semántica y la especificación del lenguaje Dart completo.
El 28 de marzo de 2013, el equipo de Dart publicó una actualización en su blog que abordaba el código de Dart compilado en JavaScript con el compilador dart2js, [31] indicando que ahora se ejecuta más rápido que JavaScript escrito a mano en el motor JavaScript V8 de Chrome para la prueba comparativa DeltaBlue. [32]
Editores
El 18 de noviembre de 2011, Google lanzó Dart Editor, un programa de código abierto basado en componentes de Eclipse , para sistemas operativos basados en macOS , Windows y Linux . [33] El editor admite resaltado de sintaxis , finalización de código , compilación de JavaScript, ejecución de aplicaciones web y de servidor Dart y depuración .
El 13 de agosto de 2012, Google anunció el lanzamiento de un complemento de Eclipse para el desarrollo de Dart. [34]
El 18 de abril de 2015, Google anunció que Dart Editor se retiraría a favor del entorno de desarrollo integrado (IDE) JetBrains , [35] que ahora es el IDE recomendado para el lenguaje. El complemento Dart [36] está disponible para IntelliJ IDEA , PyCharm , PhpStorm y WebStorm . Este complemento admite muchas funciones, como resaltado de sintaxis, finalización de código, análisis, refactorización, depuración y más. Hay otros complementos disponibles para editores como Sublime Text , Atom , Emacs , Vim y Visual Studio Code . [37]
Editor para desarrolladores de Chrome
En 2013, el equipo de Chromium comenzó a trabajar en un entorno de desarrollo de código abierto basado en la aplicación Chrome con una biblioteca reutilizable de widgets GUI , con nombre en código Spark. [38] El proyecto fue posteriormente renombrado como Chrome Dev Editor. [39] Fue construido en Dart y contenía Spark, que funciona con Polymer. [40]
En junio de 2015, Google transfirió el proyecto CDE a GitHub como un proyecto de software libre y cesó la inversión activa en CDE. [41] A partir de abril de 2019, Chrome Dev Editor ya no se encuentra en desarrollo activo. [42]
DartPad
El equipo de Dart creó DartPad a principios de 2015, para proporcionar una forma más fácil de comenzar a usar Dart. Es un editor completamente en línea desde el cual los usuarios pueden experimentar con las interfaces de programación de aplicaciones (API) de Dart y ejecutar el código de Dart. Proporciona resaltado de sintaxis, análisis de código, finalización de código, documentación y edición de HTML y CSS. [43]
SIMD
En 2013, John McCutchan anunció [44] que había creado una interfaz eficaz para conjuntos de instrucciones de instrucción única y datos múltiples ( SIMD ) para Dart.
La interfaz consta de dos tipos:
- Float32 × 4, 4 × valores de punto flotante de precisión simple
- Uint32 × 4, 4 × valores enteros sin signo de 32 bits
Las instancias de estos tipos son inmutables y en código optimizado se asignan directamente a los registros SIMD. Las operaciones expresadas en Dart generalmente se compilan en una instrucción sin gastos generales. Esto es similar a los intrínsecos de C y C ++ . Los puntos de referencia para la multiplicación de matrices 4 × 4 , la transformación de vértices 3D y la visualización de conjuntos de Mandelbrot muestran una aceleración cercana al 400% en comparación con el código escalar escrito en Dart.
Ejemplo
Un Hola, mundo! ejemplo:
void main () { print ( '¡Hola, mundo!' ); }
Una función para calcular el n-ésimo número de Fibonacci :
int fib ( int n ) => ( n > 2 ) ? ( fib ( n - 1 ) + fib ( n - 2 )) : 1 ; // Una implementación de la función de Fibonacci con un operador condicional en Dart // Este código se lee como: // dado un número entero n, // si n> 2, devuelve fib (n - 1) + fib (n - 2); // de lo contrario, devuelve el entero 1 como resultadovoid main () { print ( 'fib (20) = $ { fib ( 20 ) } ' ); }
Una clase simple:
// Importa la biblioteca matemática para acceder a la función sqrt. // Importado con `math` como nombre, por lo que los accesos deben usar` math` como prefijo. importar 'dardo: matemáticas' como matemáticas ;// Crea una clase para Point. punto de clase { // Las variables finales no se pueden cambiar una vez asignadas. // Declara dos variables de instancia. num final x , y ; // Un constructor, con azúcar sintáctico para establecer variables de instancia. // El constructor tiene dos parámetros obligatorios. Punto ( esto . X , esto . Y ); // Un constructor con nombre con una lista de inicializadores. Point . origen () : x = 0 , y = 0 ; // Un método. num distanceTo ( Point other ) { var dx = x - other . x ; var dy = y - otro . y ; devolver matemáticas . sqrt ( dx * dx + dy * dy ); } // Ejemplo de un "captador". // Actúa igual que una variable final, pero se calcula en cada acceso. num obtener magnitud => matemáticas . sqrt ( x * x + y * y ); // Ejemplo de sobrecarga de operadores Point operador + ( Point otro ) => Point ( x + otro . X , y + otro . Y ); // Cuando crea una instancia de una clase como Point in Dart 2+, new es // una palabra opcional }// Todos los programas de Dart comienzan con main (). void main () { // Crear instancias de objetos puntuales. var p1 = Punto ( 10 , 10 ); imprimir ( p1 . magnitud ); var p2 = Punto . origen (); var distancia = p1 . distancia a ( p2 ); imprimir ( distancia ); }
Influencias de otros idiomas
Dart es un descendiente de la familia de lenguajes ALGOL , [45] junto con C, Java, C #, JavaScript y otros.
La sintaxis en cascada de métodos , que proporciona un atajo sintáctico para invocar varios métodos uno tras otro en el mismo objeto, se adoptó de Smalltalk.
Los mixins de Dart fueron influenciados por Strongtalk [ cita requerida ] [46] y Ruby .
Dart hace uso de aislamientos como unidad de seguridad y simultaneidad al estructurar aplicaciones. [47] El concepto Isolate se basa en el modelo Actor , que es el más famoso implementado en Erlang.
La API Mirror para realizar una reflexión controlada y segura se propuso por primera vez en un artículo [48] de Gilad Bracha (que es miembro del equipo de Dart) y David Ungar y se implementó originalmente en Self .
Ver también
- Kit de herramientas web de Google
- TypeScript , un lenguaje de programación fuertemente tipado que se transpila a JavaScript
Referencias
- ^ Kopec, David (30 de junio de 2014). Dardo para principiantes absolutos . pag. 56. ISBN 9781430264828. Consultado el 24 de noviembre de 2015 .
- ^ Bak, Lars. "Dart: un lenguaje para programación web estructurada" . Blog de código de Google . Consultado el 31 de enero de 2016 .
- ^ https://github.com/dart-lang/sdk/releases/tag/2.13.0 .
- ^ "Archivo SDK de Dart" .
- ^ "El sistema tipo Dart" . dart.dev .
- ^ "Anuncio de Dart 2.7: un Dart - Dart - Medium más seguro y expresivo" . Michael Thomsen . Consultado el 24 de enero de 2020 .
- ^ "Lenguajes web y máquinas virtuales: Fast Code siempre está de moda. (V8, Dart) - Google I / O 2013" . Consultado el 22 de diciembre de 2013 .
- ^ "El equipo de Dart da la bienvenida a TypeScript" . Consultado el 22 de febrero de 2020 .
- ^ "Resumen de dardos" . dart.dev . Consultado el 6 de abril de 2021 .
- ^ "Lenguaje de programación Dart" . dart.dev . Consultado el 6 de abril de 2021 .
Un lenguaje de programación optimizado para crear interfaces de usuario con características como el operador de propagación para expandir colecciones y la colección para personalizar la interfaz de usuario para cada plataforma.
- ^ "Un recorrido por el lenguaje de los dardos" . dart.dev . Consultado el 9 de agosto de 2018 .
- ^ "El sistema tipo Dart" . dart.dev .
- ^ "Dart, un nuevo lenguaje de programación para la programación web estructurada" , conferencia GOTO (presentación) (discurso de apertura), conferencia de Århus, 2011-10-10
- ^ Ladd, Seth. "Qué es Dart" . ¿Qué es Dart? . O'Reilly . Consultado el 16 de agosto de 2014 .
- ^ "Dart 1.0: un SDK estable para aplicaciones web estructuradas" . news.dartlang.org . Consultado el 8 de agosto de 2018 .
- ^ Seth Ladd. "Noticias y actualizaciones de Dart" . dartlang.org .
- ^ Moore, Kevin (7 de agosto de 2018). "Anuncio de Dart 2 Stable y la plataforma web Dart" . Dardo . Consultado el 8 de agosto de 2018 .
- ^ "Dart 2.5 trae la compilación nativa al escritorio" . Infoworld . Consultado el 28 de noviembre de 2019 .
- ^ "Dart 2.6 lanzado con dart2native" . SDtimes . Consultado el 28 de noviembre de 2019 .
- ^ "TC52 - Dardo" . Archivado desde el original el 2 de agosto de 2016 . Consultado el 16 de diciembre de 2013 .
- ^ Anders Thorhauge Sandholm. "Noticias y actualizaciones de Dart" . dartlang.org .
- ^ Anders Thorhauge Sandholm. "Noticias y actualizaciones de Dart" . dartlang.org .
- ^ "¿Por qué?", Dart lang (FAQ),
Diseñamos Dart para que sea fácil de escribir herramientas de desarrollo, adecuado para el desarrollo de aplicaciones modernas y capaz de implementaciones de alto rendimiento.
- ^ "JavaScript como destino de compilación: hacerlo rápido" (PDF) . Dartlang.org. Archivado desde el original (PDF) el 02 de julio de 2016 . Consultado el 18 de agosto de 2013 .
- ^ "Una introducción al dardo: biblioteca io" . Dartlang.org . Consultado el 21 de julio de 2013 .
- ^ "Preguntas frecuentes sobre Flutter" . flutter.io . ¿Cómo Flutter ejecuta mi código en iOS? . Consultado el 2 de octubre de 2016 .
- ^ "Anuncio de Dart 2.6 con dart2native: compile Dart en ejecutables nativos autónomos" . Consultado el 6 de diciembre de 2019 .
- ^ Moore, Kevin (23 de febrero de 2018). "Dart2 Breaking Change: Eliminación de soporte web para dardos: espejos y dardos: aislar" . Grupos de Google .
- ^ "Flutter - Hermosas aplicaciones nativas en un tiempo récord" . flutter.dev .
- ^ "Despliegue" . angulardart.dev .
- ^ Ladd, Seth (28 de marzo de 2013). "Noticias y actualizaciones de Dart: por qué dart2js produce código JavaScript más rápido de Dart" . News.dartlang.org . Consultado el 21 de julio de 2013 .
- ^ "Rendimiento de dardos" . Dartlang.org . Archivado desde el original el 3 de enero de 2017 . Consultado el 21 de julio de 2013 .
- ^ "Google lanza Dart Editor para Windows, Mac OS X y Linux" . Archivado desde el original el 3 de diciembre de 2013 . Consultado el 29 de noviembre de 2011 .
- ^ "El complemento Dart para Eclipse está listo para la vista previa" .
- ^ Ladd, Seth (30 de abril de 2015). "El presente y futuro de los editores e IDE para Dart" . Noticias y actualizaciones de Dart . Consultado el 18 de mayo de 2015 .
- ^ "Repositorio de complementos de JetBrains: Dart" . Plugins.intellij.net . Consultado el 21 de julio de 2013 .
- ^ "Herramientas de dardos" . dart.dev . Consultado el 15 de noviembre de 2016 .
- ^ Beaufort, François. Actualmente, el equipo de Cromo está trabajando activamente ” .
- ^ "Un entorno de desarrollo basado en aplicaciones de Chrome" .
- ^ "Spark, una aplicación de Chrome de Google es un IDE para su Chromebook" . 22 de noviembre de 2013.
- ^ Saroop, Sri. "Chrome Dev Editor: anuncios" .
- ^ "Chrome Dev Editor es una herramienta de desarrollo para crear aplicaciones en la plataforma Chrome: Chrome Apps y Web Apps, en JavaScript o Dart. (YA NO ESTÁ EN DESARROLLO ACTIVO) - googlearchive / chromedeveditor" . 29 de julio de 2019 - a través de GitHub.
- ^ Ladd, Seth (6 de mayo de 2015). "Anuncio de DartPad: una forma sin fricciones de explorar el código de Dart" . Noticias y actualizaciones de Dart . Consultado el 18 de mayo de 2015 .
- ^ "Llevando SIMD a la web a través de Dart" (PDF) . Archivado desde el original (PDF) el 02 de julio de 2016.
- ^ "Familia Algol" . c2.com .
- ^ Bracha, Gilad; Griswold, David (septiembre de 1996). "Ampliando el lenguaje Smalltalk con Mixins" (PDF) . Taller OOPSLA . OOPSLA.
- ^ "La esencia de Google Dart: creación de aplicaciones, instantáneas, aislamientos" . InfoQ .
- ^ Bracha, Gilad; Ungar, David (2004). "Mirrors: principios de diseño para instalaciones de meta-nivel de lenguajes de programación orientados a objetos" (PDF) . Avisos ACM SIGPLAN . ACM. 39 (10): 331–344. doi : 10.1145 / 1035292.1029004 . Consultado el 15 de febrero de 2014 .
Bibliografía
- Walrath, Kathy; Ladd, Seth (7 de marzo de 2012). ¿Qué es Dart? (1ª ed.). O'Reilly Media . pag. 20. ISBN 978-14493-32327.
- Walrath, Kathy; Ladd, Seth (7 de noviembre de 2012). Dart: Up and Running (1ª ed.). O'Reilly Media . pag. 144. ISBN 978-1449330897.
- Buckett, Chris (28 de diciembre de 2012). Dardo en acción (1ª ed.). Publicaciones Manning . pag. 475. ISBN 978-1617290862.
enlaces externos
- Página web oficial
- DartPad