“ Dart 3.3 发布:扩展类型、JavaScript Interop 等 ”
Dart 3.3 现已发布,公告称此版本改变了性能和跨平台开发的游戏规则。
增强的扩展类型Extension Types将彻底改变性能优化以及用户与本地代码的交互方式。JavaScript interop 模型也得到了改进,引入了强大的类型安全性和开发人员友好的方式来利用 Web 平台的强大功能。“所有这些都为WebAssembly支持铺平了道路”。此外,新版本还增加了 Google AI 功能。
扩展类型
扩展类型引入了类型的零成本 wrappers,使用它们可以优化对性能敏感的代码,尤其是在与 host平台交互时,扩展类型提供了具有特定成员自定义类型的便利性,同时消除了典型的 wrappers 分配开销。
extension type Wrapper(int i) {
void showValue() {
print('my value is $i');
}
}
void main() {
final wrapper = Wrapper(42);
wrapper.showValue(); // Prints 'my value is 42'
}
以上示例实现了一个Wrapper扩展类型,但将其用作普通的 Dart 类型,在实际使用里,开发者可以实例化它并调用函数。主要区别在于 Dart 将其编译为普通 Dartint类型,扩展类型允许创建具有唯一的成员类型,而无需分配典型 wrappers 类型的间接成本。因此,虽然extension members功能Dart 2.7 开始允许向现有类型添加函数和属性,但扩展类型功能也可以执行相同的操作,并且还允许定义隐藏底层表示的新 API。 这对于与 host平台的交互特别有用。可以直接使用 Native types,无需创建 wrappers和相关的间接成本,同时还能提供简洁的 Dart API。有关扩展类型的更多信息,可参阅新文档。
不断发展的 JavaScript Interop
Dart 3.3 引入了一种与 JavaScript 库和 Web 互操作的新模型。它从一组用于与 JavaScript 交互的新 API 开始dart:js_interop库。现在,Dart 开发人员可以访问typed API 来与 JavaScript 交互。该 API 通过静态强制明确定义了两种语言之间的边界。这在编译之前消除了一整类问题。除了用于访问 JavaScript 代码的新 API 之外,Dart 现在还包含一个新模型,用于使用扩展类型在 Dart 中表示 JavaScript 类型。
import 'dart:js_interop';
/// Represents the `console` browser API.
extension type MyConsole(JSObject _) implements JSObject {
external void log(JSAny? value);
external void debug(JSAny? value);
external void info(JSAny? value);
external void warn(JSAny? value);
}
基于 extension types 的语法比 extension members 允许更多的表达和健全性。这简化了 Dart 中 JavaScript API 的利用。了解更多信息,可参阅有关 JS interop 的新文档。
改进 browser libraries
从 1.0 版本开始,Dart SDK 就包含了一套全面的 browser libraries。其中包括核心dart:html库以及 SVG、WebGL 等库。 改进的 JavaScript interop 模型提供了重新构想这些库的机会。未来 browser libraries支持将集中在package:web上。这简化了版本控制、加速了更新并与MDN资源保持一致。 且这一系列的改进导将推动将 Dart 编译为WebAssembly。
开启 WebAssembly 的未来
Dart 3.3 为 WebAssembly 的 Web 应用奠定基础,虽然 Flutter Web 中的 WebAssembly 支持仍处于试验阶段,但团队正在努力稳定实现。 要使用 WebAssembly 在 Web 上运行 Flutter 应用,需要使用新的 JavaScript Interop 机制和package:web,旧版 JavaScript 和 browser libraries 保持不变,并支持编译为 JavaScript 代码。但是,编译为 WebAssembly 需要迁移。详情可查看迁移指南。
Google AI Dart SDK
谷歌发布了 Google AI Dart SDK 测试版。用户可以将生成式 AI 功能构建到 Dart 或 Flutter 应用程序中。这些应用程序使用了谷歌最新的 AI 模型系列 Gemini。可查看软件包google_generative_ai。
更多详情可查看官方博客。
推荐阅读
每日一言
""有股强烈的学习欲望,幸好我自制力强,压下去了。""