0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Dart 3.2 更新盤(pán)點(diǎn)

谷歌開(kāi)發(fā)者 ? 來(lái)源:未知 ? 2023-12-15 15:55 ? 次閱讀

作者 / Kevin Moore 和 Michael Thomsen

我們隆重宣布推出 Dart 3.2,這一版本針對(duì)以下方面做出了改進(jìn): 新增了一項(xiàng)語(yǔ)言功能,可對(duì)私有 final 字段進(jìn)行非空升級(jí);通過(guò)新增的互操作功能改善了開(kāi)發(fā)者體驗(yàn);支持 DevTools 的擴(kuò)展程序;并更新了我們的 Web 路線圖,包括提供對(duì) Wasm (又名 WebAssembly) 的支持。


私有 final 字段的非空升級(jí)


自我們?cè)?Dart 2.12 中引入健全的空安全 (sound null safety) 以來(lái)已過(guò)去幾年時(shí)間。您可以借助空安全聲明哪些類(lèi)型可為空 (可以包含值或 null),哪些類(lèi)型不可為空 (始終包含值)。通過(guò)將空安全與流程分析相結(jié)合,能夠檢測(cè)何時(shí)可以將可為空的變量 "升級(jí)" 為更安全的非空類(lèi)型:

  • 健全的空安全 (sound null safety)
    https://medium.com/dartlang/announcing-dart-2-12-499a6e689c87
  • 流程分析
    https://dart.cn/null-safety/understanding-null-safety#flow-analysis

int definitelyInt(int? aNullableInt) {
if (aNullableInt == null) {
return 0;
}
// If flow analysis reaches this point,
// aNullableInt can safely promote to a non-null int.
return aNullableInt;
}

自 Dart 2.12 發(fā)布以來(lái),類(lèi)型升級(jí)一直是空安全的核心部分,但僅限于局部變量。字段或頂級(jí)變量無(wú)法升級(jí),例如以下代碼示例:
class Container {
final int? _fillLevel;
Container(this._fillLevel);
check() {
if (_fillLevel != null) {
int i = _fillLevel; // Prior to Dart 3.2, causes an error.
}
}
}

這種局限性由多種復(fù)雜的情況導(dǎo)致。在這些情況中,流程分析無(wú)法安全地確定字段何時(shí)或如何變化。以類(lèi)上的字段升級(jí)為例,如果子類(lèi)使用 getter 覆蓋字段,可能會(huì)存在問(wèn)題,因?yàn)橛袝r(shí)會(huì)返回 null。

在 Dart 3.2 中,我們改進(jìn)了流程分析引擎,現(xiàn)在能夠?qū)?strong>私有 final 字段實(shí)施類(lèi)型升級(jí)?,F(xiàn)在,上面的代碼示例可以正常運(yùn)行。您可以這樣理解: 對(duì)于私有 final 字段,它的值在初始分配后永不更改,因此僅檢查一次也是安全的。私有 final 字段升級(jí)從 Dart 3.2 起推出,并將應(yīng)用于配置 3.2 及以上版本 Dart SDK 的項(xiàng)目。

  • 3.2 及以上版本
    https://dart.cn/guides/language/evolution#language-versioning


在 package:lints 3.0 中加入新的代碼分析選項(xiàng)


針對(duì)代碼分析,我們還對(duì) package:lints 中的標(biāo)準(zhǔn)代碼分析規(guī)則進(jìn)行了一些改進(jìn)。此 package 包含默認(rèn)和推薦的靜態(tài)分析規(guī)則集,適用于任何根據(jù) dart createflutter create(通過(guò) package:flutter_lints — package:lints 的擴(kuò)展) 創(chuàng)建的新項(xiàng)目。

  • package:lints
    https://pub.flutter-io.cn/packages/lints
  • package:flutter_lints
    https://pub.flutter-io.cn/packages/flutter_lints

此 lint 集新的主要版本 (版本 3.0)現(xiàn)已推出。我們?cè)诖诵抻啺娴暮诵募刑砑恿肆鶄€(gè) lint,在推薦集中添加了兩個(gè) lint,可用于驗(yàn)證 pubspec URL,以及驗(yàn)證是否使用正確的參數(shù)調(diào)用集合方法等。您可以查看更新日志獲取完整的更改列表。3.0 版本將成為即將發(fā)布的新項(xiàng)目的默認(rèn)版本。您也可以立即升級(jí)現(xiàn)有項(xiàng)目。

  • 更新日志
    https://github.com/dart-lang/lints/blob/main/CHANGELOG.md#300
  • 立即升級(jí)
    https://github.com/dart-lang/lints#upgrading-to-the-latest-lints


