学习Swift背后的编译器基础架构

关于2016年LLVM开发者会议的说明

2016年美国LLVM开发人员会议于11月3日至4日在圣何塞举行。 没有惊喜。 许多演讲者和与会者都来自Apple。 我很幸运有机会参加这次会议。 讲座涵盖了LLVM,Clang,JIT,编译器工具链和构建系统。 LLVM(以前称为低级虚拟机)是模块化和可重用的编译器以及工具链技术的集合,用于开发编译器字体的前端和后端。 它也是由Swift的创建者Chris Lattner在2003年创建的。当然,Swift使用的是LLVM。 因此,如果您对Swift感兴趣,那么您肯定想了解有关LLVM的更多信息。

构建软件的新架构

演讲者:Apple Inc.的Daniel Dunbar

由于某些原因,没有人喜欢CMake。 演讲中介绍了llbuild-一个新的构建系统。 它是围绕可重用​​,灵活和可扩展的通用构建引擎设计的,该引擎能够解决许多类似于“构建系统”的问题。 它支持C,C ++和Swift。 它是Swift开源项目的一部分。 当前,Xcode,Swift操场和Swift包管理器正在使用llbuild。

对于速度,忍者仍然比llbuild快。 但是,丹尼尔(Daniel)提到llbuild在将来可能与忍者一样快。

用CMake开发和发行Clang

演讲者:苹果公司的克里斯·比尼曼

LLVM用于使用autoconf构建系统。 演讲者分享了有关他们如何在LLVM 3.9中迁移到CMake系统的故事。 他给出了CMake的几个原因:

  1. 跨平台构建配置工具
  2. 简单而强大的脚本语言
  3. 在许多平台上支持本机开发和IDE
  4. 活跃的替代开源社区。

他还指出,一个好的构建系统是没人想考虑的。 有人确实向Chris Bieneman问了一个问题:“ llbuild vs. CMake,哪个更好?” Chris Bieneman没有给出答案。 我的理解是llbuild支持Swift,而CMake不支持。

处理寄存器层次结构

演讲者:苹果公司的Matthias Braun

演讲者谈到了编译器代码生成阶段的寄存器分配器。 这是非常有趣的话题。 LLVM的一大特色是LLVM IR使用了无限的单辅助寄存器机器指令集。 在代码生成阶段,寄存器分配器确定从LLVM寄存器到物理寄存器的映射。 这简化并改善了许多编译器优化的结果。 演讲者还展示了寄存器分配器中的最新算法,可将GPU着色器程序的平均寄存器计数减少20%。

也有一些关于Clang静态分析器,调试工具和编译器优化的讨论。 其中大多数处于研究阶段,不适用于大型软件项目。 您可以在https://llvmdevelopersmeetingbay2016.sched.org上查看完整的时间表。

再次,我很高兴听到您对此的看法! 谢谢。