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