我正在修补变压器 + “分析器”pub 包,我想构建一个 2 级变压器。
阶段是:
- 为每个 dart 源文件 构建AST 。
- 从第一阶段的输出中生成新的来源(来自所有 AST 的信息)。
我需要在不进行昂贵的序列化/反序列化的情况下将 AST 从一个阶段传递到另一个阶段,但是Asset
(文档)不能从类实例构建。
是否可以构建类实例快照并将其传递到下一阶段?
这就是我到目前为止发现的:
Dart VM 使用以下类型的快照: ...
对象快照。从一个隔离区到另一个隔离区的消息传递是在 Dart VM 中通过创建需要发送到另一个隔离区的 Dart 对象的快照来实现的。
在两个隔离共享相同代码并在同一个进程中运行的特殊情况下(例如通过 spawn 创建的隔离),也可以发送对象实例(将在进程中复制)。
如果“对象快照”也有同样的限制,那就帮不了我了。
但是,有趣的是,应该可以通过将对象循环通过生成的隔离来创建对象的“深层副本”(克隆)。
在 Issue 6459: clone instance(object) @lrn 中指出:
我们通常不希望通过类的生成构造函数来创建对象。您可以阅读 Joshua Bloch 关于 Java 中的克隆的内容: http ://www.artima.com/intv/bloch13.html即使考虑到这种经验,我们也可以避免接口问题,但我们通常不能决定深拷贝还是浅拷贝是正确的做法。只有对象本身知道这一点。
所以即使可能也不推荐。