整理丨诺亚
出品 | 51CTO技术栈(微信号:blog51cto)
众所周知,Dart语言的流行与其关联的Flutter框架密切相关。
于2011年推出的Dart,起初致力于成为一门结构化的Web编程语言,暗藏取代JavaScript的野心。结果却险些半道折戟,直到Flutter 的火爆才让 Dart 重新进入大众的视线。
Flutter是一个跨平台的UI开发框架,使用了Dart语言。Dart可以编译为针对Arm32、Arm64或x86_64的原生可执行文件,或者编译为JavaScript。同属于谷歌的Flutter和Dart,可以称得上是互相成就。
日前,Dart又有新动作,谷歌发布了Dart 3.3版本。此版本的发布标志着Dart语言在支持Flutter WebAssembly方面迈出了重要一步。
这次更新为开发人员提供了实验性的WebAssembly支持,使得开发者能够以更高效的方式将Dart编写的代码编译到WebAssembly标准,从而在浏览器环境中运行高性能的Flutter web应用。更值得注意的是,谷歌还发布了用于在Dart和Flutter应用中构建生成式AI功能的SDK。
1、新模式:加强与JS的互操作
在Dart 3.3中,谷歌引入了一种与JavaScript库进行互操作的新模式,这对于顺利过渡到使用WebAssembly至关重要。这意味着应用程序和包作者现在可以开始调整其代码结构,以便于未来与WebAssembly兼容。尽管当前Flutter对于WebAssembly的支持还处于试验阶段,但谷歌团队正积极致力于稳定和完善这一功能。
早在2023年3月于巴塞罗那举办的Wasm I/O大会上,Google Flutter和Dart产品经理Kevin Moore就表示,根据“非常有限的基准测试”,相较于编译为JavaScript,通过WebAssembly实现的性能提升可达1.5至3倍。
与微软的C#不同,Dart编译为WebAssembly时采用的是WasmGC,这是Wasm中针对垃圾收集语言的新标准API,但目前仅在基于Chromium的浏览器和Firefox中有效,而不支持Safari。
如今,Dart 3.3版本包含了迈向WebAssembly生产级使用的重大一步,其中包含一个全新的JavaScript互操作模型。“现在,Dart开发者能够访问一种用于与JavaScript交互的类型化API。”Moore在上周发布的文章中解释道。
尤其需要指出的是,在Dart 3.3中的扩展类型引入了针对类型的零成本包装器。新模型利用了一种被称为“在现有类型上以不同的、仅静态的接口进行‘包装’的编译时抽象”。
其优点在于,它们能够在无额外开销的情况下修改现有类型的接口,而不同于需要额外运行时对象的包装类,这使得扩展类型非常适合高效的JavaScript互操作。
图片
可以说,扩展类型不仅提供了自定义类型的便捷性,同时消除了包装器分配的开销。因此,谷歌指出,可以直接使用原生类型,无需创建包装器及其相关的间接调用开销,从而提升了性能表现。
2、新用意:为生成式AI铺路
使用这种新的JavaScript互操作模型是支持Wasm所必需的,但需要对旧代码进行迁移。为了使Flutter应用能够利用WebAssembly在Web平台上运行,开发者需要将所有相关的应用代码及其依赖项迁移到Dart中的新JavaScript互操作机制以及package:web提供的工具和技术上。
Dart团队表示:“如果您维护了一个使用dart:html或其他任何Dart SDK web库的公共Flutter包,应尽快迁移到package:web。长期来看,package:web将替代dart:html和其他web库作为Dart的Web互操作解决方案。”
在过渡期间,开发者可能会遇到一些阻力。为此,Dart团队发布了详细的迁移指南,以协助开发者适应这些变化并顺利启动基于WebAssembly的Flutter Web项目。
虽然Wasm支持主要针对Flutter,但并非完全如此。
团队在GitHub上指出:“尽管Wasm最初是为了在Web上运行原生代码而设计的,但此后Wasm已经发展成为一种跨多个平台运行编译代码的通用技术。”未来应用场景可能包括在服务器端代码中使用Wasm编译的Dart。
随着Dart 3.3的发布,谷歌还推出了AI Dart SDK,该SDK通过package:google_generative_ai调用谷歌的Gemini AI模型,使得开发者能够利用Gemini API在Dart或Flutter应用中构建生成式AI功能。
Flutter全球产品经理Ander Dobo表示,Dart支持即将添加到谷歌的AI Studio中。AI Dart SDK的引入表明,谷歌正利用其对开源Dart和Flutter项目的支持,引导开发者使用其AI服务。