0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Dart 3.2 更新盘点

谷歌开发者 来源:未知 2023-12-15 15:55 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者 / Kevin Moore 和 Michael Thomsen

我们隆重宣布推出 Dart 3.2,这一版本针对以下方面做出了改进: 新增了一项语言功能,可对私有 final 字段进行非空升级;通过新增的互操作功能改善了开发者体验;支持 DevTools 的扩展程序;并更新了我们的 Web 路线图,包括提供对 Wasm (又名 WebAssembly) 的支持。


私有 final 字段的非空升级


自我们在 Dart 2.12 中引入健全的空安全 (sound null safety) 以来已过去几年时间。您可以借助空安全声明哪些类型可为空 (可以包含值或 null),哪些类型不可为空 (始终包含值)。通过将空安全与流程分析相结合,能够检测何时可以将可为空的变量 "升级" 为更安全的非空类型:

  • 健全的空安全 (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 发布以来,类型升级一直是空安全的核心部分,但仅限于局部变量。字段或顶级变量无法升级,例如以下代码示例:
class Container {
final int? _fillLevel;
Container(this._fillLevel);
check() {
if (_fillLevel != null) {
int i = _fillLevel; // Prior to Dart 3.2, causes an error.
}
}
}

这种局限性由多种复杂的情况导致。在这些情况中,流程分析无法安全地确定字段何时或如何变化。以类上的字段升级为例,如果子类使用 getter 覆盖字段,可能会存在问题,因为有时会返回 null。

在 Dart 3.2 中,我们改进了流程分析引擎,现在能够对私有 final 字段实施类型升级。现在,上面的代码示例可以正常运行。您可以这样理解: 对于私有 final 字段,它的值在初始分配后永不更改,因此仅检查一次也是安全的。私有 final 字段升级从 Dart 3.2 起推出,并将应用于配置 3.2 及以上版本 Dart SDK 的项目。

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


在 package:lints 3.0 中加入新的代码分析选项


针对代码分析,我们还对 package:lints 中的标准代码分析规则进行了一些改进。此 package 包含默认和推荐的静态分析规则集,适用于任何根据 dart createflutter create(通过 package:flutter_lints — package:lints 的扩展) 创建的新项目。

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

此 lint 集新的主要版本 (版本 3.0)现已推出。我们在此修订版的核心集中添加了六个 lint,在推荐集中添加了两个 lint,可用于验证 pubspec URL,以及验证是否使用正确的参数调用集合方法等。您可以查看更新日志获取完整的更改列表。3.0 版本将成为即将发布的新项目的默认版本。您也可以立即升级现有项目。

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


Dart 互操作性更新


提供广泛的跨平台支持一直是 Dart 的核心原则。但是,即使一行 Dart 代码可以做到无需更改就能在所有平台上运行,大型应用通常仍然需要与现有代码进行互操作。现有代码指旧项目的代码,或其他库中可用的 API 或系统 API。我们在这一领域投入了大量精力,首先是用于与原生 C API 进行互操作的 FFI。我们目前正在努力扩大该领域,以支持与 Java、KotlinObjective C 和 Swift 的互操作。您可以阅读下文 Dart Web 部分,了解有关 JS 互操作性的精彩更新。

  • 广泛的跨平台支持
    https://dart.cn/overview#platform
  • 与原生 C API 进行互操作
    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 开始,我们对原生互操作进行了许多改进:

  • 我们为 C FFI 引入了 NativeCallable.isolateLocal 构造函数,它可以根据任意 Dart 函数创建 C 函数指针。这是一项由 Pointer.fromFunction 提供的扩展功能,只能根据顶级函数创建函数指针。

  • 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。该生成器现在可以自动处理包含异步回调的 API,例如 Core Motion 这类此前需要手动编写部分绑定代码的 API。

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

  • 我们为实现 Java 和 Kotlin 互操作而持续改进 package:jnigen。现在能够将 package:cronet_http (适用于 Android 的 Cronet HTTP 客户端的封装容器) 从手写的绑定代码迁移到自动生成的封装容器

  • package:jnigen
    https://dart.cn/guides/libraries/java-interop
  • package:cronet_http
    https://pub.flutter-io.cn/packages/cronet_http
  • 自动生成的封装容器
    https://github.com/dart-lang/http/blob/master/pkgs/cronet_http/jnigen.yaml

  • 我们在 Native Assets 功能方面取得了重大进展,该功能旨在解决与依赖原生代码的 Dart package 分发相关的许多问题。Native Assets 提供统一的钩子来集成构建 Flutter 和独立 Dart 应用所涉及的各种构建系统,从而解决相关问题。您可以查看相关文档获取预览。

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


适用于 Dart package 的 DevTools 扩展程序


Dart DevTools 是一套用于支持纯 Dart 和 Flutter 应用的调试及性能工具。我们在 Dart 3.2 和 Flutter 3.16 中推出了新的扩展框架,让 package 作者能够直接在 DevTools 中为其 package 构建自定义工具。因此,包含框架的 pub.dev package 能够提供特定于其用例的自定义工具。例如,Serverpod 的作者一直在努力为其 package 构建 DevTools,并且很高兴在即将发布的 1.2 版本中提供 DevTools 扩展程序。
△计划纳入即将发布的 ServerPod 1.2 版本中的 DevTools 扩展程序

  • DevTools
    https://dart.cn/tools/dart-devtools
  • 推出
    https://medium.com/p/c8bc1aaf8e5f/
  • 扩展框架
    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 (也称为 WebAssembly) 是一种在 Web 浏览器上非常棒的新指令格式,还提供可移植、独立于平台的二进制格式,以适用于现代浏览器。我们正在将高级托管语言 (如 Dart) 的垃圾回收功能添加到 Wasm 标准中。从 Chrome 119 开始默认启用 Wasm 的垃圾回收支持 (也称为 Wasm-GC)。下一个稳定版本 Firefox 120 也将支持 Wasm-GC。那么 Dart、Flutter 和 Wasm-GC 现在是什么情况呢?

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

Dart-to-Wasm 编译器几乎配备所有功能。我们对性能和兼容性非常满意,正在进一步关注边缘情况,以确保在各种场景中实现畅快运行。

对于 Flutter Web,我们完成了一个新的 "Skwasm" 渲染引擎开发。为了最大限度提高性能,Skwasm 通过 wasm-to-wasm 绑定,将编译后的应用代码直接连接到自定义 CanvasKit Wasm 模块。这是 Flutter Web 多线程渲染支持的首次迭代,进一步提高了帧时间。

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

在采用 Wasm 的 Flutter Web 准备结束目前的实验状态之前,我们还有一些事情要做:

  • 双重编译:生成 Wasm 和 JavaScript 输出,并在运行时启用功能检测,以支持具备或不具备 Wasm-GC 支持的浏览器。
  • 现代 JavaScript 互操作性:一种新的基于扩展类型的 JS 互操作机制,当针对 JavaScript 和 Wasm 时,可以在 Dart 代码、浏览器 API 和 JS 库之间实现简洁的、类型安全的调用。

  • 扩展类型
    https://github.com/dart-lang/language/issues/2727

  • 支持 Wasm 的浏览器 API:新的 package:web,基于现代 JS 互操作机制,取代了 dart:html (及相关库),借此可轻松访问浏览器 API,并且支持在 JS 和 Wasm 目标上使用。

我们正在开始将大量的内部项目迁移到 package:web 和新的 JS 互操作机制,并希望在下一个稳定版本中向您提供更多更新。与此同时,您可以在我们的 WebAssembly 支持页面上获取最新的详细信息。

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


开始体验


以上就是我们要与您分享的所有内容。Dart 3.2 现已在 dart.dev 中推出,您也可以通过我们将在后续介绍的 Flutter 3.16 版本使用此产品。尽情体验新版 Dart 吧!

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




 点击屏末||即刻开始体验Dart 3.2



原文标题:Dart 3.2 更新盘点

文章出处:【微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 谷歌
    +关注

    关注

    27

    文章

    6257

    浏览量

    111941

原文标题:Dart 3.2 更新盘点

文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    USB PD3.2协议更新了什么?

    USB PD3.2不仅是快充技术的里程碑,更是全球能源互联网的基础设施。随着苹果、华为、三星等头部厂商全面适配,这一“通用电力语言”正加速重构消费电子与工业设备的能源生态,开启“一线通充、万物互联”的新时代。
    的头像 发表于 01-25 11:33 1045次阅读
    USB PD<b class='flag-5'>3.2</b>协议<b class='flag-5'>更新</b>了什么?

    RFID盘点vs传统人工盘点:企业库存盘不准?选对工具是关键!

    传统库存盘点耗时耗力还不准?RFID手持机带你告别Excel人工对账,无需对准、批量识别、隔箱读取,4步完成仓库盘点,效率提升10倍以上!本文详解 RFID 手持机盘点流程、适用场景及核心优势,助力企业实现库存可视化管理,提升现
    的头像 发表于 12-31 14:01 370次阅读
    RFID<b class='flag-5'>盘点</b>vs传统人工<b class='flag-5'>盘点</b>:企业库存盘不准?选对工具是关键!

    彩屏无线盘点机哪个好?工业级手持终端功能详解+选购指南!

    彩屏无线盘点机,集成条码 / RFID 扫描、无线通信、离线存储功能,工业级 IP66/IP67 防护,适配零售、仓储、制造多场景。盘点效率提升 3-4 倍,降低人力成本与出错率,附 5 大选购要点 + 真实案例,帮多 SKU、高周转企业解决
    的头像 发表于 12-23 12:13 416次阅读
    彩屏无线<b class='flag-5'>盘点</b>机哪个好?工业级手持终端功能详解+选购指南!

    TUSB1142:USB 3.2 转接驱动器的卓越之选

    TUSB1142:USB 3.2 转接驱动器的卓越之选 在当今高速数据传输的时代,USB Type - C 接口凭借其强大的功能和广泛的应用,成为了电子设备的标配。而 TUSB1142 作为一款专为
    的头像 发表于 12-16 14:50 679次阅读

    正面对决GPT-5和Germini-3,DeepSeek-V3.2震撼发布

    12月1日,中国 AI创新企业 DeepSeek 再度加速技术迭代,今日宣布推出 DeepSeek-V3.2 与 V3.2-Speciale 两款模型。公司在官网上指出,DeepSeek-V3.2
    的头像 发表于 12-02 14:10 9744次阅读
    正面对决GPT-5和Germini-3,DeepSeek-V<b class='flag-5'>3.2</b>震撼发布

    资产盘点 “跑断腿”?RFID 无感盘点,1 天搞定全厂区

    资产盘点不是 “走过场”,而是摸清家底、降本增效的关键。RFID 无感盘点的价值,不止是 “1 天搞定全厂区” 的效率飞跃,更让资产管理从 “事后核对” 变成 “实时可控”。
    的头像 发表于 11-18 10:46 513次阅读
    资产<b class='flag-5'>盘点</b> “跑断腿”?RFID 无感<b class='flag-5'>盘点</b>,1 天搞定全厂区

    仓库盘点误差大总出错,咋整?试试智能盘点解决方法

    仓库盘点频繁账实不符?人工盘点误差高、效率低,还吃掉利润?RFID 智能盘点技术帮你解决!可以在2-25 米远距离批量读写,库存准确率飙升 99%+,盘点时间缩短一半,适配仓储物流、制
    的头像 发表于 11-05 11:56 571次阅读
    仓库<b class='flag-5'>盘点</b>误差大总出错,咋整?试试智能<b class='flag-5'>盘点</b>解决方法

    RFID标签在库存盘点中的应用

    RFID技术在库存盘点中的应用正变得越来越广泛,其通过无线电信号识别特定目标并读取相关数据的能力,极大地提高了库存管理的效率与准确性。以下是RFID标签在库存盘点中的一些具体应用和优势:1.快速盘点
    的头像 发表于 09-03 15:42 755次阅读
    RFID标签在库存<b class='flag-5'>盘点</b>中的应用

    Android Studio中的Gemini全面支持Dart和Flutter开发

    在 Android Studio 中创建 Android 应用的 Flutter 开发者将迎来一次重大的飞跃: Android Studio 中的 Gemini 已全面支持 Dart
    的头像 发表于 08-06 13:52 1493次阅读
    Android Studio中的Gemini全面支持<b class='flag-5'>Dart</b>和Flutter开发

    精准盘点,无忧管理——RFID智能盘点终端解析

    RFID智能盘点终端高效、精准,利用RFID技术实现快速批量识别,实时更新数据,确保库存信息准确无误。其轻便易携设计及简洁操作界面使盘点工作轻松便捷。此外,该终端具有高可靠性,适用于各种环境,为企业带来高效、精准的
    的头像 发表于 07-14 14:17 697次阅读

    聚焦工业网络与数据通信: Acontis与Unified Automation产品更新情报一览

    和UnifiedAutomation作为盟通科技的重要合作伙伴,将持续引领相关技术在工业现场的落地与实施。在过去五个月内,Acontis更新了其EC-MasterV3.2与EC-
    的头像 发表于 05-16 16:04 1297次阅读
    聚焦工业网络与数据通信: Acontis与Unified Automation产品<b class='flag-5'>更新</b>情报一览

    ZSKY-3401-3.2A-SOT-23 43.5K塑料封装MOSFETS规格书

    电子发烧友网站提供《ZSKY-3401-3.2A-SOT-23 43.5K塑料封装MOSFETS规格书.pdf》资料免费下载
    发表于 05-13 18:18 0次下载

    ZSKY-3401-3.2A-SOT-23塑料封装MOSFETS规格书

    电子发烧友网站提供《ZSKY-3401-3.2A-SOT-23塑料封装MOSFETS规格书.pdf》资料免费下载
    发表于 05-13 18:14 0次下载

    盘点风光互补太阳能智慧路灯的10大优点

    盘点风光互补太阳能智慧路灯的10大优点
    的头像 发表于 05-12 09:52 1738次阅读
    <b class='flag-5'>盘点</b>风光互补太阳能智慧路灯的10大优点

    FPC标签在盘点中的应用

    RFID是一种通过无线电信号识别特定目标并读取相关数据的技术。与传统的条形码技术相比,RFID技术具有显著的优势,如远距离读取、存储更多信息以及更高的准确性和可靠性RFID在库存盘点中的具体应用1.
    的头像 发表于 05-09 15:21 650次阅读
    FPC标签在<b class='flag-5'>盘点</b>中的应用