LLVM 以及 BitCode 泛谈 - Chris Lattner 访谈录

这是看了LLVM之父 Chris Lattner 访谈录,做的小结,只关注LLVM这块。
LLVM 起源
LLVM(Low Level Virtual Machine)

LLVM: 一个模块化和可重用的编译器和工具链技术的集合,Clang是LLVM子项目,是C,C++和Objective-C编译器,因为多模块的复用,所以提供了惊人的编译速度,比GCC快 3 倍。

LLVM 的 byteCode 和 Apple 现在的 bitCode区分
LLVM开始是开源的,将所有代码转换成二进制时就叫做 bytecode – Java 当年也是这么叫的。然而这部分问题很多,然后就有了LLVM2.0,而 2.0 采用的就是BitCode机制。
LLVM 2.0 将所有的代码以比特流(bit stream)而不是字节流(byte stream)的形式编码。

Bitcode 优势:

  1. 因为Bitcode机制,编译器可以通过编译不同代码来存储各种优化方法,这样下次再遇到类似的代码,编译器就会自动启动相关优化机制,使得效率提升。
  2. LLVM 可以让芯片的兼容性变的更好。因为Apple每年都会在芯片上推陈出现,它们转化成二进制的规则不尽相同,LLVM只要每次重新编码并传输成比特流就好了(没听懂)

Bitcode 缺陷: 不能解决 32 位的APP在 64 位机器上的兼容问题。而 Chris Lattner 说这个问题其实应该依靠代码逻辑来解决。
问题:如何通过代码逻辑来解决 32 位 APP 在 64 位机器上的兼容问题。

LLVM三层结构
第一层: Clang 编译器,负责编译各种语言;
第二层:代码优化器,通过模块化操作优化代码,是Bitcode逻辑的主要部分;
第三层:代码翻译器,针对不同平台和GPU将代码翻译成机器语言。

LLDB 一个有着REPL的特性和C++、python插件的开源调试器。LLDB绑定在Xcode内部,存在于主窗口底部的控制台中。

libc++,libc++ ABI: 高性能C++标准库实现,支持C++11

compiler-rt: 为 LLVM和Clang设计的编译器扩展函数库。针对 _fixunsdfdi 和其他目标机器上没有一个核心IR对应的短原生指令序列时(Oh,my god 这是什么),提供高度调优过的底层代码生成支持。

ABI是什么?
Application Binary Interface,应用二进制接口,是APP和操作系统、其应用之间的二进制接口。

—-*参考——
Chris Lattner 访谈录(上)
Transcript of episode 205, an interview of Chris Lattner on January 17, 2017

-------------本文结束谢谢欣赏-------------
Alice wechat