所有其他 Swift 类型的基本类型是什么?

What is the basic type that underlies all other Swift types?

提问人:Frævik 提问时间:9/28/2023 更新时间:9/28/2023 访问量:59

问:

我目前正在尝试在 GitHub 上更好地了解 Apple 的开源 Swift 编译器。在使用 Swift 几年后,我已经习惯了将标准库中的重要类型(如 和)定义为 s 的理念,就像任何其他类型一样(与 Java 和 C 相反,它们以自己的方式处理 and 作为原始类型)。但是,如果是 ,我会假设它是建立在结构中存储为字段(变量)的其他较低级别类型之上的。如果这个类型本身就是一个,那么它是建立在什么类型之上的?IntCharacterstructintcharIntstructIntstruct

从本质上讲,问题归结为以下几点:Swift 中的“root”类型是什么?换句话说:如果我们将程序中的 Swift 类型集合视为归纳定义的集合(用户定义的类型可以使用 和 ,它们本身是建立在其他类型之上的),那么“基本情况”的定义是什么?我假设编译器将所有其他基元类型至少一个作为特殊情况处理。IntCharacter

swift 编译器构造 标准库 类型系统

评论


答:

0赞 gnasher729 9/28/2023 #1

Swift 中有五类类型:类实例、结构、枚举、元组和闭包。

正如你所注意到的,其他语言中的原语通常是 Swift 中的结构,比如 Int、Double、String。可选是枚举。

没有根类型。

评论

0赞 Frævik 9/28/2023
怎么可能没有根类型?编译器或程序员难道不需要某种方法来表示内存中实际的位模式吗?在 C 语言中,会将位存储在内存中。当我们在 Swift 中说时,我们创建一个实例,该实例(因为它是一个结构体)必须以某种方式设置字段的值,该字段实际上会更改内存中的值。如果不存在根类型,如何实现此目的?int x = 5;000...000101let x = 5Int
4赞 Alexander 9/28/2023 #2

在标准库中看到的基元类型都是未公开的内置类型的包装器。这些以 为前缀,据我了解,根本不是 Swift 类型。编译器识别对这些常量的访问,并对其进行特殊处理。Builtin.

我找不到任何列出它们的文档,但我确实找到了 swift::getBuiltinType 函数,它可以将它们全部查找。这些类型包括常见的可疑情况,如整数、浮点数和指针,但也包括更奇怪的情况,如 、 等。RawUnsafeContinuationJob

在撰写本文时,这是撰写本文时的当前列表。我为我所知道的那些添加了一些注释:

评论

2赞 rob mayoff 9/28/2023
顺便说一句,您可以通过将 -parse-stdlib 标志传递给编译器来访问该模块。这就是为什么只有标准库才能访问 .BuiltinBuiltin