当前位置:首页 > 后端开发 > 正文内容

Dart 3.2 更新盘点

邻居的猫1个月前 (12-09)后端开发247

作者 / Kevin Moore 和 Michael Thomsen

咱们盛大宣告推出 Dart 3.2,这一版别针对以下方面做出了改善: 新增了一项言语功用,可对私有 final 字段进行非空晋级;经过新增的互操作功用改善了开发者体会;支撑 DevTools 的扩展程序;并更新了咱们的 Web 路线图,包括供给对 Wasm (又叫 WebAssembly) 的支撑。

私有 final 字段的非空晋级

自咱们在 Dart 2.12 中引进 健全的空安全 (sound null safety) 以来已曩昔几年时刻。您能够凭借空安全声明哪些类型可为空 (能够包括值或 null),哪些类型不可为空 (一直包括值)。经过将空安全与 流程剖析 相结合,能够检测何时能够将可为空的变量 "晋级" 为更安全的非空类型:

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 的项目。

在 package:lints 3.0 中参加新的代码剖析选项

针对代码剖析,咱们还对 package:lints 中的规范代码剖析规矩进行了一些改善。此 package 包括默许和引荐的静态剖析规矩集,适用于任何依据 dart create 或 flutter create (经过 package:flutter_lints — package:lints 的扩展) 创立的新项目。

此 lint 集新的首要版别 (版别 3.0) 现已推出。咱们在此修订版的中心会集增加了六个 lint,在引荐会集增加了两个 lint,可用于验证 pubspec URL,以及验证是否运用正确的参数调用调集办法等。您能够检查 更新日志 获取完好的更改列表。3.0 版别将成为行将发布的新项目的默许版别。您也能够 当即晋级 现有项目。

Dart 互操作性更新

供给 广泛的跨渠道支撑 一直是 Dart 的中心准则。可是,即便一行 Dart 代码能够做到无需更改就能在一切渠道上运转,大型运用一般依然需求与现有代码进行互操作。现有代码指旧项目的代码,或其他库中可用的 API 或体系 API。咱们在这一范畴投入了很多精力,首先是用于 与原生 C API 进行互操作 的 FFI。咱们现在正在尽力扩展该范畴,以支撑与 Java、Kotlin、Objective C 和 Swift 的互操作。您能够阅览下文 Dart Web 部分,了解有关 JS 互操作性的精彩更新。

从 Dart 3.2 开端,咱们对原生互操作进行了许多改善:

  • 咱们为 C FFI 引进了 NativeCallable.isolateLocal 结构函数,它能够依据恣意 Dart 函数创立 C 函数指针。这是一项由 Pointer.fromFunction 供给的扩展功用,只能依据尖端函数创立函数指针。

  • 咱们更新了 Objective-C 绑定生成器,以运用在 Dart 3.1 中增加的 NativeCallable.listener。该生成器现在能够主动处理包括异步回调的 API,例如 Core Motion 这类此前需求手动编写部分绑定代码的 API。

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

  • 咱们在 Native Assets 功用方面取得了重大进展,该功用旨在处理与依靠原生代码的 Dart package 分发相关的许多问题。Native Assets 供给一致的钩子来集成构建 Flutter 和独立 Dart 运用所触及的各种构建体系,然后处理相关问题。您能够检查相关 文档 获取预览。

适用于 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 扩展程序

Dart Web 和 Wasm 更新

Wasm (也称为 WebAssembly) 是一种在 Web 浏览器上十分棒的新指令格局,还供给可移植、独立于渠道的二进制格局,以适用于现代浏览器。咱们正在将高档保管言语 (如 Dart) 的废物收回功用增加到 Wasm 规范中。从 Chrome 119 开端默许启用 Wasm 的废物收回支撑 (也称为 Wasm-GC)。下一个安稳版别 Firefox 120 也将支撑 Wasm-GC。那么 Dart、Flutter 和 Wasm-GC 现在是什么状况呢?

Dart-to-Wasm 编译器简直装备一切功用。咱们对功用和兼容性十分满足,正在进一步重视边际状况,以保证在各种场景中完成痛快运转。

