赞
踩
Google I/O 的结束,除了 Flutter 3.22 的发布 ,Dart 3.4 也迎来了它是「史诗级」的更新,之所以这么说,就是因为 Wasm Native 的落地和 Macros 的实验性展示。
在此之前,其实我也提前整理过一些对应的内容,例如:
虽然之前的内容都是基于 Flutter 的话题下去展开,但是其实根本上它更多是来自 Dart 的支持,而现在它们终于和我们见面了。
从 Flutter 3.22 开始, Flutter Web 终于可以实现 Wasm Native 的支持,这得益于 Dart 团队一直在努力推进的 WasmGC ,现在 Dart 终于正式支持编译为 Native 支持 Wasm 运行。
这里面主要涉及 WasmGC 的落地,全新的 Dart 编译器生成 WasmGC 代码,以及 Dart 3.3 里发布的新一代的 JavaScript Interop 的支持。
下一步 Dart 团队将尝试在「纯 Dart 应用」层面全面支持 Wasm ,并完全一些目前趣事的能力,例如延迟加载 等等。
当然,作为第一版的 WebAssembly 支持,目前还存在一些限制,例如:
总的来说,这个落地只是一个开始,它对于 Flutter Web 来说是对自己核心路线承诺的落地:“ Flutter Web 是围绕 CanvasKit 和 WebAssembly 等新兴 Web 技术进行架构设计的框架。”
Dart 开发者其实长期以来的一个痛点就是:序列化和反序列化 JSON ,其实大家都知道 build_runner
有多讨厌,以至于很多开发者更愿意用插件生成一个 Dart 文件而不是用 JsonSerializable
。
今天,Dart 带来了一种基于 Macros 的 JSON 序列化和反序列化预览支持:JsonCodable ,它可以通过在编译时内省其他代码来生成代码支持,例如:
@JsonCodable()
class Vehicle {
final String description;
final int wheels;
Vehicle(this.description, this.wheels);
}
void main() {
final jsonString = Vehicle('bicycle', 2).toJson();
print('Vehicle serialized: $jsonString');
}
那么它是怎样工作的? toJson()
/ fromJson()
是从哪里来的?这就是 Dart Macros 的支持,当 Dart 编译器看到 @JsonCodable()
注释时,它会立即实时定位到 JsonCodable 宏的定义并开始执行它:
创建一个新的 “augmentation class”,这是一种新的语言构造,可以向现有类添加新声明,augmentation 可以分散在多个位置,无论是在单个文件内还是跨多个文件,都可以添加新的顶级声明,将新成员注入到类中,并将函数和变量包装在附加代码中。
“阅读”开发人员对该Vehicle
类的定义,以确定它有两个字段,description
和 wheels
toJson
向 augmentation class 添加新的方法签名
填写方法主体 toJson
以处理 description
和 wheels
字段的序列化
JsonCodable 集成支持现有的开发人员工作流程,例如热重载:
对于宏支持,Dart 团队也考虑未来在 Dart 中添加对数据类的内置支持,这是一项长久的任务,目前正在按照阶段的落地:
JsonCodable
可以让开发者开始体验和熟悉 Dart 宏。
JsonCodable
宏目前还不稳定,处于实验性阶段,仅适用于 Dart3.5.0-152
或更高版本,更多可见:https://dart.dev/go/json-codable
Dart 3.4 还包含了其他一些改进,例如:
dart:js_interop
参考原文:https://medium.com/dartlang/dart-3-4-bd8d23b4462a
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。