Dart 互操作性更新


提供廣泛的跨平臺(tái)支持一直是 Dart 的核心原則。但是,即使一行 Dart 代碼可以做到無(wú)需更改就能在所有平臺(tái)上運(yùn)行,大型應(yīng)用通常仍然需要與現(xiàn)有代碼進(jìn)行互操作。現(xiàn)有代碼指舊項(xiàng)目的代碼,或其他庫(kù)中可用的 API 或系統(tǒng) API。我們?cè)谶@一領(lǐng)域投入了大量精力,首先是用于與原生 C API 進(jìn)行互操作的 FFI。我們目前正在努力擴(kuò)大該領(lǐng)域,以支持與 Java、KotlinObjective C 和 Swift 的互操作。您可以閱讀下文 Dart Web 部分,了解有關(guān) JS 互操作性的精彩更新。

  • 廣泛的跨平臺(tái)支持
    https://dart.cn/overview#platform
  • 與原生 C API 進(jìn)行互操作
    https://dart.cn/guides/libraries/c-interop
  • Java、Kotlin
    https://dart.cn/guides/libraries/java-interop
  • Objective C 和 Swift
    https://dart.cn/guides/libraries/objective-c-interop

從 Dart 3.2 開(kāi)始,我們對(duì)原生互操作進(jìn)行了許多改進(jìn):

  • 我們?yōu)?C FFI 引入了 NativeCallable.isolateLocal 構(gòu)造函數(shù),它可以根據(jù)任意 Dart 函數(shù)創(chuàng)建 C 函數(shù)指針。這是一項(xiàng)由 Pointer.fromFunction 提供的擴(kuò)展功能,只能根據(jù)頂級(jí)函數(shù)創(chuàng)建函數(shù)指針。

  • NativeCallable.isolateLocal
    https://api.dart.cn/stable/dart-ffi/NativeCallable/NativeCallable.isolateLocal.html
  • Pointer.fromFunction
    https://api.dart.cn/stable/dart-ffi/Pointer/fromFunction.html

  • 我們更新了 Objective-C 綁定生成器,以使用在 Dart 3.1 中添加的 NativeCallable.listener。該生成器現(xiàn)在可以自動(dòng)處理包含異步回調(diào)的 API,例如 Core Motion 這類(lèi)此前需要手動(dòng)編寫(xiě)部分綁定代碼的 API。

  • NativeCallable.listener
    https://api.dart.cn/stable/dart-ffi/NativeCallable/NativeCallable.listener.html
  • Core Motion
    https://developer.apple.com/documentation/coremotion

  • 我們?yōu)閷?shí)現(xiàn) Java 和 Kotlin 互操作而持續(xù)改進(jìn) package:jnigen?,F(xiàn)在能夠?qū)?package:cronet_http (適用于 Android 的 Cronet HTTP 客戶(hù)端的封裝容器) 從手寫(xiě)的綁定代碼遷移到自動(dòng)生成的封裝容器

  • package:jnigen
    https://dart.cn/guides/libraries/java-interop
  • package:cronet_http
    https://pub.flutter-io.cn/packages/cronet_http
  • 自動(dòng)生成的封裝容器
    https://github.com/dart-lang/http/blob/master/pkgs/cronet_http/jnigen.yaml

  • 我們?cè)?Native Assets 功能方面取得了重大進(jìn)展,該功能旨在解決與依賴(lài)原生代碼的 Dart package 分發(fā)相關(guān)的許多問(wèn)題。Native Assets 提供統(tǒng)一的鉤子來(lái)集成構(gòu)建 Flutter 和獨(dú)立 Dart 應(yīng)用所涉及的各種構(gòu)建系統(tǒng),從而解決相關(guān)問(wèn)題。您可以查看相關(guān)文檔獲取預(yù)覽。

  • Native Assets
    https://github.com/dart-lang/sdk/issues/50565
  • 文檔
    http://dart.cn/guides/libraries/c-interop#native-assets


適用于 Dart package 的 DevTools 擴(kuò)展程序


