提问人:Frævik 提问时间:9/28/2023 更新时间:9/28/2023 访问量:59
所有其他 Swift 类型的基本类型是什么?
What is the basic type that underlies all other Swift types?
问:
我目前正在尝试在 GitHub 上更好地了解 Apple 的开源 Swift 编译器。在使用 Swift 几年后,我已经习惯了将标准库中的重要类型(如 和)定义为 s 的理念,就像任何其他类型一样(与 Java 和 C 相反,它们以自己的方式处理 and 作为原始类型)。但是,如果是 ,我会假设它是建立在结构中存储为字段(变量)的其他较低级别类型之上的。如果这个类型本身就是一个,那么它是建立在什么类型之上的?Int
Character
struct
int
char
Int
struct
Int
struct
从本质上讲,问题归结为以下几点:Swift 中的“root”类型是什么?换句话说:如果我们将程序中的 Swift 类型集合视为归纳定义的集合(用户定义的类型可以使用 和 ,它们本身是建立在其他类型之上的),那么“基本情况”的定义是什么?我假设编译器将所有其他基元类型至少一个作为特殊情况处理。Int
Character
答:
Swift 中有五类类型:类实例、结构、枚举、元组和闭包。
正如你所注意到的,其他语言中的原语通常是 Swift 中的结构,比如 Int、Double、String。可选是枚举。
没有根类型。
评论
int x = 5;
000...000101
let x = 5
Int
在标准库中看到的基元类型都是未公开的内置类型的包装器。这些以 为前缀,据我了解,根本不是 Swift 类型。编译器识别对这些常量的访问,并对其进行特殊处理。Builtin.
我找不到任何列出它们的文档,但我确实找到了 swift::getBuiltinType
函数,它可以将它们全部查找。这些类型包括常见的可疑情况,如整数、浮点数和指针,但也包括更奇怪的情况,如 、 等。RawUnsafeContinuation
Job
在撰写本文时,这是撰写本文时的当前列表。我为我所知道的那些添加了一些注释:
VecNxT
:连续 s 的向量,其中N
T
0 < N ≤ 1024
RawPointer
RawUnsafeContinuation
:支撑UnsafeContinuation
Job
:支撑ExecutorJob
DefaultActorStorage
NonDefaultDistributedActorStorage
Executor
NativeObject
BridgeObject
SILToken
UnsafeValueBuffer
PackIndex
Word
:一个机器大小的词IntLiteral
FPIEEE16
:16 位浮点数 (IEEE754 半精度)FPIEEE32
:支撑浮点
数 (IEEE754 单精度)FPIEEE64
: underpins双精度 (IEEE754 双精度)
FPIEEE80
:支撑Float80(x86
扩展精度浮点数)FPIEEE128
:128 位浮点数(IEEE754 四重浮点数)FPPPC128
: “PowerPC 2xDouble”AnyObject
:支撑AnyObject
评论