苹果公司最近开放了 Swift 语言的源代码,而我一直想看看将 Swift 移植到 POWER Linux 需要做多少工作。
和许多使用 LLVM 的语言一样,Swift 是一种相对简单的语言。几天前,我提交了一个补丁,非常感谢 Dmitri Gribenko 帮助我完成审校工作,而支持小端 PowerPC64 已使 Swift 位于 上游位置 。
顺利完成该移植需要注意一些事项。首先,编译器需要是用 C++ 编写的,而不是用 Swift 编写的。似乎 用 Swift 重写 Swift 编译器 是一个共同请求,但坚持使用 C++ 可以让引导过程变得更简单。我还必须引导其他编译器 (Rust),这些编译器是用各自的目标语言编写的,而这要求从受支持的架构执行交叉构建,此操作从来都不会顺利完成。
通常,各种语言需要链接到 C 对象和库,所以它们需要知道 C 调用约定规则。很多这方面的知识并不适用于 LLVM(它位于 Clang 前端),结果,大部分基于 LLVM 的语言最终仍会重复老路( Rust 、Julia)。Uli Weigand 向我展示,Swift 避开了 Clang 来提供这种逻辑,这真的很有帮助。因为各种语言中存在的所有重复,将这种逻辑引入到 LLVM 库而不是 Clang 中可能很有意义。
尽管该移植属于上游操作,但 此处 仍有一个必要的 LLVM 更改—— Swift 有一些调用约定不同于 C,我希望某个 POWER LLVM 团队能够可怜可怜我,帮我解决这个问题。
在 POWER 上构建 Swift 可在 Ubuntu 15.10 上轻松完成,只需记得在签出源代码后添加上述 LLVM 补丁。 该测试包的运行只有几个故障:
Failing Tests (2): Swift :: 1_stdlib/VarArgs.swift Swift :: IRGen/c_layout.sil Expected Passes : 7061 Expected Failures : 78 Unsupported Tests : 699 Unexpected Failures: 2
更重要的是,hello world 在正常运行:
# uname -m ppc64le # cat hello.swift print("Hello, world!") # swift hello.swift Hello, world!
还需要做一些工作来支持大端 PowerPC64,但小端似乎就能满足任何 hello world 需求。
原文请访问 IBM developerWorks / Developer CentersSwift@IBM。