Dart DevTools 是一套用于支持純 Dart 和 Flutter 應(yīng)用的調(diào)試及性能工具。我們?cè)?Dart 3.2 和 Flutter 3.16 中推出了新的擴(kuò)展框架,讓 package 作者能夠直接在 DevTools 中為其 package 構(gòu)建自定義工具。因此,包含框架的 pub.dev package 能夠提供特定于其用例的自定義工具。例如,Serverpod 的作者一直在努力為其 package 構(gòu)建 DevTools,并且很高興在即將發(fā)布的 1.2 版本中提供 DevTools 擴(kuò)展程序。
△計(jì)劃納入即將發(fā)布的 ServerPod 1.2 版本中的 DevTools 擴(kuò)展程序

  • DevTools
    https://dart.cn/tools/dart-devtools
  • 推出
    https://medium.com/p/c8bc1aaf8e5f/
  • 擴(kuò)展框架
    https://pub.flutter-io.cn/packages/devtools_extensions
  • Serverpod
    https://pub.flutter-io.cn/packages/serverpod
  • 1.2 版本
    https://github.com/orgs/serverpod/projects/4


Dart Web 和 Wasm 更新


Wasm (也稱(chēng)為 WebAssembly) 是一種在 Web 瀏覽器上非常棒的新指令格式,還提供可移植、獨(dú)立于平臺(tái)的二進(jìn)制格式,以適用于現(xiàn)代瀏覽器。我們正在將高級(jí)托管語(yǔ)言 (如 Dart) 的垃圾回收功能添加到 Wasm 標(biāo)準(zhǔn)中。從 Chrome 119 開(kāi)始默認(rèn)啟用 Wasm 的垃圾回收支持 (也稱(chēng)為 Wasm-GC)。下一個(gè)穩(wěn)定版本 Firefox 120 也將支持 Wasm-GC。那么 Dart、Flutter 和 Wasm-GC 現(xiàn)在是什么情況呢?

  • WebAssembly
    https://webassembly.org/
  • Wasm 的垃圾回收支持
    https://developer.chrome.com/blog/wasmgc/

Dart-to-Wasm 編譯器幾乎配備所有功能。我們對(duì)性能和兼容性非常滿(mǎn)意,正在進(jìn)一步關(guān)注邊緣情況,以確保在各種場(chǎng)景中實(shí)現(xiàn)暢快運(yùn)行。

對(duì)于 Flutter Web,我們完成了一個(gè)新的 "Skwasm" 渲染引擎開(kāi)發(fā)。為了最大限度提高性能,Skwasm 通過(guò) wasm-to-wasm 綁定,將編譯后的應(yīng)用代碼直接連接到自定義 CanvasKit Wasm 模塊。這是 Flutter Web 多線程渲染支持的首次迭代,進(jìn)一步提高了幀時(shí)間。

  • CanvasKit Wasm 模塊
    https://skia.org/docs/user/modules/canvaskit/

在采用 Wasm 的 Flutter Web 準(zhǔn)備結(jié)束目前的實(shí)驗(yàn)狀態(tài)之前,我們還有一些事情要做:

  • 雙重編譯:生成 Wasm 和 JavaScript 輸出,并在運(yùn)行時(shí)啟用功能檢測(cè),以支持具備或不具備 Wasm-GC 支持的瀏覽器。
  • 現(xiàn)代 JavaScript 互操作性:一種新的基于擴(kuò)展類(lèi)型的 JS 互操作機(jī)制,當(dāng)針對(duì) JavaScript 和 Wasm 時(shí),可以在 Dart 代碼、瀏覽器 API 和 JS 庫(kù)之間實(shí)現(xiàn)簡(jiǎn)潔的、類(lèi)型安全的調(diào)用。

  • 擴(kuò)展類(lèi)型
    https://github.com/dart-lang/language/issues/2727

  • 支持 Wasm 的瀏覽器 API:新的 package:web,基于現(xiàn)代 JS 互操作機(jī)制,取代了 dart:html (及相關(guān)庫(kù)),借此可輕松訪問(wèn)瀏覽器 API,并且支持在 JS 和 Wasm 目標(biāo)上使用。

