17

这个 Dart 官方视频指出,Dart 所谓的“健全的 null 安全”比 Kotlin 的 null 安全设计要好,因为它可以根据变量是否声明为 null 来优化代码,以及其他语言(我假设这是指包括 Kotlin 在内的语言) ) 必须进行运行时检查以确保空值安全。

那么,Dart 做了哪些额外的优化呢?

它如何与不支持 null 安全的遗留代码库互操作,同时确保 null 安全?

4

1 回答 1

1

那么,Dart 做了哪些额外的优化呢?

最基本的一种优化是,在对数值类型执行计算时,编译器可以(在内部)将它们视为非引用类型(未装箱值)的原始类型。

这是为什么?

因为它们不能为空,因此没有必要将它们用作引用类型的数据(装箱值)。

这是为什么?

因为 null 在 Dart 中表示为 null 常量引用。
如果不需要引用这个常量,那为什么不用值类型而不是引用类型呢?至少在生成的代码中,可以在编译时进行优化。

这一切都要归功于所谓的“强模式”。
强模式结合不可为空的类型可以让你优化已经在编译阶段的代码,这对于 AOT 等不允许在运行时优化代码的模式非常重要,因为它在 RE (读取和执行)模式。

它如何与不支持 null 安全的遗留代码库互操作,同时确保 null 安全?

在我看来,您应该将此作为一个单独的问题提出。

于 2021-01-15T19:40:37.827 回答