Dart 2.8 同期发布
我们同样为大家带来了 Dart SDK 的新版本: Dart 2.8。Dart 社区保持着惊人的增长,如今有数百万 Flutter 开发者使用 Dart 作为针对客户端优化的开发语言,在各个平台上构建高速流畅的应用。我们仍在努力完成即将推出的空安全 (null safety) 功能,使 Dart 成为一种更优化的语言,打造高速且稳定的用户界面。我们准备了一些激动人心的新功能,让开发者在管理依赖关系时更加高效。
Dart 平台通过 pub 客户端工具和 pub.dev package 库内置了代码包管理功能。在过去的一年里,pub.dev package 库增长了 200%,现在已经拥有近 10,000 个 package。作为持续改进 Dart 生态系统的一环,Dart 2.8 SDK 为 pub 客户端工具带来了两个改进: 更强的 pub get 性能,以及一款新工具,可确保您的 package 依赖始终保持最新。
pub 客户端工具 https://dart.dev/tools/pub/cmd pub.dev https://pub.dev/
为空安全奠基
应用崩溃的一个常见原因是代码试图使用一个恰好为空 (null) 的变量。Tony Hoare 爵士于 1965 年在 ALGOL 编程语言中引入了空引用,他在 2009 年 QCon 演讲中,把空引用称为 "价值十亿美元的错误"。在某些情况下,空值是有用的;但难点在于如何把这些有用的情况甄别出来。在过去的一年中,我们一直忙于在 Dart 中打造健全的空安全支持。这种支持将扩展类型系统,以表达始终不可空的变量;类型系统也会是完全健全的: Dart 编译器和运行时都将信任这些类型,并能够在类型系统保证变量不为空的情况下生成优化过的代码。
QCon 演讲 https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/ 空安全 https://github.com/dart-lang/language/issues/110
Dart 公告列表 https://groups.google.com/a/dartlang.org/g/announce/c/JwPWiC0jTiU 重要改动 https://github.com/dart-lang/sdk/issues/40686 问题反馈页 https://github.com/dart-lang/sdk/issues 在 DartPad 里体验空安全 https://nullsafety.dartpad.cn/53257b6da4cb128dc1e069df64748ed1
更优质的 package 生态
改进 pub.dev 的可发现性 https://medium.com/dartlang/improved-discovery-on-the-dart-package-site-9bfe24c3d7d3 Verified Publishers https://medium.com/dartlang/verified-publishers-98f05466558a Flutter Favorite https://flutter.dev/docs/development/packages-and-plugins/favorites
Dart 2.8 发布工具性能改进
Flutter Gallery https://github.com/flutter/gallery
使用 pub outdated 管理依赖
Dart 代码中的依赖关系会被收集到 pubspec 文件中。当您运行 pub get 命令,从 pub.dev 中获取 package 时,pub 版本求解器 (使用 PubGrub 算法) 会运行一个进程来得出满足 pubspec 中所有约束条件的所有依赖项的最新版本。请注意,pub 使用的是单版本方案,您的应用中只包含每个 package 的单一版本,这个方案可以确保您的应用获得尽可能小的体积。
pubspec 文件 https://kw-staging-dartlang-2.firebaseapp.com/tools/pub/pubspec PubGrub 算法 https://medium.com/@nex3/pubgrub-2fb6470504f
最佳开发实践 http://dart.dev/tools/pub/dependencies#best-practices pub upgrade 命令 https://dart.dev/tools/pub/cmd/pub-upgrade 语义兼容 https://dart.dev/tools/pub/dependencies#version-constraints
我们来看一个例子。假如您正在构建一款应用,这款应用的 pubspec.yaml 包含下列内容:
运行 pub get,这款工具会创建一个 pubspec.lock 文件,包含如下版本信息:
version checker https://plugins.jetbrains.com/plugin/12400-flutter-pub-version-checker pubspec assist https://marketplace.visualstudio.com/items?itemName=jeroen-meijer.pubspec-assist
Dart SDK 现在通过 pub outdated 支持发现新版本。如果您使用的是支持 Dart 或 Flutter 的 IDE,请使用 Pub outdated 指令,这个指令在 pubspec.yaml 文件被打开时会显示。或者通过终端运行 pub outdated 或者 flutter pub outdated 命令:
下一步
性能改善、重要改动,以及全新的 pub outdated 命令,现已加入稳定版 Dart 2.8 SDK 和稳定版 Flutter 1.17 SDK。我们建议您尽快开始使用 pub outdated,掌握自己项目中依赖的健康状况!
重要改动 https://github.com/dart-lang/sdk/issues/40686 Dart 2.8 SDK https://dart.dev/get-dart Flutter 1.17 SDK https://flutter.dev/docs/get-started/install pub outdated https://dart.dev/tools/pub/cmd/pub-outdated
pub 问题反馈页 https://github.com/dart-lang/pub/issues SDK 问题反馈页 https://github.com/dart-lang/sdk/issues
推荐阅读