0%

【文章翻譯】An update on Dart macros & data serialization

【文章內容使用 Gemini 1.5 Pro 自動翻譯產生】

關於 Dart 巨集和資料序列化更新

在過去幾年中,我們投入了大量的時間和資源來構建巨集的原型。遺憾的是,每次我們解決一個主要的技術障礙時,都會出現新的障礙。目前,我們認為巨集在短期內無法達到我們可以安心發佈的功能水準,並且達到我們期望的品質和開發時間效能。

在考慮了機會成本之後,特別是我們可以向社群提供的其他功能,我們做出了艱難的決定,停止巨集的開發工作。

背景

我們相信 Dart 提供了獨特的優勢組合:(1) 預先編譯和靜態語言的典型效能,以及 (2) 動態語言的快速開發週期(例如,狀態熱重載)。隨著 Dart 的發展,我們一直謹慎地評估語言的變更是否符合這兩個標準。

在這種情況下,基於豐富內省功能的強大元程式設計一直是一個挑戰。運行時內省(例如,反射)使得執行樹搖優化變得困難,而樹搖優化可以讓我們產生更小的二進位檔案。靜態內省(例如,巨集)可以採用幾種形式。大多數語言採用語法方法,對程式的語法進行有限的靜態反射。我們認為這不足以實現我們的目標。相反,我們的目標是構建一個巨集系統,支援在編譯時對程式進行深度語義內省。遺憾的是,語義內省會帶來大量的編譯時間成本,這使得狀態熱重載難以保持狀態。

我們的結論是,我們離以我們要求的開發時間效能發佈巨集還差得很遠。我們目前的實作會降低編輯(例如,靜態分析和程式碼完成)和增量編譯(熱重載的第一步)的效能。我們不確定我們是否能在合理的時間範圍內充分解決這些問題。

展望未來

我們已決定專注於我們更有信心發佈的其他功能。

我們將投入的一個領域是在 Dart 中更好地支援資料。這是 Dart 和 Flutter 問題追蹤器中請求最多的問題。事實上,我們開發巨集的主要動機是提供更好的資料處理、序列化和反序列化。我們仍然會追求更好的資料處理方式,但我們打算使用更專門的語言功能來做到這一點。

我們將投入的另一個領域是改進構建時間和整體程式碼生成體驗。我們已經確定了 build_runner 的改進。我們還計劃發佈擴充,這是我們作為巨集的一部分構建的原型功能。我們相信這個語言功能可以獨立存在,並且會改進現有的程式碼生成。我們仍然打算單獨發佈這個功能

我們理解這個消息會讓你們中的許多人感到失望。從長遠來看,我們仍然有興趣探索通用的元程式設計,因為它除了資料之外還有許多潛在的用例。儘管如此,我們也要向我們的社群明確表示,在可預見的未來,我們不會發佈巨集。

我們要感謝所有嘗試巨集、提供回饋以及透過 PR 直接貢獻的人。這些投入和精力將有助於我們接下來的工作。我們對今年可以提供的改進感到興奮。


Dart 巨集和資料序列化更新 最初發佈在 Medium 的 Dart 上,人們在那裡透過突出顯示和回應這個故事來繼續討論。