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