关于 Flutter Web,咱们完成了一个新的 "Skwasm" 烘托引擎开发。为了最大极限进步功用,Skwasm 经过 wasm-to-wasm 绑定,将编译后的运用代码直接连接到自定义 CanvasKit Wasm 模块。这是 Flutter Web 多线程烘托支撑的初次迭代,进一步进步了帧时刻。

在选用 Wasm 的 Flutter Web 预备完毕现在的试验状况之前,咱们还有一些工作要做:

  • 两层编译 : 生成 Wasm 和 JavaScript 输出,并在运转时启用功用检测,以支撑具有或不具有 Wasm-GC 支撑的浏览器。
  • 现代 JavaScript 互操作性 : 一种新的根据 扩展类型 的 JS 互操作机制,当针对 JavaScript 和 Wasm 时,能够在 Dart 代码、浏览器 API 和 JS 库之间完成简练的、类型安全的调用。
  • 支撑 Wasm 的浏览器 API : 新的 package:web,根据现代 JS 互操作机制,替代了 dart:html (及相关库),借此可轻松拜访浏览器 API,而且支撑在 JS 和 Wasm 目标上运用。

咱们正在开端将很多的内部项目迁移到 package:web 和新的 JS 互操作机制,并期望鄙人一个安稳版别中向您供给更多更新。与此同时,您能够在咱们的 WebAssembly 支撑 页面上获取最新的详细信息。

开端体会

以上便是咱们要与您共享的一切内容。Dart 3.2 现已在 dart.dev 中推出,您也能够经过咱们将在后续介绍的 Flutter 3.16 版别运用此产品。纵情体会新版 Dart 吧!

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=261

标签: Dart
分享给朋友:

“Dart 3.2 更新盘点” 的相关文章

Flutter/Dart第04天:Dart异步编程(Future和async/await)

Flutter/Dart第04天:Dart异步编程(Future和async/await)

Dart官网代码实验室:https://dart.dev/codelabs/async-await 重要阐明:本博客依据Dart官网代码实验室,但并不是简略的对官网文章进行翻译,我会依据个人研制经历,在掩盖官网文章核心内容情况下,参加自己的一些扩展问题和问题演示和总结,包含称号解说、运用场景阐明、代...

“谵妄”

“谵妄”

写在前面 176 字 | 挖苦 | 狂想 | 现象 | 调查 正文   制药厂的董事长生了病。   去了医院。   “恶魔!”“恶魔!”   他看着护理针筒里的液体,   发疯相同地说。   “谵妄”。   医师冷冷地说。   几个护理,联合着一同   将恶魔,注入了他的身体。   半梦半醒中,...

java重定向,什么是请求重定向?

在Java中,重定向通常指的是将用户从一个URL重定向到另一个URL。这可以通过几种不同的方式实现,具体取决于你是在Servlet、JSP还是其他Java应用程序上下文中工作。 1. 使用Servlet重定向在Servlet中,你可以使用`HttpServletResponse`对象的`sendRe...

c语言开发工具

1. 集成开发环境(IDE): Visual Studio:微软开发的IDE,支持多种编程语言,包括C语言。它提供了代码编辑、编译、调试、版本控制等功能。 Code::Blocks:一个开源、跨平台的IDE,支持C/C 编程。它轻量级、易于使用,适合初学者。 Eclipse CD...

python字符串反转, 使用字符串切片反转字符串

字符串 Hello, World! 的反转结果是 !dlroW ,olleH。 Python字符串反转:多种方法详解在编程中,字符串反转是一个常见的操作,它涉及到将字符串中的字符顺序颠倒。Python作为一门简洁而强大的语言,提供了多种方法来实现这一功能。本文将详细介绍Python中字符串反转的多种...

英文名ruby,Introduction to the Name Ruby

Ruby 是一种开源的动态编程语言,由日本的松本行弘(Yukihiro Matsumoto,简称 Matz)在 1995 年设计并开发。它的设计目标是使编程更加简单和愉悦,结合了 Perl、Smalltalk、Eiffel、Ada 和 Lisp 等语言的优点,强调代码的可读性和简洁性。 Ruby 的...