Swift 6 引入嵌入式 Swift 用于低级编程

Swift 6 引入新编译模式:嵌入式 Swift

Swift 6 引入了一种新的编译模式,旨在解决嵌入式设备、内核及其他低级代码的特定限制。嵌入式 Swift 是 Swift 语言的一个功能齐全的子集,涵盖大部分语言特性,包括值类型、引用类型、闭包、可选值、错误处理、泛型等。

嵌入式 Swift 的特点

嵌入式 Swift 的编译模型类似于传统的 C 编译器,编译器生成一个目标文件(.o),可以直接与现有代码链接,无需移植任何库或运行时环境。为了适应嵌入式设备,嵌入式 Swift 禁用了需要运行时支持的语言特性,如反射和 any 类型,使得程序无需分发运行时即可运行。

不支持的语言特性

嵌入式 Swift 不支持以下语言特性:

  • Mirror API
  • 协议类型的值
  • AnyAnyObject
  • 元类型(如 let t = SomeClass.Typetype(of: value)
  • 任意类型的字符串化(通过反射实现)
  • Swift 并发支持(正在积极开发中)

尽管禁用了一些特性,Apple 表示这并不影响 Swift 的表达能力和功能,嵌入式 Swift 仍然非常接近“完整”的 Swift,便于编写符合习惯、易于阅读的代码。

应用场景

嵌入式 Swift 可用于开发二进制大小仅为几 KB 的游戏,例如在 Playdate 这样的小型游戏机上运行。此外,它还可以针对各种 ARM 和 RISC-V 微控制器,广泛应用于工业应用。

实际应用

Apple 已经在硬件中使用嵌入式 Swift 开发关键组件,如 Apple Secure Enclave Processor。Secure Enclave 是一个与主处理器隔离的子系统,专门用于保护敏感数据。

编译嵌入式 Swift 代码

要编译嵌入式 Swift 代码,需要指定目标三元组、启用实验性功能标志 -enable-experimental-feature Embedded,并提供源文件集。例如:

$ swiftc -target armv6m-none-none-eabi -enable-experimental-feature Embedded \
  -wmo  input1.swift input2.swift ... -c -o output.o

通常还需要链接设备供应商提供的 C 或 C++ SDK 库。

编译 macOS CLI 程序

嵌入式 Swift 也可用于构建 macOS 命令行程序:

xcrun swiftc hello.swift -enable-experimental-feature Embedded -wmo

当前状态与未来展望

嵌入式 Swift 目前处于实验阶段,可能会发生变化。建议使用 预览工具链 进行开发。目前支持 32 位和 64 位的 ARM 和 RISC-V 芯片,未来将增加对新指令集的支持。

阅读 24
0 条评论