标准库设计

Swift 标准库包含多种数据类型, 协议和函数,包括基本数据类型(例如、)、集合(例如、、)以及 描述它们的协议和对它们进行操作的算法, 字符和字符串,以及低级基元(例如,)。标准库的实现 驻留在 Swift 的子目录中 存储库,进一步细分为:
IntDoubleArrayDictionaryUnsafeMutablePointerstdlib/public

标准库核心

标准库的核心(在 stdlib/public/core 中实现),包括所有数据类型、协议、函数等的定义。

运行时:

语言支持运行时(在 stdlib/public/runtime 中实现),它位于编译器和核心标准库之间。它负责实现语言的许多动态功能,例如强制转换(例如,对于 and 运算符)、类型元数据(支持泛型和反射)和内存管理(对象分配、引用计数等)。与更高级别的库不同,运行时主要以C++或(在需要互操作性的地方)Objective-C编写。as!as?

SDK Overlays

特定于 Apple 平台,SDK 覆盖(在 stdlib/public/Darwin 中实现)对现有 Objective-C 框架提供了特定于 Swift 的添加和修改,以改进它们与 Swift 的映射。特别是,覆盖层为与Objective-C代码的互操作性提供了额外的支持。Foundation

Swift 标准库是用 Swift 编写的,但由于它是堆栈中最低级别的 Swift 代码——负责实现构建其他 Swift 代码的核心数据类型——它与普通的 Swift 代码略有不同。一些差异包括:


访问编译器内置:

访问编译器内置:该模块通常只能由标准库访问,它提供了编译器内置函数(例如,直接创建 SIL 指令)和数据类型(例如,“原始”指针、原始 LLVM 整数类型)来实现对 Swift 编程至关重要的数据类型。Builtin

可见性通常由约定管理

可见性通常由约定管理:由于标准库的编译和优化方式,标准库声明通常需要具有比通常希望的更高的可见性。例如,从不使用修饰符。更重要的是,即使它不是作为公共接口的一部分,也需要制作一些东西是很常见的。在这种情况下,应使用前导下划线来指示公共 API 是私有的。标准库中的访问控制策略记录在docs/AccessControlInStdlib.rst中。privatepublic

重复代码使用 gyb:

gyb 是一种简单的工具,用于从标准库中经常使用的模板生成重复代码。例如,它用于从单个源创建各种大小的整数类型(、、、等)的定义。Int8Int16Int32Int64

测试与编译器紧密耦合:

标准库和编译器一起发展并紧密耦合。核心数据类型(例如,或)的更改可能需要编译器端的更改,反之亦然,因此标准库测试套件存储在与编译器相同的目录结构中,分别存储在test/stdlib和validation-test/stdlib中。ArrayInt