Dart 抽象原语实现

Dart abstract primitives implementation

我正在查看基本 dart 类型(double、int、String 等)的实现,我发现其中许多 class 是 abstract。我想知道如果这些 classes 是 abstract 那么哪个 class 实现了它们?当这些 class 甚至无法实例化时,如何将对象分配给特定类型?例如,

double 是一个 abstract class 我不能像

那样实例化它
var d = double();

但是那又如何呢

var d = 2.5;
print(d is double);

打印 true? dart 如何知道 ddouble 的对象?

Dart 平台库分为 public 您正在查看的共享代码和内部 platform-dependent 代码(“补丁文件”),后者为已声明的函数提供实现external,并且还提供平台所依赖的其他内部机制(然后还有 run-time 系统的原生内容)。

那些特定于平台的文件包含 类 的声明,这些声明实现了 intString 等类型。规范说你不能子类化 intString,但运行时系统无论如何都会这样做。您的“原始”对象是那些隐藏的 sub-classes 抽象接口的实例。

run-time 系统可以(并且确实)进一步优化其中一些 类 的 表示 。例如,VM 有一个名为 Smi(“小整数”)的 int 子类型,它将值存储在指针中而不是在堆中分配对象,而 Web 平台实现 int 作为一个普通的 JavaScript 数字。当您调用它们的方法时,它们必须特殊对待这些值,因为它们的结构与其他对象不同。但这是一种优化,您可以认为这些值只是由内部隐藏 类.

实现的