【文章內容使用 Gemini 1.5 Pro 自動翻譯產生】
宣布 Dart 2.8:更快的套件工具,新的工具確保相依性永不過時
今天,我們宣布推出 Dart SDK 的新版本 2.8。我們持續看到 Dart 社群的驚人成長;現在我們有 數百萬 Flutter 開發人員 使用 Dart 作為他們客戶端優化的語言,在任何平台上構建快速的應用程式。雖然我們仍在努力完成 即將推出的空安全 功能,使 Dart 成為構建快速且穩定的使用者介面的更優化語言,但我們也有一些令人興奮的新功能,專注於讓開發人員在管理相依性時更有效率。
Dart 平台透過 pub 客戶端工具 和 pub.dev 套件儲存庫提供內建的套件管理支援,該儲存庫在過去一年中成長了 200%,現在擁有近 10,000 個套件。作為我們持續改進 Dart 生態系統工作的一部分,Dart 2.8 SDK 為 pub 客戶端工具帶來了兩項改進:pub get
的效能大幅提升,以及一個確保您的套件相依性保持最新的新工具。
Dart 2.8 也在 Dart 語言和函式庫中帶來了一系列小的重大變更。這些變更為我們第一個版本的空安全功能奠定了基礎。
為空安全鋪路的重大變更
應用程式崩潰的常見原因是嘗試使用恰好為空的變數的程式碼。Tony Hoare 先生於 1965 年在 ALGOL 程式語言中引入了空引用,並在 2009 年的 QCon 演講 中將其稱為他的「十億美元錯誤」。在某些情況下,空值很有用;挑戰在於將這些情況與無用的情況區分開來。在過去的一年中,我們一直忙於在 Dart 中構建對 健全空安全 的支援。這種支援將擴展類型系統以表達始終非空的變數,但此外,類型系統將是完全健全的:Dart 編譯器和執行時將能夠信任這些類型,並且當類型系統保證變數不為空時,能夠產生優化的程式碼。
您可以想像,這是一項龐大的工作,涉及許多活動部件。為了確保我們可以使用清晰的語義構建空安全,我們決定在 Dart 語言和函式庫中進行一些小的重大變更。這些重大變更對 Dart 類型系統的邊緣情況和一些 Dart 核心函式庫進行了細微調整,以確保與可空性相關的優異可用性和效能。我們預計這些重大變更的實際影響(已在 Dart 公告列表上 預先宣布)對於常規應用程式程式碼來說是最小的。如果您在使用 Dart 2.8 時遇到任何問題,我們建議您查看 重大變更 及其描述和緩解步驟。如果這沒有解決問題,請在我們的 問題追蹤器 中提交問題。要預覽空安全體驗,請嘗試 空安全遊樂場。
更高質量的套件生態系統
pub 套件管理器和 pub.dev 網站為 Dart 和 Flutter 提供了不斷發展的生態系統。pub.dev 上提供了近 10,000 個套件,我們不斷對正在分享的許多有趣的套件感到驚訝。我們的核心任務是幫助套件作者建立高質量的套件,並幫助應用程式開發人員找到這些套件——例如,我們加入了 改進的 pub.dev 發現、驗證的發布者 和 Flutter Favorites。
今天,我們宣布從 pub.dev 儲存庫中检索套件的速度大幅提升,並推出一款新工具,幫助您保持所有套件相依性更新。隨著現代應用程式的複雜性,您的應用程式可能依賴於數十個套件。但是,您如何保持所有套件更新到最新版本,以確保您獲得最新的相依性以及所有可用的錯誤修復和效能改進?從 Dart 2.8 開始,您可以使用 pub outdated
,這是一個新的工具,用於自動確定哪些相依性需要更新到最新和最好的版本。
Dart 2.8 pub 工具效能改進
我們透過在運行 pub get
時加入對並行擷取套件的支援,以及延遲 pub run
預編譯,優化了 pub 工具的效能。
在對使用 flutter create
建立的新專案運行 flutter pub get
的非正式基準測試中,總執行時間從 Flutter 1.12(使用 Dart 2.7)的大約 6.5 秒減少到 Flutter 1.17(Dart 2.8)的僅 2.5 秒。在像 Flutter gallery 這樣的大型應用程式中,時間從大約 15 秒減少到大約 3 秒!
使用 pub outdated 管理相依性
Dart 程式碼中的相依性會記錄在 pubspec 檔案中。當您透過運行 pub get
命令從 pub.dev 擷取套件時,pub 版本解算器(使用 PubGrub 演算法)會運行一個程序,以確定所有相依性的最新可能版本集,以滿足 pubspec 中列出的約束。請注意,pub 使用單版本方案,其中每個套件都包含在應用程式中單一版本中;這是一項重要的優化,可確保您的應用程式大小盡可能小。
始終使用最新的穩定套件版本是 最佳實務,但這樣做可能很費力。Dart 支援使用 pub upgrade 升級到 語義相容 的最新版本,但您不能在不更新 pubspec 的情況下包含套件的新主要版本。pub outdated
命令透過比較目前使用的版本與 pub.dev 上可用的最新版本,幫助您了解何時有次要版本和主要版本可用。
讓我們考慮一個具體的例子。想像您正在構建一個應用程式,其 pubspec.yaml 包含以下內容:
1 | dependencies: |
您運行 pub get
,該工具會建立一個 pubspec.lock 檔案,其中包含以下版本:
1 | packages: |
幾個月過去了,pub.dev 現在有了 foo (1.3.1) 和 bar (2.1.0 和 3.0.3) 的新版本。您如何發現這些新版本可用?對於次要版本升級(foo 1.4.0 和 bar 2.1.0),您可以運行 pub upgrade
,但这不會讓您獲得 bar 3.0.0。要發現新版本,您必須訪問 pub.dev 上的每個套件,並查看其最新版本。或者,您可以使用社群解決方案,例如 Paulina Szklarska 的 版本檢查器 或 Jeroen Meijer 的 pubspec assist。
有了 pub outdated
,Dart SDK 現在支援版本發現。如果您使用的是支援 Dart 或 Flutter 的 IDE,請在 pubspec.yaml 檔案打開時使用顯示的 Pub outdated 動作。或者,您可以從終端機運行 pub outdated
(或 flutter pub outdated
):
1 | $ pub outdated |
1 | Dependencies Current Upgradable Resolvable Latest |
此輸出告訴我們,我們可以使用 pub upgrade
自動升級到 foo 1.3.1,這將使我們獲得 foo 的最新可用版本。但它也告訴我們,雖然我們可以自動升級到 bar 2.1.0,但 3.0.3 版本可用。因為升級到 bar 3.0.3 是一個主要版本升級,所以我們需要透過編輯 pubspec.yaml 檔案來選擇加入該升級:
1 | dependencies: |
在我们进行编辑并运行 pub upgrade
之后,pub outdated
現在报告所有相依性都是最新的:
1 | $ pub outdated |
1 | Dependencies Current Upgradable Resolvable Latest |
成功,我們是最新的!因為我們剛剛選擇了新版本,包括一個新的主要版本,我們應該審查這些版本中任何潛在的重大變更,並運行所有測試以確保我們的應用程式仍然按預期工作。
後續步驟
效能改進、重大變更 和新的 pub outdated
命令現已在穩定的 Dart 2.8 SDK 和穩定的 Flutter 1.17 SDK 中提供。我們建議您 立即運行 pub outdated,以查看您的相依性的健康狀況!
如果您發現任何問題,請在 pub 問題追蹤器 中報告,或在 SDK 問題追蹤器 中報告一般問題。我們很樂意聽到您使用 pub outdated
的經驗。在下方留言或向 @dart_lang 發送推文。
宣布 Dart 2.8 最初發佈於 Medium 的 Dart ,人們在那裡透過醒目顯示和回應這個故事來繼續對話。