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

    文章

    6141

    浏览量

    105093

原文标题:Dart 3.2 更新盘点

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

收藏 人收藏

    评论

    相关推荐

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

    Ollama的安装。 一,Llama3.2 Vision简介 Llama 3.2 Vision是一个多模态大型语言模型(LLMs)的集合,它包括预训练和指令调整的图像推理生成模型,有两种参数规模
    的头像 发表于 11-23 17:22 120次阅读
    用Ollama轻松搞定Llama <b class='flag-5'>3.2</b> Vision模型本地部署

    使用NVIDIA TensorRT提升Llama 3.2性能

    Llama 3.2 模型集扩展了 Meta Llama 开源模型集的模型阵容,包含视觉语言模型(VLM)、小语言模型(SLM)和支持视觉的更新版 Llama Guard 模型。与 NVIDIA 加速
    的头像 发表于 11-20 09:59 130次阅读

    请问AIC3100 linux 3.2驱动哪里下载?

    AIC3100 linux 3.2 驱动哪里下载 我用来和am335x连接
    发表于 11-08 08:14

    Meta发布Llama 3.2量化版模型

    近日,Meta在开源Llama 3.2的1B与3B模型后,再次为人工智能领域带来了新进展。10月24日,Meta正式推出了这两个模型的量化版本,旨在进一步优化模型性能,拓宽其应用场景。
    的头像 发表于 10-29 11:05 312次阅读

    亚马逊云科技上线Meta Llama 3.2模型

    亚马逊云科技近日宣布,Meta公司的新一代模型Llama 3.2已在其平台上正式上线。该模型包括Meta首款多模态模型,现已在Amazon Bedrock和Amazon SageMaker中全面可用。
    的头像 发表于 10-11 18:08 421次阅读

    亚马逊云科技正式上线Meta Llama 3.2模型

    亚马逊云科技宣布,Meta的新一代模型Llama 3.2,包括其首款多模态模型,现已在Amazon Bedrock和Amazon SageMaker中正式可用。
    的头像 发表于 10-11 09:20 455次阅读

    USB 3.1和USB 3.2有哪些区别

    USB由于标准众多,即便是之前已经确定的,随着新一代的推出,标准又出现了新的变化。本期我们将单独拿出USB 3.1和USB 3.2,它们外观基本相似,但是在参数对比上有些区别,具体不同一起往下看。
    的头像 发表于 09-09 14:59 1304次阅读
    USB 3.1和USB <b class='flag-5'>3.2</b>有哪些区别

    USB 3.2双通道操作:您需要了解的内容

    电子发烧友网站提供《USB 3.2双通道操作:您需要了解的内容.pdf》资料免费下载
    发表于 08-30 10:09 0次下载
    USB <b class='flag-5'>3.2</b>双通道操作:您需要了解的内容

    ModusToolbox™ 3.2 Dashboard工程生成错误的原因?

    在生成工程时,出现如下错误: Opening project creator from C:/Users/XXX/ModusToolbox/tools_3.2/project-creator
    发表于 07-26 06:30

    盘点常见的消费级IoT设备有哪些

    盘点常见的消费级IoT设备有哪些
    的头像 发表于 07-20 08:14 1021次阅读
    <b class='flag-5'>盘点</b>常见的消费级IoT设备有哪些

    手持PDA终端在固定资产盘点中的应用方案

    随着科技的迅猛发展,手持式数据采集(PDA)终端已成为企业盘点固定资产不可或缺的工具。借助条码扫描及无线射频识别(RFID)技术,手持PDA终端极大地促进了盘点效率和准确性的提升。以下为手持PDA
    的头像 发表于 06-18 15:06 381次阅读
    手持PDA终端在固定资产<b class='flag-5'>盘点</b>中的应用方案

    三防平板丨平板终端丨仓库盘点应用

    三防平板是一种能够在恶劣环境下使用的电子设备,其具有防水、防尘、抗震等特性,适用于各种场合,包括仓库盘点。在现代物流行业中,对于仓库盘点来说,三防平板不仅能够提高盘点效率,还可以有效地减少人为错误和操作失误。本文将介绍三防平板在
    的头像 发表于 02-19 09:51 278次阅读
    三防平板丨平板终端丨仓库<b class='flag-5'>盘点</b>应用

    水质电导率的测量方式(盘点

    水质电导率的测量方式(盘点
    的头像 发表于 01-29 13:58 1367次阅读

    盘点PCB设计中的常见错误

    搞技术,难免存在错误,只有经历过错误,才能更快地成长。PCB设计也一样,今天就来盘点一下PCB设计中最常见的错误。
    的头像 发表于 01-12 09:53 1335次阅读
    <b class='flag-5'>盘点</b>PCB设计中的常见错误

    Spring Boot 3.2支持虚拟线程和原生镜像

    Spring Boot 3.2 前几日发布,让我们用 Java 21、GraalVM 和虚拟线程来尝试一下。
    的头像 发表于 11-30 16:22 687次阅读