我們正在開(kāi)始將大量的內(nèi)部項(xiàng)目遷移到 package:web 和新的 JS 互操作機(jī)制,并希望在下一個(gè)穩(wěn)定版本中向您提供更多更新。與此同時(shí),您可以在我們的 WebAssembly 支持頁(yè)面上獲取最新的詳細(xì)信息

  • WebAssembly 支持
    https://flutter.dev/wasm


開(kāi)始體驗(yàn)


以上就是我們要與您分享的所有內(nèi)容。Dart 3.2 現(xiàn)已在 dart.dev 中推出,您也可以通過(guò)我們將在后續(xù)介紹的 Flutter 3.16 版本使用此產(chǎn)品。盡情體驗(yàn)新版 Dart 吧!

  • dart.dev
    https://dart.cn/get-dart
  • Flutter 3.16
    https://medium.com/flutter/whats-new-in-flutter-3-16-dba6cb1015d1




?點(diǎn)擊屏末||即刻開(kāi)始體驗(yàn)Dart 3.2



原文標(biāo)題:Dart 3.2 更新盤(pán)點(diǎn)

文章出處:【微信公眾號(hào):谷歌開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 谷歌
    +關(guān)注

    關(guān)注

    27

    文章

    6179

    瀏覽量

    105737

原文標(biāo)題:Dart 3.2 更新盤(pán)點(diǎn)

