Goyet指出,Swift语言采用LLVM编译器——顺带一提,Goyet最广为人知的事迹就是对苹果Siri进行了逆向工程。“目前的Swift编译器会接入到LLVM当中,从而生成二进制文件,”他写道。“同时值得指出的是,LLVM与Swift都是由Chris Lattner设计而成。”
相较于针对特定架构生成代码,LLVM能够面向设想中的设备生成汇编代码,而后将其转换为能够切实与目标架构相对接的实际代码。
Goyet这样描述整个处理流程:Swift编译器首先根据要求生成LLVM-IR(即中间表示);LLVM则根据中间表示同时生成ARM ELF文件格式。接下来能够直接使用Android系统之上原生代码语言的Android NDK则生成二进制链接,直接指向以上生成的对象文件。该文件最终被打包成Android应用。
不过实际编码过程当中并不一定会涉及上述全部步骤,Goyet指出。“其中的最大问题在于SwiftCore库的缺失。……就目前而言,苹果公司已经发布了一套面向iOS、OS X以及WatchOS的SwiftCore库。但很明显,其还没有发布任何Android版本。”
不过并非所有Swift代码都需要依托于SwiftCore库。“因此只要我们使用的Swift子集不涉及SwiftCore,则不会出现任何问题,”Goyet解释道。
不过Goyet目前还没有看到任何利用Swift语言开发而成的Android,“这是因为Swift语言本身仅仅是问题中的一个侧面。另一大侧面或者说最难解决的因素在于,其对于Android UI框架的支持非常有限。另外,目前Android系统上也还没有任何可用的Swift UI框架。”
Goyet预计苹果公司为Swift制定的开源计划肯定会将SwiftCore囊括于其中。“接下来在Android平台上实现SwiftCore库应该会成为Swift语言开源重组工作中的重要一环。”