我目前正在尝试更好地了解 GitHub 上的 Apple 开源 Swift 编译器。使用 Swift 几年后,我已经习惯了将标准库中的重要类型(如
Int
和 Character
)定义为 struct
的理念,就像任何其他类型一样(与 Java 和 C 不同,它们处理int
和 char
以自己的方式作为原始类型)。但是,如果 Int
是 struct
,我会假设它是基于其他一些较低级别的类型构建的,该类型作为字段(变量)存储在 Int
结构中。如果这个类型本身就是 struct
,那么 it 是基于什么类型构建的?
从本质上讲,问题归结为: Swift 中的“根”类型是什么? 换句话说:如果我们将程序中的 Swift 类型集合视为归纳定义的集合(用户定义的类型可以使用
Int
和 Character
,它们本身是基于其他类型构建的),什么定义了“基本情况”?我假设编译器将至少一种作为所有其他类型基础的基本类型作为特殊情况进行处理。
Swift 中有五类类型:类实例、结构、枚举、元组和闭包。
正如您所注意到的,在其他语言中属于原语的东西在 Swift 中通常是结构体,例如 Int、Double、String。选项是枚举。
没有根类型。
您在标准库中看到的定义的原始类型都是未公开公开的内置类型的包装器。它们以
Builtin.
为前缀,据我所知,根本不是 Swift 类型。编译器识别对这些常量的访问,并给予它们特殊处理。
swift::getBuiltinType
函数,它可以查找它们全部。这些类型包括常见的类型,如整数、浮点数和指针,但也包括更奇怪的情况,如 RawUnsafeContinuation
、Job
等。