He estado usando dardo / aleteo para algunos proyectos, y realmente lo estoy disfrutando.

He leído que al crear una aplicación móvil, Dart crea una aplicación nativa con código nativo. Pero también he leído que Dart tiene su propia VM para el rendimiento.

Lo que estoy tratando de entender es si esa VM es lo que se usa cuando construyes una aplicación móvil, o si está construyendo otro código que compila para la aplicación nativa. Y si está haciendo algo más, ¿para qué todavía se usa la máquina virtual de dardos?

23
DragonFax 26 oct. 2017 a las 21:10

3 respuestas

La mejor respuesta

Respuesta corta: sí, Dart VM todavía se está utilizando cuando compila su aplicación móvil.

Ahora respuesta más larga: Dart VM tiene dos modos de operación diferentes, uno JIT y otro AOT.

En el modo JIT, Dart VM es capaz de cargar dinámicamente el origen de Dart, analizarlo y compilarlo en código máquina nativo sobre la marcha para ejecutarlo. Este modo se utiliza cuando desarrolla su aplicación y proporciona características como depuración, recarga en caliente, etc.

En el modo AOT, Dart VM no es compatible con la carga / análisis / compilación dinámica del código fuente de Dart. Solo admite cargar y ejecutar el código de máquina precompilado . Sin embargo, incluso el código de máquina precompilado aún necesita VM para ejecutarse, porque VM proporciona sistema de tiempo de ejecución que contiene recolector de basura, varios métodos nativos necesarios para que funcionen las bibliotecas dart:*, información de tipo de tiempo de ejecución, búsqueda dinámica de métodos, etc. Este modo se usa en su aplicación implementada.

¿De dónde viene el código de máquina precompilado para el modo AOT? Este código es generado por (un modo especial de) VM de su aplicación Flutter cuando construye su aplicación en el modo de lanzamiento.

Puede leer más sobre cómo Dart VM ejecuta el código Dart aquí.

51
Vyacheslav Egorov 10 feb. 2019 a las 16:01

Cuando Dart VM se usa en modo de lanzamiento, no es realmente una VM (máquina virtual) en el sentido tradicional de un procesador de computadora virtual implementado en software , que tiene su propio lenguaje de máquina que es diferente de El lenguaje de máquina del hardware.

Esto es lo que causa la confusión en la pregunta original. En el modo de lanzamiento, Dart VM es básicamente una biblioteca de tiempo de ejecución (no muy diferente de las bibliotecas de tiempo de ejecución requeridas por todos los lenguajes de alto nivel).

11
Wm Leler 13 ago. 2018 a las 05:25

El Dart VM es perfectamente bueno para aplicaciones del lado del servidor, particularmente usando dart:io para acceder a archivos locales, procesos y sockets.

0
Randal Schwartz 26 oct. 2017 a las 18:41