为什么gcc和llvm会混在一起?

铂金大雕 发布于 2012/11/25 11:26
阅读 2K+
收藏 0

NGINX社区官方微服务训练营,深入了解K8s网络,线上课程+专家答疑,立即加入>>>

@踏雁寻花 你好,想跟你请教个问题:为什么gcc和llvm会混在一起?

加载中
1
JavaOlder
JavaOlder
llvm是一个底层虚拟机平台,提供了经过最佳化的IF代码,也就是有个中间层,在这个中间层可以做很多的事情,比如优化和提供给编译器更多的信息,理论上可以支持几乎任何编程语言。llvm默认的前端是clang,当然也可以用gcc做前端。
llvm用c++写的,模块化做的很好,因此可以很好的和clang,gcc等等更多的东西合作,能为ide提供更全的有用信息。而gcc则包含的比较全面,整一个是一个宏结构,没有模块化设计,用c写的,对ide也不太友好(实际上linux社区里似乎对ide一直不感冒)。不过c++版的gcc正在重写中,为了与llvm/clang更好的竞争,而且gcc从5.0开始打算进行模块化设计,所以,以后gcc内部可能会分出很多部分。
就现在来看,gcc大体等同于llvm+clang所提供的功能。
很多人特别羡慕clang那强大的错误诊断信息,其实gcc4.8部分信息诊断能力已经超过它了,比它更准确,所以竞争真的很好,我们可以用到好的东西了。gcc目前的问题就是缺乏模块化设计,这是暂时落后于llvm的地方。
freebsd不用gcc是因为gpl协议,llvm/clang的协议更加自由,但llvm/clang目前的兼容性和参数优化等等方面和gcc还有不小差距,虽然编译后的体积更小了(架构领先优势),但在性能优化方面相比gcc还有很多事情要做。
铂金大雕
铂金大雕
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
赵云30
赵云30
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
少数派派长
少数派派长
貌似是个有趣的事情,关注一下
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部