美文网首页
Flutter 的下一步, Dart 3 重大变更即将在 202

Flutter 的下一步, Dart 3 重大变更即将在 202

作者: 代码我写的怎么 | 来源:发表于2022-12-11 14:17 被阅读0次

    在过去的四年里 Dart 已经发展成为一门高效、可移植的现代化语言,而下一个版本 Dart 3 将达到可靠的 null 安全语言的最后一步。

    作为 null safety 的最后一步,本次将删除几个历史 Dart 和 SDK artifacts,包括删除对 running without sound null safety 的支持

    如今许多现代编程语言都支持 null safety ,比如 Swift、C# 和 Kotlin 等语言,可以在其中将变量声明为非空永远不能保持空值)或可为(可以保存一个值或 null)的情况,这些类型系统会和静态分析结合使用,以检测将 null 赋值给不可为 null 的变量。

    同样,Dart 语言中的 null 安全支持默认情况下使变量不可为 null,并且仅在显式声明时才允许 null。

    在 Dart 3 中,所有 Dart 代码都将使用健全的空安全

    自从 Dart 2.12 引入空安全到现在已经三年了,在此期间开发者可以在没有 null safety 的情况下运行,也可以在具有部分 null safety 的混合模式下运行,也可以在具有完全健全的 null safety 的情况下运行。

    当 100% 的代码(包括所有依赖项)已迁移到 null safety 时,就会出现完全可靠的空安全支持,在此期间 Dart 开发人员有时间一步一步地迁移现有代码,但是支持多种模式会增加开销和复杂性。

    首先,Dart 开发人员需要了解以上三种模式,每当阅读一段 Dart 代码时,就必须检查语言版本以查看类型是否默认为非空、默认可为空或它们的某种组合。

    其次,在我们的编译器和运行时支持所有三种模式会减慢 Dart SDK 的发展速度,这种支持增加了添加新功能的成本和复杂性

    从在 Dart 3 开始,正如之前 2.18 里提前宣布的那样,sound null safety 将是唯一受支持的模式,**小于 2.12 的 SDK 约束的 Pubspec 文件将在 Dart 3 及更高版本中停止解析。

    当开发者将依赖约束设置为小于 2.12(例如// @dart=2.9)时,任何包含语言标记的源代码都将失效。

    根据目前的观测,我们相信此时大约 85% 的 flutter run 执行都使用了空安全,如果你还在剩余的 15% 中,那请在 Dart 3 发布之前迁移,预计在 2023 年年中左右

    Breaking 和 API 更改

    除了 null 安全更改之外,Dart 3 还进行了一些其他更改,以删除 Dart 和核心库 API 中的一些历史 artifacts,这些更改包括:

    • 删除已停用的核心库 API ( #49529 )
    • 删除默认参数值的历史语法 ( #2357 )
    • 要求明确的 tear-offs ( ##2399 )。

    这些更改对迁移到使用 null 安全的代码的影响很小,当第一个 Dart 3 alpha 版本发布时,开发者可以快速测试这些较小的 Breaking。

    Dart 3 的新特性和功能

    Dart 3 也有望包含许多新功能,包括改进与其他编程语言的交互能力和新的语言特性, 这部分内容将在2023 年 1 月 25 日的 Flutter Forward 中详细讨论。

    例如有被称为 patterns 的语言特性,patterns 让 Dart 语言更具表现力,增加了对更多结构化数据的支持,并使用代数数据类型实现了更实用的风格。

    以下代码显示了在一个函数上使用多个返回值的示例,以及将这些返回值解构为单个变量的能力:

    // A function which returns a record -- in this case a pair of two doubles:
    (double x, double y) getLocation(String name) {
     if (name == 'Aarhus') {
       return (56.1629, 10.2039);
    } else {
      ...
    }
    }
    
    // Deconstructing the returned record back into individual variables:
    void main(List<String> arguments) {
     final (lat, long) = getLocation('Aarhus');
     print('Current location: $lat, $long');
    }
    
    // You can also define a hierarchy of classes, and then pattern match on those:
    sealed class Shape {
     double calculateArea();
    }
    
    class Square implements Shape {
     final double length;
     Square(this.length);
     double calculateArea() => length * length;
    }
    
    class Circle implements Shape {
     final double radius;
    ...
    }
    
    double calculateArea(Shape shape) => switch (shape) {
     Square(length: var l) => l * l,
     Circle(radius: var r) => math.pi * r * r
    };
    

    Beyond Dart 3

    目前除了 Dart 3 还有大量并行的潜在的新功能在处理,首先,正如去年提到的, Dart 团队正在努力支持将 Dart 代码编译为 WebAssembly ( Wasm ),Wasm 能让 Flutter Web 在浏览器中作为完整的原生代码运行。

    这是一项艰巨的任务,除了更新 Dart 编译器之外还需要很多额外的工作。它需要与 W3C 和浏览器供应商合作,通过 WasmGC 扩展在 Wasm 中添加对垃圾收集语言的支持。

    其次 Dart 团队正在研究 macros 启用静态元编程,这种强大的机制允许一段代码(宏)在程序编译期间修改和扩展程序的源代码,例如可以减少反序列化 JSON 或创建数据类所需的样板文件

    Dart 3 发布路线

    接下来,Dart 3 将在一系列里程碑中陆续推出,目前的期望围绕这些日期

    • 2023 年 1 月/2 月左右:Dart 3 alpha 发布,它将专注于启用早期的 Dart 3 兼容性测试,目标是让大家能够运行静态分析 ( dart analyze/ flutter analyze),理论上通过 Dart 3 alpha 静态分析的应用或包都可以支持 Dart 3 稳定版。
    • 2023 年 3 月/4 月左右:Dart 3 测试版发布,此版本预览了 Dart 3 中的新功能,开发者可以使用它来试验新功能并就问题或改进建议提供反馈。
    • 2023 年年中左右:Dart 3 稳定版发布,健全的空安全将成为唯一支持的模式。

    总结

    Dart 3 版本计划于 2023 年年中左右发布,它将包含几项重大更改,其中主要是在没有健全的空安全的情况下你的代码将停止运行,计划在 2023 年 1 月或 2 月左右准备好 Dart 3 alpha 版本,可以将其用于 Dart 3 兼容性测试

    在此期间你可以准备:

    • 完成任何未完成的空安全迁移
    • 验证代码未使用任何已弃用的 API
    • 运行 dart fix

    Dart 3 还将包含几个新的强大功能,例如 patterns ,计划是希望在春季发布 Dart 3 beta 版,展示所有新功能,敬请期待~

    作者:恋猫de小郭
    链接:https://juejin.cn/post/7174985128799076389

    相关文章

      网友评论

          本文标题:Flutter 的下一步, Dart 3 重大变更即将在 202

          本文链接:https://www.haomeiwen.com/subject/rfufqdtx.html