Dart 3.3 发布:扩展类型、JavaScript Interop 等

来源: OSCHINA
2024-02-20 14:47:00

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

更多详情可查看官方博客

展开阅读全文
点击引领话题📣 发布并加入讨论🔥
0 评论
2 收藏
分享
返回顶部
顶部