C--和LLVM有什么区别?

58

在了解了一些LLVM的工作原理后,我对生成可移植低级代码以及这个“东西”如何构建的模块化感到非常兴奋。

但是今天我发现了C--的存在,它似乎与LLVM共享一些概念。

所以我正在寻找一些信息来帮助我理解这两个项目之间的主要区别......以及为什么两者都存在。

对我来说,LLVM看起来有点像编译器基础架构的终极瑞士军刀,而C--则显得不太先进。


7
显然,在标签中不能有“-”符号。那就用cminusminus吧。 - aaronasterling
使用“mm”是表示减减的常见方式。我相信它被用作许多C++绑定(例如glibmm)的玩笑。“glib--”。我不认为新手会知道要搜索cmm。 - Matt Joiner
我刚刚添加了一个C--标签(已经被其他两个问题使用过)。 - Keith Thompson
1
@ThomasM.DuBuisson:你为什么说“完全不同”?从你的第一个链接中可以看出:“Cmm是C--语言的GHC实现。”虽然我不知道你20个月前发表评论时是否正确。 - dubiousjim
@dubiousjim 我不知道,也许是因为我相信了吧?无论如何,Cmm并不是C--——你引用的段落继续提到它们之间存在重大差异。 - Thomas M. DuBuisson
显示剩余2条评论
1个回答

54
他们在低级机器类型系统的表达能力上有所不同。 LLVM机器相当具有表现力。另一方面,C--机器则将很多责任放在了语言前端。引用自C-- FAQ: "简单来说,C--没有高级类型——甚至不区分浮点变量和整数变量。这种模型使得前端完全掌控表示和类型系统" 此外,它们在视觉上也有很大不同。C--看起来很像C,而LLVM则很像汇编语言。

从实际应用来看,LLVM现在有更多的发展动力。它有一个JIT编译器,苹果正在将其用于3D渲染管道,人们正在使用它连接到GCC以及各种奇怪美妙的事情。有人称它 "几乎是非常容易使用的".

另一方面C--要小得多,可能更容易完全理解。(我想一个有一定执着心的普通人可以完全理解所有方面.)


1
所以,如果我理解正确,主要区别在于这些编译器使用的中间表示的抽象级别。谢谢! - Alois Cochard
6
@Alois Cochard,就我所知,是这样的。我不是编译器专家,只是在 Stack Overflow 上扮演一个角色。 :-) - Prof. Falken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接