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 将其编译为普通 Dart int
类型,扩展类型允许创建具有唯一的成员类型,而无需分配典型 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。
更多详情可查看官方博客。