这个 Dart 官方视频指出,Dart 所谓的“健全的 null 安全”比 Kotlin 的 null 安全设计要好,因为它可以根据变量是否声明为 null 来优化代码,以及其他语言(我假设这是指包括 Kotlin 在内的语言) ) 必须进行运行时检查以确保空值安全。
那么,Dart 做了哪些额外的优化呢?
它如何与不支持 null 安全的遗留代码库互操作,同时确保 null 安全?
这个 Dart 官方视频指出,Dart 所谓的“健全的 null 安全”比 Kotlin 的 null 安全设计要好,因为它可以根据变量是否声明为 null 来优化代码,以及其他语言(我假设这是指包括 Kotlin 在内的语言) ) 必须进行运行时检查以确保空值安全。
那么,Dart 做了哪些额外的优化呢?
它如何与不支持 null 安全的遗留代码库互操作,同时确保 null 安全?
那么,Dart 做了哪些额外的优化呢?
最基本的一种优化是,在对数值类型执行计算时,编译器可以(在内部)将它们视为非引用类型(未装箱值)的原始类型。
这是为什么?
因为它们不能为空,因此没有必要将它们用作引用类型的数据(装箱值)。
这是为什么?
因为 null 在 Dart 中表示为 null 常量引用。
如果不需要引用这个常量,那为什么不用值类型而不是引用类型呢?至少在生成的代码中,可以在编译时进行优化。
这一切都要归功于所谓的“强模式”。
强模式结合不可为空的类型可以让你优化已经在编译阶段的代码,这对于 AOT 等不允许在运行时优化代码的模式非常重要,因为它在 RE (读取和执行)模式。
它如何与不支持 null 安全的遗留代码库互操作,同时确保 null 安全?
在我看来,您应该将此作为一个单独的问题提出。