Flutter 的下一步苗傅, Dart 3 重大變更即將在 2023 到來

在過去的四年里 Dart 已經(jīng)發(fā)展成為一門高效谣蠢、可移植的現(xiàn)代化語言,而下一個(gè)版本 Dart 3 將達(dá)到可靠的 null 安全語言的最后一步垢乙。

作為 null safety 的最后一步锨咙,本次將刪除幾個(gè)歷史 Dart 和 SDK artifacts,包括刪除對(duì) running without sound null safety 的支持追逮。

如今許多現(xiàn)代編程語言都支持 null safety 酪刀,比如 Swift、C# 和 Kotlin 等語言钮孵,可以在其中將變量聲明為非空永遠(yuǎn)不能保持空值)或可為(可以保存一個(gè)值或 null)的情況骂倘,這些類型系統(tǒng)會(huì)和靜態(tài)分析結(jié)合使用,以檢測將 null 賦值給不可為 null 的變量巴席。

同樣稠茂,Dart 語言中的 null 安全支持默認(rèn)情況下使變量不可為 null,并且僅在顯式聲明時(shí)才允許 null。

在 Dart 3 中睬关,所有 Dart 代碼都將使用健全的空安全

自從 Dart 2.12 引入空安全到現(xiàn)在已經(jīng)三年了诱担,在此期間開發(fā)者可以在沒有 null safety 的情況下運(yùn)行,也可以在具有部分 null safety 的混合模式下運(yùn)行电爹,也可以在具有完全健全的 null safety 的情況下運(yùn)行蔫仙。

當(dāng) 100% 的代碼(包括所有依賴項(xiàng))已遷移到 null safety 時(shí),就會(huì)出現(xiàn)完全可靠的空安全支持丐箩,在此期間 Dart 開發(fā)人員有時(shí)間一步一步地遷移現(xiàn)有代碼摇邦,但是支持多種模式會(huì)增加開銷和復(fù)雜性。

首先屎勘,Dart 開發(fā)人員需要了解以上三種模式施籍,每當(dāng)閱讀一段 Dart 代碼時(shí),就必須檢查語言版本以查看類型是否默認(rèn)為非空概漱、默認(rèn)可為空或它們的某種組合丑慎。

其次,在我們的編譯器和運(yùn)行時(shí)支持所有三種模式會(huì)減慢 Dart SDK 的發(fā)展速度瓤摧,這種支持增加了添加新功能的成本和復(fù)雜性竿裂。

從在 Dart 3 開始,正如之前 2.18 里提前宣布的那樣照弥,sound null safety 將是唯一受支持的模式腻异,**小于 2.12 的 SDK 約束的 Pubspec 文件將在 Dart 3 及更高版本中停止解析。

當(dāng)開發(fā)者將依賴約束設(shè)置為小于 2.12(例如// @dart=2.9)時(shí)这揣,任何包含語言標(biāo)記的源代碼都將失效悔常。

根據(jù)目前的觀測,我們相信此時(shí)大約 85% 的 flutter run 執(zhí)行都使用了空安全给赞,如果你還在剩余的 15% 中这嚣,那請?jiān)?Dart 3 發(fā)布之前遷移,預(yù)計(jì)在 2023 年年中左右塞俱。

Breaking 和 API 更改