文章出處:【微信號(hào):Google_Developers,微信公眾號(hào):谷歌開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    用Ollama輕松搞定Llama 3.2 Vision模型本地部署

    Ollama的安裝。 一,Llama3.2 Vision簡(jiǎn)介 Llama 3.2 Vision是一個(gè)多模態(tài)大型語(yǔ)言模型(LLMs)的集合,它包括預(yù)訓(xùn)練和指令調(diào)整的圖像推理生成模型,有兩種參數(shù)規(guī)模
    的頭像 發(fā)表于 11-23 17:22 ?1382次閱讀
    用Ollama輕松搞定Llama <b class='flag-5'>3.2</b> Vision模型本地部署

    使用NVIDIA TensorRT提升Llama 3.2性能

    Llama 3.2 模型集擴(kuò)展了 Meta Llama 開(kāi)源模型集的模型陣容,包含視覺(jué)語(yǔ)言模型(VLM)、小語(yǔ)言模型(SLM)和支持視覺(jué)的更新版 Llama Guard 模型。與 NVIDIA 加速
    的頭像 發(fā)表于 11-20 09:59 ?279次閱讀

    請(qǐng)問(wèn)AIC3100 linux 3.2驅(qū)動(dòng)哪里下載?

    AIC3100 linux 3.2 驅(qū)動(dòng)哪里下載 我用來(lái)和am335x連接
    發(fā)表于 11-08 08:14

    Meta發(fā)布Llama 3.2量化版模型

    近日,Meta在開(kāi)源Llama 3.2的1B與3B模型后,再次為人工智能領(lǐng)域帶來(lái)了新進(jìn)展。10月24日,Meta正式推出了這兩個(gè)模型的量化版本,旨在進(jìn)一步優(yōu)化模型性能,拓寬其應(yīng)用場(chǎng)景。
    的頭像 發(fā)表于 10-29 11:05 ?440次閱讀

    使用OpenVINO 2024.4在算力魔方上部署Llama-3.2-1B-Instruct模型

    前面我們分享了《三步完成Llama3在算力魔方的本地量化和部署》。2024年9月25日,Meta又發(fā)布了Llama3.2:一個(gè)多語(yǔ)言大型語(yǔ)言模型(LLMs)的集合。
    的頭像 發(fā)表于 10-12 09:39 ?660次閱讀
    使用OpenVINO 2024.4在算力魔方上部署Llama-<b class='flag-5'>3.2</b>-1B-Instruct模型

    亞馬遜云科技上線Meta Llama 3.2模型

    亞馬遜云科技近日宣布,Meta公司的新一代模型Llama 3.2已在其平臺(tái)上正式上線。該模型包括Meta首款多模態(tài)模型,現(xiàn)已在Amazon Bedrock和Amazon SageMaker中全面可用。
    的頭像 發(fā)表于 10-11 18:08 ?478次閱讀

    亞馬遜云科技正式上線Meta Llama 3.2模型

    亞馬遜云科技宣布,Meta的新一代模型Llama 3.2,包括其首款多模態(tài)模型,現(xiàn)已在Amazon Bedrock和Amazon SageMaker中正式可用。
    的頭像 發(fā)表于 10-11 09:20 ?539次閱讀

    1.6Gbps至3.2Gbps收發(fā)器SC5101可廣泛用于監(jiān)控安防系統(tǒng)

    1.6Gbps至3.2Gbps收發(fā)器SC5101可廣泛用于監(jiān)控安防系統(tǒng)
    的頭像 發(fā)表于 09-20 09:57 ?265次閱讀
    1.6Gbps至<b class='flag-5'>3.2</b>Gbps收發(fā)器SC5101可廣泛用于監(jiān)控安防系統(tǒng)

    USB 3.1和USB 3.2有哪些區(qū)別

    USB由于標(biāo)準(zhǔn)眾多,即便是之前已經(jīng)確定的,隨著新一代的推出,標(biāo)準(zhǔn)又出現(xiàn)了新的變化。本期我們將單獨(dú)拿出USB 3.1和USB 3.2,它們外觀基本相似,但是在參數(shù)對(duì)比上有些區(qū)別,具體不同一起往下看。
    的頭像 發(fā)表于 09-09 14:59 ?2203次閱讀
    USB 3.1和USB <b class='flag-5'>3.2</b>有哪些區(qū)別

    USB 3.2雙通道操作:您需要了解的內(nèi)容

    電子發(fā)燒友網(wǎng)站提供《USB 3.2雙通道操作:您需要了解的內(nèi)容.pdf》資料免費(fèi)下載
    發(fā)表于 08-30 10:09 ?0次下載
    USB <b class='flag-5'>3.2</b>雙通道操作:您需要了解的內(nèi)容

    ModusToolbox? 3.2 Dashboard工程生成錯(cuò)誤的原因?

    在生成工程時(shí),出現(xiàn)如下錯(cuò)誤: Opening project creator from C:/Users/XXX/ModusToolbox/tools_3.2/project-creator
    發(fā)表于 07-26 06:30

    盤(pán)點(diǎn)常見(jiàn)的消費(fèi)級(jí)IoT設(shè)備有哪些

    盤(pán)點(diǎn)常見(jiàn)的消費(fèi)級(jí)IoT設(shè)備有哪些
    的頭像 發(fā)表于 07-20 08:14 ?1253次閱讀
    <b class='flag-5'>盤(pán)點(diǎn)</b>常見(jiàn)的消費(fèi)級(jí)IoT設(shè)備有哪些

    手持PDA終端在固定資產(chǎn)盤(pán)點(diǎn)中的應(yīng)用方案

    隨著科技的迅猛發(fā)展,手持式數(shù)據(jù)采集(PDA)終端已成為企業(yè)盤(pán)點(diǎn)固定資產(chǎn)不可或缺的工具。借助條碼掃描及無(wú)線射頻識(shí)別(RFID)技術(shù),手持PDA終端極大地促進(jìn)了盤(pán)點(diǎn)效率和準(zhǔn)確性的提升。以下為手持PDA
    的頭像 發(fā)表于 06-18 15:06 ?507次閱讀
    手持PDA終端在固定資產(chǎn)<b class='flag-5'>盤(pán)點(diǎn)</b>中的應(yīng)用方案

    三防平板丨平板終端丨倉(cāng)庫(kù)盤(pán)點(diǎn)應(yīng)用

    三防平板是一種能夠在惡劣環(huán)境下使用的電子設(shè)備,其具有防水、防塵、抗震等特性,適用于各種場(chǎng)合,包括倉(cāng)庫(kù)盤(pán)點(diǎn)。在現(xiàn)代物流行業(yè)中,對(duì)于倉(cāng)庫(kù)盤(pán)點(diǎn)來(lái)說(shuō),三防平板不僅能夠提高盤(pán)點(diǎn)效率,還可以有效地減少人為錯(cuò)誤和操作失誤。本文將介紹三防平板在
    的頭像 發(fā)表于 02-19 09:51 ?310次閱讀
    三防平板丨平板終端丨倉(cāng)庫(kù)<b class='flag-5'>盤(pán)點(diǎn)</b>應(yīng)用

    水質(zhì)電導(dǎo)率的測(cè)量方式(盤(pán)點(diǎn)

    水質(zhì)電導(dǎo)率的測(cè)量方式(盤(pán)點(diǎn)
    的頭像 發(fā)表于 01-29 13:58 ?1576次閱讀