在了解了 LLVM 的工作原理之后,我对如何生成可移植的低级代码以及如何构建这个“东西”感到非常兴奋。
但是我今天发现了 C 的存在——它似乎与 LLVM 共享一些概念。
所以我正在寻找一些信息来帮助我理解这两个项目之间的主要区别......以及为什么两者都存在。
对我来说,LLVM 看起来有点像编译器基础设施的终极瑞士军刀,而 C 看起来远没有那么先进。
在了解了 LLVM 的工作原理之后,我对如何生成可移植的低级代码以及如何构建这个“东西”感到非常兴奋。
但是我今天发现了 C 的存在——它似乎与 LLVM 共享一些概念。
所以我正在寻找一些信息来帮助我理解这两个项目之间的主要区别......以及为什么两者都存在。
对我来说,LLVM 看起来有点像编译器基础设施的终极瑞士军刀,而 C 看起来远没有那么先进。
它们在低级机器类型系统的表现力上有所不同。
LLVM机器非常具有表现力。另一方面,C 机器将很多责任放在语言前端。引用C-- FAQ: “简单地说,C--没有高级类型——它甚至不区分浮点变量和整数变量。这个模型让前端完全控制表示和类型系统”
在视觉上它们看起来也有很大不同。C--看起来很像 C,LLVM 看起来很像汇编程序。
务实地说,LLVM 现在有更多的动力。它有一个 JIT 编译器,Apple 将它用于3D 管道,人们正在使用它连接到 GCC和各种奇怪而奇妙的东西。有人称之为“几乎荒谬地易于使用”。
另一方面,C--要小得多,可能更容易完全理解。(我想一个有奉献精神的普通人可以完全理解它的方方面面。)