整理丨諾亞
出品 | 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服務。