我一直在阅读Dart快照,他们经常与Smalltalk图像进行比较.但对我来说,它们听起来很像Java字节码.
例如:
"Dart快照只是令牌流的二进制序列化,通过解析代码生成.快照不是"正在运行的程序的快照",它是在令牌转换为机器代码之前生成的.因此,没有程序状态是在快照中捕获."
而且他们是跨平台的:
"快照格式本身是跨平台的,这意味着它可以在32位,64位机器之间工作,等等.格式已经完成,因此可以快速读入内存,并强调最小化指针修正等额外工作. "
我在某处弄错了吗?
资料来源:
飞镖中的快照概念是什么?
http://www.infoq.com/articles/google-dart
小智 11
快照包含表示加载脚本的VM数据结构,其序列化形式类似于Smalltalk图像.为了更好地理解快照中包含的内容,我们应该看看Dart VM在读取脚本时创建的内容:
使用与架构无关的格式生成快照时,此对象图将序列化为文件.这允许Dart VM在32位或64位计算机上反序列化此快照文件,并比从一组文件中读取原始脚本快得多地重新创建所有必需的内部VM数据结构(请参阅John的回答).
为了澄清约翰的答案.生成快照时,Dart VM不会解析所有源代码.它只需解析源的顶层就能提取类,方法和字段定义,因为它们在序列化图中表示.特别是方法体不被解析,并且由于脚本语言的惯例,一旦控制到达特定方法,将仅报告错误.
正如Ladicek所指出的,Java字节码的目的完全不同.一旦加载了字节码,您就可以在JVM中创建VM数据结构的快照,以获得类似的效果.
简而言之:快照包含开始执行脚本所需的Dart VM堆上分配的所有数据结构的有效表示.
-Ivan
Dart快照只是提前解析的所有源文件的汇总.Dart快照与Java字节码文件不相似.Java字节码文件由JVM 机器代码组成,是编译,链接和汇编(进入JVM机器代码)阶段的产物.
Dart快照是Dart程序的二进制文件,它的导入/部分源文件依赖项已被解析为抽象语法树并汇总到单个文件中.执行Dart快照可以缩短启动时间,因为:
HTH,约翰
| 归档时间: | 
 | 
| 查看次数: | 1317 次 | 
| 最近记录: |