提供 Dart 2.15 程式語言和 Flutter 2.8 框架

Google 發布了 Dart 2.15 程式語言,該語言繼續開發徹底重新設計的 Dart 2 分支,它與 Dart 語言原始版本的不同之處在於使用強靜態類型(類型可以自動推斷,因此指定類型不是必需的,但不再使用動態類型,並且最初計算類型時將其分配給變量,隨後應用嚴格的類型檢查)。

Dart語言的特點:

  • 熟悉且易於學習的語法,對於 JavaScript、C 和 Java 程式設計師來說很自然。
  • 確保所有現代 Web 瀏覽器和各種類型的環境(從可攜式裝置到功能強大的伺服器)的快速啟動和高效能。
  • 能夠定義允許封裝和重複使用現有方法和資料的類別和介面。
  • 指定類型可以更輕鬆地偵錯和識別錯誤,使程式碼更清晰、更具可讀性,並簡化第三方開發人員的修改和分析。
  • 支援的類型包括:各種類型的雜湊、陣列和清單、佇列、數字和字串類型、用於確定日期和時間的類型、正規表示式(RegExp)。 可以建立您自己的類型。
  • 為了組織並行執行,建議使用具有isolate屬性的類,其程式碼完全在單獨的記憶體區域的隔離空間中執行,透過發送訊息與主進程互動。
  • 支援使用可簡化大型 Web 專案的支援和偵錯的程式庫。 函數的第三方實作可以以共享庫的形式包含在內。 應用程式可以分為多個部分,並將每個部分的開發委託給單獨的程式設計師團隊。
  • 一組支援 Dart 語言開發的現成工具,包括動態開發和偵錯工具的實現,以及動態程式碼修正(「編輯並繼續」)。
  • 為了簡化 Dart 語言的開發,它附帶了 SDK、一個套件管理器 pub、一個靜態程式碼分析器 dart_analyzer、一組函式庫、一個整合開發環境 DartPad 以及支援 Dart 的 IntelliJ IDEA、WebStorm、Emacs、Sublime Text 插件2和維姆。
  • 帶有庫和實用程式的其他軟體包透過 pub 儲存庫分發,該儲存庫包含約 22 個軟體包。