除了 null 安全更改之外姐帚,Dart 3 還進(jìn)行了一些其他更改,以刪除 Dart 和核心庫 API 中的一些歷史 artifacts障涯,這些更改包括:

  • 刪除已停用的核心庫 API ( #49529 )
  • 刪除默認(rèn)參數(shù)值的歷史語法 ( #2357 )
  • 要求明確的 tear-offs ( ##2399 )罐旗。

這些更改對(duì)遷移到使用 null 安全的代碼的影響很小,當(dāng)?shù)谝粋€(gè) Dart 3 alpha 版本發(fā)布時(shí)唯蝶,開發(fā)者可以快速測試這些較小的 Breaking九秀。

Dart 3 的新特性和功能

Dart 3 也有望包含許多新功能,包括改進(jìn)與其他編程語言的交互能力和新的語言特性粘我, 這部分內(nèi)容將在2023 年 1 月 25 日的 Flutter Forward 中詳細(xì)討論鼓蜒。

例如有被稱為 patterns 的語言特性痹换,patterns 讓 Dart 語言更具表現(xiàn)力,增加了對(duì)更多結(jié)構(gòu)化數(shù)據(jù)的支持都弹,并使用代數(shù)數(shù)據(jù)類型實(shí)現(xiàn)了更實(shí)用的風(fēng)格网杆。

以下代碼顯示了在一個(gè)函數(shù)上使用多個(gè)返回值的示例渐溶,以及將這些返回值解構(gòu)為單個(gè)變量的能力:

// A function which returns a record -- in this case a pair of two doubles:
(double x, double y) getLocation(String name) {
 if (name == 'Aarhus') {
   return (56.1629, 10.2039);
} else {
  ...
}
}

// Deconstructing the returned record back into individual variables:
void main(List<String> arguments) {
 final (lat, long) = getLocation('Aarhus');
 print('Current location: $lat, $long');
}

// You can also define a hierarchy of classes, and then pattern match on those:
sealed class Shape {
 double calculateArea();
}

class Square implements Shape {
 final double length;
 Square(this.length);
 double calculateArea() => length * length;
}

class Circle implements Shape {
 final double radius;
...
}

double calculateArea(Shape shape) => switch (shape) {
 Square(length: var l) => l * l,
 Circle(radius: var r) => math.pi * r * r
};

Beyond Dart 3

目前除了 Dart 3 還有大量并行的潛在的新功能在處理厂汗,首先元莫,正如去年提到的, Dart 團(tuán)隊(duì)正在努力支持將 Dart 代碼編譯為 WebAssembly ( Wasm )框杜,Wasm 能讓 Flutter Web 在瀏覽器中作為完整的原生代碼運(yùn)行浦楣。

這是一項(xiàng)艱巨的任務(wù),除了更新 Dart 編譯器之外還需要很多額外的工作咪辱。它需要與 W3C 和瀏覽器供應(yīng)商合作振劳,通過 WasmGC 擴(kuò)展在 Wasm 中添加對(duì)垃圾收集語言的支持。

其次 Dart 團(tuán)隊(duì)正在研究 macros 啟用靜態(tài)元編程油狂,這種強(qiáng)大的機(jī)制允許一段代碼(宏)在程序編譯期間修改和擴(kuò)展程序的源代碼历恐,例如可以減少反序列化 JSON 或創(chuàng)建數(shù)據(jù)類所需的樣板文件

Dart 3 發(fā)布路線

接下來选调,Dart 3 將在一系列里程碑中陸續(xù)推出夹供,目前的期望圍繞這些日期

  • 2023 年 1 月/2 月左右:Dart 3 alpha 發(fā)布灵份,它將專注于啟用早期的 Dart 3 兼容性測試仁堪,目標(biāo)是讓大家能夠運(yùn)行靜態(tài)分析 ( dart analyze/ flutter analyze),理論上通過 Dart 3 alpha 靜態(tài)分析的應(yīng)用或包都可以支持 Dart 3 穩(wěn)定版填渠。
  • 2023 年 3 月/4 月左右:Dart 3 測試版發(fā)布弦聂,此版本預(yù)覽了 Dart 3 中的新功能,開發(fā)者可以使用它來試驗(yàn)新功能并就問題或改進(jìn)建議提供反饋氛什。
  • 2023 年年中左右:Dart 3 穩(wěn)定版發(fā)布莺葫,健全的空安全將成為唯一支持的模式。

總結(jié)

Dart 3 版本計(jì)劃于 2023 年年中左右發(fā)布枪眉,它將包含幾項(xiàng)重大更改捺檬,其中主要是在沒有健全的空安全的情況下你的代碼將停止運(yùn)行,計(jì)劃在 2023 年 1 月或 2 月左右準(zhǔn)備好 Dart 3 alpha 版本贸铜,可以將其用于 Dart 3 兼容性測試堡纬。

在此期間你可以準(zhǔn)備:

  • 完成任何未完成的空安全遷移
  • 驗(yàn)證代碼未使用任何已棄用的 API
  • 運(yùn)行 dart fix

Dart 3 還將包含幾個(gè)新的強(qiáng)大功能蒿秦,例如 patterns 烤镐,計(jì)劃是希望在春季發(fā)布 Dart 3 beta 版,展示所有新功能棍鳖,敬請期待~

作者:戀貓de小郭
鏈接:https://juejin.cn/post/7174985128799076389

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炮叶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌镜悉,老刑警劉巖祟辟,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異积瞒,居然都是意外死亡川尖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門茫孔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叮喳,“玉大人,你說我怎么就攤上這事缰贝♀晌颍” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵剩晴,是天一觀的道長锣咒。 經(jīng)常有香客問我,道長赞弥,這世上最難降的妖魔是什么毅整? 我笑而不...
    開封第一講書人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮绽左,結(jié)果婚禮上悼嫉,老公的妹妹穿的比我還像新娘。我一直安慰自己拼窥,他們只是感情好戏蔑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鲁纠,像睡著了一般总棵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上改含,一...
    開封第一講書人閱讀 50,043評(píng)論 1 291
  • 那天情龄,我揣著相機(jī)與錄音,去河邊找鬼捍壤。 笑死骤视,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的白群。 我是一名探鬼主播尚胞,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼帜慢!你這毒婦竟也來了笼裳?” 一聲冷哼從身側(cè)響起唯卖,我...
    開封第一講書人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躬柬,沒想到半個(gè)月后拜轨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡允青,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年橄碾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颠锉。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡法牲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出琼掠,到底是詐尸還是另有隱情拒垃,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布瓷蛙,位于F島的核電站悼瓮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏艰猬。R本人自食惡果不足惜横堡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冠桃。 院中可真熱鬧命贴,春花似錦、人聲如沸腊满。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碳蛋。三九已至,卻和暖如春省咨,著一層夾襖步出監(jiān)牢的瞬間肃弟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來泰國打工零蓉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笤受,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓敌蜂,卻偏偏與公主長得像箩兽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子章喉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容