Dart 2.8更新

Dart 2.8 发布了,除了还在跟进中的 null safety 特性需要进行一些破坏性变更,此版本还有亮点:pub 客户端改进,性能提高,以及确保依赖关系及时更新的新工具。

null safety 破坏性变更

应用崩溃的常见原因是尝试使用变量为 null 的代码,在某些情况下,null 很有用,但是在其它时候却比较麻烦。过去一年,开发团队一直致力于为 Dart 提供 null 安全(null safety)特性支持,这种特性需要扩展类型系统,增加表示始终不可为 null 变量的能力,而同时,类型系统完全是可靠的,Dart 编译器和运行时将信任这些类型,并且能够在类型系统保证变量不为 null 的情况下生成优化的代码。

为了确保可以使用清晰的语义来构建 null safety,开发团队决定对 Dart 语言和库进行一些破坏性更改,这些更改对 Dart 类型系统的一些特殊情况和一些 Dart 核心库进行了较小的调整,以确保与可空性相关的可用性和性能。

Pub 工具性能改进

Dart 平台通过 pub 客户端工具和 pub.dev 软件包存储库内置了对软件包管理的支持,该软件包存储库在过去一年中增长了 200%,现在拥有近 10 000 个软件包。

此版本中,通过添加对运行时并行获取软件包pub get的支持,并且延迟了pub run预编译,优化了 Pub 工具的性能。

在使用flutter pub get、flutter create创建的新项目上运行的非正式基准测试中,总执行时间从 Flutter 1.12(Dart 2.7)中的大约 6.5 秒减少到 Flutter 1.17(Dart 2.8)的 2.5 秒。在 Flutter gallery 这样更大型的应用中,时间从大约 15 秒减少到大约 3 秒。

管理依赖项的 pub outdated

此版本中,Pub 还新增了一个 pub outdated 命令,它通过将当前使用的软件包版本与 pub.dev 上可用的最新版本进行比较,可以始终使用最新的稳定版本软件包,同时也可以知道其它版本情况。

$ pub outdated

Dependencies Current Upgradable Resolvable Latest

foo 1.3.0 1.3.1 1.3.1 1.3.1

bar 2.0.1 2.1.0 3.0.3 3.0.3

1 upgradable dependency is locked (in pubspec.lock) to an older version.

To update it, use `pub upgrade`.

1 dependency is constrained to a version that is older than a resolvable version.

以上输出信息显示可以使用 pub upgrade 自动升级到 foo 1.3.1,这是 foo 的最新版本;同时还告诉我们,虽然我们可以自动升级到 bar 2.1.0,但还可以使用 3.0.3 版本。由于升级到 bar 3.0.3 是主要版本升级,因此需要通过编辑 pubspec.yaml 文件来选择升级:

dependencies:

foo: ^1.3.0

bar: ^3.0.3

在进行编辑并运行 pub upgrade 之后,pub outdated 现在报告所有依赖项都是最新的:

$ pub outdated

Dependencies Current Upgradable Resolvable Latest

all up-to-date

完整的更新说明查看:

https://medium.com/dartlang/announcing-dart-2-8-7750918db0a