Dart 或编译(不是 Flutter)中的快照是什么?
What is a snapshot in Dart or compilation (not Flutter)?
我正在阅读 dart compile
,它有几个选项:可执行文件、AOT 快照、JIT 快照 和内核快照 和JavaScript.
可执行文件和快照有什么区别?这纯粹是事实可执行文件包含 Dart 运行时/VM,而快照不包含。为什么叫快照?
2 个高度相关的问题(我在发布此问题后发现)是:
- What is the difference between Dart's snapshots and Java bytecode?
- What is the snapshot concept in dart?
这个问题和不同,因为是问Snapshot和AOT的区别,其实AOT文件就是snapshot。它还主要询问了快照选项(AOT、内核、JIT)之间的差异。
编译Dart代码时,它被编译成中间字节码而不是本地代码。这意味着为了在任意环境中执行代码,编译器需要在可执行文件中包含 Dart 虚拟机以及用户代码以及程序所需的核心库的任何部分。通常,这很好,因为 Dart 运行time 实际上非常紧凑,但这样做的明显缺点是可执行文件会更大,启动时间也会更长,因为 运行time 需要在用户代码可以运行.
之前被提取和预热
但是,如果您正在为可以保证 Dart 运行time 存在的环境(例如服务器计算机或 IoT 设备)编译代码,则可以省略 运行通过构建快照文件而不是可执行文件从已编译程序中获取时间。这导致编译文件更小,启动时间更快,尽管它需要执行命令,因此不太方便。您可以了解有关快照以及如何构建和执行快照的更多信息on the Dart GitHib wiki page on snapshots。
存在三种不同类型的快照:内核快照,它只包含 AST 信息而不是编译后的字节码,因此 Dart 在任何支持的平台上可用 运行 次体系结构(便携但速度慢); JIT 快照,其中仅包含启动所需的程序部分,其余部分在 运行 时间进行解释(启动最快但执行速度较慢);和 AOT 快照,它将整个程序完全编译成字节码(启动较慢但执行最快)。
至于为什么叫“快照”,我也不好说。如果我不得不猜测,那是因为它是处于编译状态的程序的“快照”,但没有 运行 将其作为独立可执行文件所需的说明。
(以上是基于我对该主题的快速研究,可能会遗漏一些关键细节。如果 Dart 团队的成员遇到这个问题,他们可能会提供更详细和技术性的解释.)
可执行文件(由 dart compile exe
创建)是 AOT 快照和 Dart 运行时间的组合。 运行任何 Dart 代码都需要 Dart 运行time,因为它执行关键任务,例如管理内存(包括垃圾收集)和执行 运行time 类型检查。
三种快照(AOT、内核和JIT)都只包含编译后的源代码。他们都需要运行时间才能成为运行(通常你只需要使用dart run <snapshot>
)。
快照可能应该以不同的方式命名。 'module' 会更容易理解吗?
我正在阅读 dart compile
,它有几个选项:可执行文件、AOT 快照、JIT 快照 和内核快照 和JavaScript.
可执行文件和快照有什么区别?这纯粹是事实可执行文件包含 Dart 运行时/VM,而快照不包含。为什么叫快照?
2 个高度相关的问题(我在发布此问题后发现)是:
- What is the difference between Dart's snapshots and Java bytecode?
- What is the snapshot concept in dart?
这个问题和
编译Dart代码时,它被编译成中间字节码而不是本地代码。这意味着为了在任意环境中执行代码,编译器需要在可执行文件中包含 Dart 虚拟机以及用户代码以及程序所需的核心库的任何部分。通常,这很好,因为 Dart 运行time 实际上非常紧凑,但这样做的明显缺点是可执行文件会更大,启动时间也会更长,因为 运行time 需要在用户代码可以运行.
之前被提取和预热但是,如果您正在为可以保证 Dart 运行time 存在的环境(例如服务器计算机或 IoT 设备)编译代码,则可以省略 运行通过构建快照文件而不是可执行文件从已编译程序中获取时间。这导致编译文件更小,启动时间更快,尽管它需要执行命令,因此不太方便。您可以了解有关快照以及如何构建和执行快照的更多信息on the Dart GitHib wiki page on snapshots。
存在三种不同类型的快照:内核快照,它只包含 AST 信息而不是编译后的字节码,因此 Dart 在任何支持的平台上可用 运行 次体系结构(便携但速度慢); JIT 快照,其中仅包含启动所需的程序部分,其余部分在 运行 时间进行解释(启动最快但执行速度较慢);和 AOT 快照,它将整个程序完全编译成字节码(启动较慢但执行最快)。
至于为什么叫“快照”,我也不好说。如果我不得不猜测,那是因为它是处于编译状态的程序的“快照”,但没有 运行 将其作为独立可执行文件所需的说明。
(以上是基于我对该主题的快速研究,可能会遗漏一些关键细节。如果 Dart 团队的成员遇到这个问题,他们可能会提供更详细和技术性的解释.)
可执行文件(由 dart compile exe
创建)是 AOT 快照和 Dart 运行时间的组合。 运行任何 Dart 代码都需要 Dart 运行time,因为它执行关键任务,例如管理内存(包括垃圾收集)和执行 运行time 类型检查。
三种快照(AOT、内核和JIT)都只包含编译后的源代码。他们都需要运行时间才能成为运行(通常你只需要使用dart run <snapshot>
)。
快照可能应该以不同的方式命名。 'module' 会更容易理解吗?