Dart和x27之间有什么区别;s快照和Java字节码?
我一直在阅读Dart快照,它们经常被比作Smalltalk图像。但对我来说,它们听起来很像Java字节码 例如: Dart快照只是通过解析代码生成的令牌流的二进制序列化。快照不是“正在运行的程序的快照”,而是在令牌转换为机器代码之前生成的。因此,快照中不会捕获程序状态 另外,它们是跨平台的: “快照格式本身是跨平台的,这意味着它可以在32位、64位机器等之间工作。该格式的制作使其能够快速读入内存,重点是最大限度地减少额外的工作,如指针修正。” 我哪里弄错了 资料来源:Dart和x27之间有什么区别;s快照和Java字节码?,dart,Dart,我一直在阅读Dart快照,它们经常被比作Smalltalk图像。但对我来说,它们听起来很像Java字节码 例如: Dart快照只是通过解析代码生成的令牌流的二进制序列化。快照不是“正在运行的程序的快照”,而是在令牌转换为机器代码之前生成的。因此,快照中不会捕获程序状态 另外,它们是跨平台的: “快照格式本身是跨平台的,这意味着它可以在32位、64位机器等之间工作。该格式的制作使其能够快速读入内存,重点是最大限度地减少额外的工作,如指针修正。” 我哪里弄错了 资料来源: Dart快照只是提前解析
Dart快照只是提前解析的所有源文件的汇总。Dart快照与Java字节码文件不同。Java字节码文件由JVM机器代码组成,是编译、链接和汇编(进入JVM机器代码)阶段的产物 Dart快照是Dart程序的二进制文件,它的导入/部分源文件依赖项已解析为抽象语法树并滚动到单个文件中。执行Dart快照可以加快启动时间,因为:
John快照包含VM数据结构,以类似于Smalltalk映像的序列化形式表示加载的脚本。为了更好地理解快照中包含的内容,我们应该查看Dart VM在读取脚本时创建的内容:
- 库对象,引用所有顶级结构,如类或顶级方法和变量
- 类对象,包含描述所有方法和字段的所有对象
- 表示所有加载源代码的脚本和令牌流对象
- 源代码中所有使用的标识符和字符串常量的字符串对象
-Ivan我只想指出,从Dart 2+开始,在快照方面有几个独特的概念:
- 内核快照
- JIT快照
- AOT快照
您可以阅读更多内容。只是澄清一下,“汇总所有源文件”不是类似于链接过程吗?此外,如果解析已经提前完成(即Dart到快照),这不是像Java代码到JVM字节码一样吗?JVM字节码是JVM和语言编译器之间定义良好的接口。Dart快照只不过是一种优化启动时间的巧妙技术。它们的内部工作原理可能听起来和你很相似,但它们是为完全无关的目的而设计的。哇,你真的很了解它们的内部结构——感谢你提供了如此详细的答案!