【文章內容使用 Gemini 1.5 Pro 自動產生】
Dart 3.3 來了,帶來效能和跨平台開發的重大變革!
Dart 3.3 已經推出,它將徹底改變效能和跨平台開發! 準備好使用 擴展類型 為您的應用程式增強能量,徹底改變效能優化,以及您與原生程式碼互動的方式。此外,我們改版後的 JavaScript 互操作 模型引入了強大的類型安全性,以及一種開發人員友好的方式來利用 Web 平台的強大功能。所有這些都為 WebAssembly 支援鋪平了道路。哦,還有 在您的 Dart 應用程式中使用 Google AI?當然可以!這一切都在 Dart 3.3 中。讓我們深入了解!
介紹擴展類型
擴展類型為類型引入了零成本封裝。使用它們來優化效能敏感的程式碼,特別是在與主機平台進行互操作時。擴展類型提供了自訂類型的便利性,這些自訂類型具有特定的成員,同時消除了典型的封裝分配開銷。
1 | extension type Wrapper(int i) { |
以上範例將 Wrapper 定義為擴展類型,但將其用於像一個簡單的 Dart 類型。您可以實例化它並呼叫函數。Dart 將其編譯為一個正常的 Dart int,這才是關鍵的差別。擴展類型允許您在不產生分配典型封裝類型的間接成本的情況下,建立一個具有獨特成員的類型。因此,雖然 擴展成員 功能(自 Dart 2.7 以來可用)允許您為現有類型新增函數和屬性,但擴展類型功能可以做同樣的事情,而且還可以 定義一個隱藏底層表示的新 API。
這對於與主機平台的互操作性特別有用。原生類型可以直接使用,而無需建立封裝器和相關的間接成本,同時仍然提供乾淨的生產 Dart API。在 新的擴展類型文件 中了解更多資訊。
改進 JavaScript 互操作
Dart 3.3 引入了一個新的模型,用於與 JavaScript 函式庫和 Web 進行互操作。它從一組與 JavaScript 互動的新 API 開始:dart:js_interop 函式庫。現在 Dart 開發人員可以使用類型化的 API 與 JavaScript 進行交互。此 API 清晰地定義了兩種語言之間的界限,並進行了靜態強制。這消除了 在 編譯時間之前的一整類問題。除了存取 JavaScript 程式碼的新 API 之外,Dart 現在還包括一個使用擴展類型在 Dart 中表示 JavaScript 類型的模型。
1 | import 'dart:js_interop'; |
基於擴展類型的語法允許比擴展成員更具表現力和健全性。這簡化了從 Dart 利用 JavaScript API。在 新的 JS 互操作文件 中了解更多資訊。
改進瀏覽器函式庫
自 1.0 版本以來,Dart SDK 已包含一組全面的瀏覽器函式庫。其中包括核心 dart:html 函式庫,以及用於 SVG、WebGL 和其他功能的函式庫。
改進的 JavaScript 互操作模型提供了重新構想這些函式庫的機會。展望未來,我們的瀏覽器函式庫支援將專注於 package:web。這簡化了版本控制,加速了更新,並與 MDN 資源保持一致。
這條改進鏈引導我們走向下一件大事:將 Dart 編譯為 WebAssembly。
立即開始,為 WebAssembly 的未來做好準備
有了 Dart 3.3,套件和應用程式作者可以為編譯為 WebAssembly 的 Web 應用程式奠定基礎。雖然 Flutter Web 中的 WebAssembly 支援仍然是實驗性的,但團隊正在努力穩定實作。若要使用 WebAssembly 在 Web 上運行 Flutter 應用程式,您需要遷移所有程式碼——從應用程式和所有相依項——以使用新的 JavaScript 互操作機制和 package:web。傳統的 JavaScript 和瀏覽器函式庫保持不變,並支援編譯為 JavaScript 程式碼。但是,編譯為 WebAssembly 需要遷移。
我們創建了一個 遷移指南 來幫助作者開始包含 Wasm。我們希望在將其納入穩定版本時,最受歡迎的套件都支援 Wasm。
另外一件事:介紹 Google AI Dart SDK
Google 已將 Google AI Dart SDK 發佈到測試版。您可以將生成式 AI 功能構建到您的 Dart 或 Flutter 應用程式中。這些應用程式使用 Gemini,這是 Google 最新一代的 AI 模型。查看 package:google_generative_ai。在 這篇部落格文章 中了解如何使用 Google AI Dart SDK 進行構建,或者直接跳到 快速入門。
Dart 3.3 的新功能:擴展類型、JavaScript 互操作等等 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。
undefined