Dart 2.15 版本的主要變更:

  • 提供用於快速並行執行任務並隔離處理程序的工具。 在多核心系統上,Dart 運行時預設在一個 CPU 核心上執行應用程式程式碼,並使用其他核心來執行系統任務,例如非同步 I/O、寫入檔案或進行網路呼叫。 對於需要並行執行處理程序的應用程序,例如,在介面中渲染動畫,可以啟動單獨的程式碼區塊(隔離),彼此隔離並與主應用程式執行緒同時在其他 CPU 核心上執行。 為了防止同時執行處理同一組資料的程式碼時發生錯誤,禁止在不同隔離區塊中共用可變對象,並使用訊息傳遞模型進行處理程序之間的互動。

    Dart 2.15 引入了一個新概念——隔離區塊組(isolate groups),它允許您在屬於同一組的隔離區塊中組織對各種內部資料結構的共享訪問,這可以顯著減少群組中處理程序之間互動時的開銷。 例如,由於無需初始化程式資料結構,因此與啟動單獨的隔離區塊相比,在現有群組中啟動附加隔離區塊的速度快 100 倍,所需記憶體也少 10-100 倍。

    儘管群組中的隔離區塊仍然禁止對可變物件的共享訪問,但群組使用共享堆內存,這可以顯著加快物件從一個區塊到另一個區塊的傳輸速度,而無需執行資源密集型複製操作。 新版本還允許您在呼叫 Isolate.exit() 時傳遞處理程序的結果,以將資料傳輸到父隔離區塊,而無需複製操作。 此外,訊息傳輸機制也得到了優化——中小型訊息的處理速度現在提高了約 8 倍。 可以使用 SendPort.send() 呼叫在隔離之間傳遞的物件包括某些類型的函數、閉包和堆疊追蹤。

  • 在用於建立指向其他物件中各個函數的指標(tear-off)的工具中,刪除了在建構函式程式碼中建立類似指標的限制,這在基於 Flutter 庫建置介面時非常有用。 例如,要建立包含多個Text 小部件的Column 小部件,您可以呼叫「.map()」並將指標傳遞給Text 物件的Text.new 建構子: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context ) { return Column(children: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • 與函數指標的使用相關的可能性已擴展。 新增了使用泛型方法和函數指標建立非泛型方法和指標的功能:T id (T值)=>值; var intId = id ; // 2.15 版本允許取代“int Function(int) intId = id;” 常數 fo = id; // 指向函數 id 的指標。 常數 c1 = fo ;
  • dart:core 庫改進了對枚舉的支持,例如,您現在可以使用“.name”方法從每個枚舉值輸出字串值、按名稱選擇值或匹配值對: enum MyEnum { one , 二,三} void main() { print(MyEnum.one.name); // 將會列印「一」。 print(MyEnum.values.byName('two') == MyEnum.two); // 將列印“true”。 最終映射 = MyEnum.values.asNameMap(); print(map['三'] == MyEnum.三); // “真的”。 }
  • 已實現指標壓縮技術,如果 64 位元位址空間足以進行尋址(使用不超過 32 GB 的記憶體),則允許在 4 位元環境中使用更緊湊的指標表示形式。 測試表明,這種優化可以將堆大小減少約 10%。 在Flutter SDK中,新模式已經預設為Android啟用,並計劃在未來版本中啟用iOS。
  • Dart SDK 包含用於調試和效能分析的工具 (DevTools),這些工具以前是在單獨的套件中提供的。
  • 「dart pub」指令和 pub.dev 軟體包儲存庫中新增了工具,用於追蹤機密資訊的意外發布,例如,在軟體包內留下持續整合系統和雲端環境的憑證。 如果偵測到此類洩漏,「dart pubpublish」指令的執行將會中斷並顯示錯誤訊息。 如果出現誤報,則可以透過白名單繞過檢查。
  • pub.dev 儲存庫中新增了撤銷已發佈的軟體包版本的功能,例如,如果發現危險的錯誤或漏洞。 以前,對於此類更正,做法是發布更正版本,但在某些情況下,有必要取消現有版本並緊急停止其進一步分發(例如,如果更正尚未準備好或完整版本已發布)錯誤發布而不是測試版本)。 撤銷後,該軟體包不再在「pub get」和「pub Upgrade」命令中被識別,並且在已安裝了該軟體包的系統上,下次執行「pub get」時會發出特殊警告。
  • 新增了針對更改顯示順序的程式碼中使用 unicode 字元而導致的漏洞 (CVE-2021-22567) 的保護。
  • 修正了一個漏洞 (CVE-2021-22568),該漏洞允許您在將套件發佈到接受 pub.dev oauth2 存取權杖的第三方伺服器時模擬另一個 pub.dev 用戶。 例如,該漏洞可用於攻擊內部和公司軟體包伺服器。 僅在 pub.dev 上託管軟體包的開發人員不受此問題的影響。

同時,發布了使用者介面框架 Flutter 2.8 的重要版本,該框架被認為是 React Native 的替代方案,允許基於一個程式碼庫發布適用於 iOS、Android、Windows、macOS 和 Linux 的應用程式平台,以及創建在瀏覽器中運行的應用程式。 Google 開發的 Fuchsia 微核心作業系統的客製化 shell 是在 Flutter 的基礎上建構的。 值得注意的是,過去六個月,Google Play Store 中 Flutter 2 應用程式的數量從 200 萬增加到 375 萬,即幾乎兩次。

Flutter程式碼的主要部分是用Dart語言實作的,執行應用程式的執行時間引擎是用C++寫的。 開發應用程式時,除了使用Flutter原生的Dart語言之外,還可以使用DartForeignFunction介面來呼叫C/C++程式碼。 透過將應用程式編譯為目標平台的本機程式碼,可以實現高執行效能。 在這種情況下,程式不需要在每次變更後重新編譯 - Dart 提供了熱重載模式,讓您可以對正在執行的應用程式進行變更並立即評估結果。

Flutter新版本的變化中,值得注意的是行動裝置上的啟動速度和記憶體消耗的最佳化。 將應用程式連接到 Firebase 和 Google Cloud 等後端服務變得更加容易。 與 Google Ads 整合的工具已經穩定。 對相機和網路插件的支援得到了顯著改善。 人們提出了新的工具來簡化開發,例如,添加了一個小部件以使用 Firebase 進行身份驗證。 專為使用 Flutter 開發 2D 遊戲而設計的 Flame 引擎已更新。

來源: opennet.ru

添加評論