【文章內容使用 Gemini 2.0 自動翻譯產生】
宣佈 Dart 3.4
Dart 3.4 於今天發佈!此版本展示了 Dart 和 Flutter 在 Flutter 3.22 / Dart 3.4 / IO24 文章中的共同努力,因此請務必在那裡獲得完整資訊。這篇文章介紹了我們對 WebAssembly 的支援,然後詳細介紹了今年 Dart 語言的主要路線圖項目之一:巨集。
WebAssembly 更新
今天,我們很高興地宣布,隨著最新的 Flutter 3.22 穩定版發佈,Flutter Web 應用程式 現已完全支援 WebAssembly (Wasm)!
這是 Dart 和 Flutter 多年來的投資。如果您一直在關注這些發展,您已經看到了我們的逐步發展:
我們將繼續投資 WebAssembly。我們的下一步工作將是在純 Dart 應用程式中啟用對 Wasm 的全面支援,並完成一些缺失的功能(例如延遲載入)。Dart 中 Wasm 編譯的端到端工具仍在開發中,但您現在可以透過一些臨時步驟在穩定版中 試用預覽版。之後,我們還希望在 JS 環境之外的 Dart 中支援 Wasm(例如 wasmtime 和 wasmer 等標準 Wasm runtime),如 dart-lang/sdk/issues/53884 中所述。
Dart 巨集:提升開發抽象層級
我們投入了多年時間來設計 Dart 巨集系統。為了改善 Dart 的開發體驗,巨集提供了一個元程式設計解決方案,例如程式碼產生。此解決方案內建於 Dart 語言中,可為開發人員提供最大的效能、效率和生產力。現在,我們準備好提供此體驗的預覽版!
長期以來,Dart 開發人員的一個痛點是序列化和反序列化 JSON 資料的瑣碎但繁瑣的模式。製作一個可重複使用、功能足夠強大的解決方案在 Dart 中是一項挑戰,因為由於效能原因,它不支援 runtime reflection。作為替代方案,我們一直依賴於程式碼產生解決方案,例如 JsonSerializable。這些解決方案依賴於在程式碼本身之前運行的外部工具,使開發人員體驗變得複雜。
今天,我們宣布推出一個全新的 JSON 序列化和反序列化方法的預覽版:JsonCodable 巨集。
巨集是一種程式碼,它透過在編譯時檢視其他程式碼來產生更多程式碼。例如,以下是一個應用新 JsonCodable 巨集的 Dart 類別 Vehicle
:
1 | () |
那麼,它是如何工作的呢?toJson()
方法(以及配套的 fromJson()
建構函式)從哪裡來的?這是我們新的巨集系統的實驗性實作,旨在簡化開發人員體驗。當 Dart 編譯器看到 @JsonCodable()
注釋時,它會立即找到 JsonCodable 巨集的定義並開始執行它。這會導致巨集:
- 建立一個新的“擴充類別”;這是一種新的語言結構,可以將新的宣告加入到現有的類別中。
- 讀取開發人員對
Vehicle
類別的定義,以確定它有兩個欄位:description
和wheels
。 - 將新的
toJson
方法簽章加入到擴充類別中。 - 填寫
toJson
方法的主體,以處理description
和wheels
欄位的序列化。
所有這些都立即發生。整合的體驗支援我們現有的開發人員工作流程,例如熱重新載入,如下面的螢幕錄影所示:
長期巨集目標
最終目標是讓社群能夠建立自己的巨集。這提高了 Dart 程式設計的抽象層級。以資料類別為例,這是 得票最高 的 Dart 語言功能。我們研究了在 Dart 中加入對資料類別的內建支援,但了解到對於這樣的結構應該支援什麼以設定我們自己的標準,意見差異很大。欄位應該是不可變的嗎?它應該支援 equals 嗎?hashCode 呢?也許還有 toString?我們的結論是,支援巨集系統將是更好的方法。社群可以建立自己的抽象類型,允許更多可擴展的實驗和多樣性。
設計和實作這樣一個強大的巨集系統是一項艱鉅的任務。我們決定以一種不會對核心 Dart 開發人員使用案例(例如程式碼輔助和完成、程式碼分析和熱重新載入)產生負面效能影響的方式來完成它。考慮到這一點,我們正在採取分階段的方法:
- 在今天的版本中,我們將提供單個巨集 JsonCodable 的預覽版,以便使用者可以開始熟悉使用巨集的開發人員體驗。
- 如果此巨集的推出順利,那麼我們希望在以後的版本中將 JSON 巨集升級到穩定版。
- 同時,我們正在努力完成底層巨集系統的設計和實作。一旦我們對其效能和穩定性充滿信心,最終目標將是讓 Dart 開發人員社群能夠定義自己的巨集。
完成這些階段還有很多工作要做。同時,您可以閱讀文件以進一步了解 Dart 巨集系統,並立即試用 JsonCodable 巨集 的預覽版。
其他改進
與往常一樣,此版本包含所有持續的開發,這些開發旨在提供最佳版本的 Dart。在此版本中,我們進行了以下改進:
- 解決了超過 50% 的分析器程式碼完成錯誤。(請繼續提交 錯誤報告!)
- 改進了條件表達式、if-null 表達式和 switch 表達式的類型分析與語言規範的一致性(變更日誌)。
- 從
dart:cli
函式庫中移除了不完整且不一致的工具,以償還 Dart VM 中的技術債務。 - 解決了一些不足之處,以改進新的
dart:js_interop
函式庫。
查看完整的 變更日誌!別忘了閱讀此版本的 Dart 和 Flutter 聯合部落格文章,以了解我們共同努力的完整故事!
宣佈 Dart 3.4 最初發佈於 Medium 上的 Dart,人們在那裡透過醒目顯示和回應這個故事來繼續討論。