Dart VM 还在使用吗?
Is the Dart VM still used?
我已经在几个项目中使用 dart/flutter,我真的很喜欢它。
我读到在构建移动应用程序时,dart 使用本机代码构建本机应用程序。但我也读过 dart 有自己的 VM 来提高性能。
我想了解的是,该 VM 是您构建移动应用程序时使用的,还是构建为本机应用程序编译的其他代码。如果它在做其他事情,dart VM 仍然用于什么?
Dart VM 非常适合服务器端应用程序,特别是使用 dart:io
访问本地文件、进程和套接字。
简短回答:是的,在您构建移动应用程序时仍在使用 Dart VM。
现在更长的答案:Dart VM 有两种不同的操作模式,一种是 JIT 模式,另一种是 AOT 模式。
在 JIT 模式下,Dart VM 能够动态加载 Dart 源代码,动态解析并编译成本地机器码以执行它。此模式在您开发应用程序时使用,并提供调试、热重载等功能
在AOT模式下Dart VM不支持Dart源码的动态loading/parsing/compilation。它只支持加载和执行预编译机器码。然而,即使是预编译的机器代码仍然需要 VM 来执行,因为 VM 提供 runtime system 其中包含垃圾收集器、dart:*
库运行所需的各种本地方法、运行时类型信息、动态方法查找等。此模式用于您部署的应用程序。
AOT模式的预编译机器码从何而来?当您在发布模式下构建应用程序时,此代码由 Flutter 应用程序的(一种特殊模式)VM 生成。
您可以阅读更多关于 Dart VM 如何执行 Dart 代码的内容here。
当Dart VM用于release模式时,它并不是传统意义上的真正的VM(虚拟机)软件实现的虚拟计算机处理器,它有它自己的机器语言不同于硬件的机器语言。
这就是导致原始问题混乱的原因。在发布模式下,Dart VM 基本上是一个运行时库(与所有高级语言所需的运行时库没有太大区别)。
我已经在几个项目中使用 dart/flutter,我真的很喜欢它。
我读到在构建移动应用程序时,dart 使用本机代码构建本机应用程序。但我也读过 dart 有自己的 VM 来提高性能。
我想了解的是,该 VM 是您构建移动应用程序时使用的,还是构建为本机应用程序编译的其他代码。如果它在做其他事情,dart VM 仍然用于什么?
Dart VM 非常适合服务器端应用程序,特别是使用 dart:io
访问本地文件、进程和套接字。
简短回答:是的,在您构建移动应用程序时仍在使用 Dart VM。
现在更长的答案:Dart VM 有两种不同的操作模式,一种是 JIT 模式,另一种是 AOT 模式。
在 JIT 模式下,Dart VM 能够动态加载 Dart 源代码,动态解析并编译成本地机器码以执行它。此模式在您开发应用程序时使用,并提供调试、热重载等功能
在AOT模式下Dart VM不支持Dart源码的动态loading/parsing/compilation。它只支持加载和执行预编译机器码。然而,即使是预编译的机器代码仍然需要 VM 来执行,因为 VM 提供 runtime system 其中包含垃圾收集器、dart:*
库运行所需的各种本地方法、运行时类型信息、动态方法查找等。此模式用于您部署的应用程序。
AOT模式的预编译机器码从何而来?当您在发布模式下构建应用程序时,此代码由 Flutter 应用程序的(一种特殊模式)VM 生成。
您可以阅读更多关于 Dart VM 如何执行 Dart 代码的内容here。
当Dart VM用于release模式时,它并不是传统意义上的真正的VM(虚拟机)软件实现的虚拟计算机处理器,它有它自己的机器语言不同于硬件的机器语言。
这就是导致原始问题混乱的原因。在发布模式下,Dart VM 基本上是一个运行时库(与所有高级语言所需的运行时库没有太大区别)。