作者 / 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 create 或 flutter create (通过 package:flutter_lints — package:lints 的扩展) 创建的新项目。
package:lintshttps://pub.flutter-io.cn/packages/lintspackage:flutter_lintshttps://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、kotlin、objective c 和 swift 的互操作。您可以阅读下文 dart web 部分,了解有关 js 互操作性的精彩更新。
广泛的跨平台支持https://dart.cn/overview#platform与原生 c api 进行互操作https://dart.cn/guides/libraries/c-interopjava、kotlinhttps://dart.cn/guides/libraries/java-interopobjective c 和 swifthttps://dart.cn/guides/libraries/objective-c-interop
从 dart 3.2 开始,我们对原生互操作进行了许多改进:
我们为 c ffi 引入了 nativecallable.isolatelocal 构造函数,它可以根据任意 dart 函数创建 c 函数指针。这是一项由 pointer.fromfunction 提供的扩展功能,只能根据顶级函数创建函数指针。
nativecallable.isolatelocalhttps://api.dart.cn/stable/dart-ffi/nativecallable/nativecallable.isolatelocal.htmlpointer.fromfunctionhttps://api.dart.cn/stable/dart-ffi/pointer/fromfunction.html
我们更新了 objective-c 绑定生成器,以使用在 dart 3.1 中添加的 nativecallable.listener。该生成器现在可以自动处理包含异步回调的 api,例如 core motion 这类此前需要手动编写部分绑定代码的 api。
nativecallable.listenerhttps://api.dart.cn/stable/dart-ffi/nativecallable/nativecallable.listener.htmlcore motionhttps://developer.apple.com/documentation/coremotion
我们为实现 java 和 kotlin 互操作而持续改进 package:jnigen。现在能够将 package:cronet_http (适用于 android 的 cronet http 客户端的封装容器) 从手写的绑定代码迁移到自动生成的封装容器。
package:jnigenhttps://dart.cn/guides/libraries/java-interoppackage:cronet_httphttps://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 assetshttps://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 扩展程序
devtoolshttps://dart.cn/tools/dart-devtools推出https://medium.com/p/c8bc1aaf8e5f/扩展框架https://pub.flutter-io.cn/packages/devtools_extensionsserverpodhttps://pub.flutter-io.cn/packages/serverpod1.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 现在是什么情况呢?
webassemblyhttps://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.devhttps://dart.cn/get-dartflutter 3.16https://medium.com/flutter/whats-new-in-flutter-3-16-dba6cb1015d1
点击屏末 | 阅读原文 | 即刻开始体验 dart 3.2
原文标题:dart 3.2 更新盘点
文章出处:【微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。
不吐不快 商业级与国家级科研还能分得清么?
信息战争,什么是信息战争
大量现货!8681线材综合测试仪(曾S13713875417
智能镜面显示屏来袭,开启智能美妆的全新模式
特斯拉Model3试生产 或售价35万明年交付
Dart 3.2 更新盘点
大坝安全监测系统,为中小型水库建立安全防线!
政策利好,欧莱新材IPO推动公司可持续高质量发展
坚果Pro3曝光将定位中端手机搭载骁龙730处理器不支持5G以及NFC功能
嘉楠耘智采用台积电7nm的ASIC芯片 成为讨论度最高的“中国芯”
Xilinx 宣布Vivado设计套件开始支持16nm UltraScale+产品早期试用
首项人工智能 CAD 草图绘制技术解析
科技是把双刃剑:令人担心的事情还是发生了
全球晶圆代工厂巨头台积电已经向美国寻求恢复对华为的供应
自动驾驶纯视觉算法的上限在哪?
固态电容和电解电容的优缺点
一款永远砸不烂的骁龙835的大屏手机,MOTO Z2 force纽约正式发布!
LED技术助力韩国最大垂直农场实现颠覆性创新
REP023: 从350MHz变频至3.5GHz具有9dB增
TPS759XX系列电压调节器概述