精易论坛

标题: llvm编译器框架下clang编译器<易语言SDK> [打印本页]

作者: 心冷、鱼儿    时间: 2020-3-13 19:02
标题: llvm编译器框架下clang编译器<易语言SDK>
本帖最后由 心冷、鱼儿 于 2020-3-13 19:05 编辑

LLVM是Apple官方支持的编译器,而该编译器的前端是Clang,这两个工具都被集成到了Xcode里面。


在很长一段时间里,Apple一直使用GCC作为官方的编译器。GCC作为开源世界的编译器标准一直做得不错,但Apple对编译工具提出了更高的要求。


仗着自己在开源社区的地位,GCC 开发者对Apple的Objective-C语言新增的很多特性不予理睬,甚至当Apple想做的很多功能需要用模块化的方式来调用 GCC时,GCC却一直不给做。一般的公司遇到这种情况,可能都有些受不了,何况是乔布斯领导的Apple呢?


与GCC的不和让Apple一直在寻找一个高效的、模块化的、协议更放松的开源的编译器替代品。最终,Apple相中了Chris Lattner的LLVM。


现在依然就职于Apple的Chris Lattner可是一位大神,他于2000年毕业于俄勒冈州波特兰大学计算机科学专业,同年前往UIUC(伊利诺伊大学厄巴纳香槟分校),攻读计算机科学硕士和博士学位。在UIUC期间,他的GPA是4.0(满分),并不断地研究探索关于编译器的未知领域,发表了多篇论文。在硕士毕业论文中,他提出了一套完整的在编译时、链接时、运行时甚至是在闲置时优化程序的编译思想,奠定了LLVM的基础。


LLVM在Chris Lattner念博士时更加的成熟。首先,LLVM使用GCC作为前端来对用户程序进行语义分析产生 IF(Intermidiate Format),然后,LLVM使用分析结果完成代码优化和生成。这项研究让Chris Lattner在2005年毕业的时候,成为了小有名气的编译器专家。他也因此早早地被Apple相中,成为其编译器项目的骨干。


进入Apple之后,Chris Lattner首先在OpenGL小组做代码优化,把LLVM运行时的编译架在OpenGL栈上,这样OpenGL栈能够产出更高效率的图形代码。这个强大的OpenGL实现被用在了后来发布的Mac OS X 10.5上。同时,LLVM 的链接优化被直接加入到Apple的代码链接器上。


一个好的工具,必须要有用武之地。几年之后,LLVM的机会就来了。Mac OS X 10.6 Snow Leopard的新功能,完全得益于LLVM的技术,而这一个版本,也是将LLVM推向真正成熟的重大机遇。


“一个篱笆三个桩,一个好汉三个帮”,LLVM能够实现很多华丽的功能,要归功于LLVM自身的新前端——Clang。
GCC系统庞大而笨重,因此,Apple决定从零开始写C、C++、Objective-C语言的前端Clang,以求完全替代掉GCC。


Clang于2007年开始开发,C编译器最早完成,在2009年的时候,Objective-C编译器已经完全可以用于生产环境,而在一年之后,Clang基本实现了对C++编译的支持。

Clang一个重要的特性是编译快速、占内存少,而代码质量还比GCC来得高。得益于本身健壮的架构和Apple的大力支持,Clang越来越全能,支持的项目越来越多,如Mac OS X 10.6时代的Xcode和Interface Builder等,皆由Clang编译。Clang的加入也代表着LLVM真正走向成熟。


此外,Clang有一个重要的衍生项目是静态分析工具,能够通过自动分析程序的逻辑,在编译时就找出程序可能的bug,这个功能叫做ARC。ARC的实现让当时的广大开发者们大为惊愕。


除了LLVM核心和Clang以外,LLVM还包括一些重要的子项目,比如一个原生支持调试多线程程序的调试器LLDB和一个C++的标准库libstdc++。不光是Apple,很多的项目和编程语言都从LLVM中取得了关键性的技术。
————————————————
版权声明:本文为CSDN博主「周兆熊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhouzhaoxiong1227/article/details/52166942









当然,上面都是扯淡,其实这个模块就是把clang的全部api、常量和数据类型声明出来了,还有写上了中文注释,但是这个东西并不常用,只能用于专业从事C/C++相关开发的才有用,比如上面提到的静态分析,又或者我封装它的目的,根据头文件自动声明为易语言的API、常量、数据类型。当然这个功能我没有完成,只写了一半,因为离职的原因,代码在公司电脑上,忘记带走了,然后前段时间公司给把电脑重装了,代码也没了。所以我也就把模块发上来了。




注意!!我没有上传clang.dll,这个几十M大,自己安装个llvm,到安装目录下 D:\Program Files\LLVM\bin\libclang.dll (这个是我的路径)复制到源码下就可以玩了。









还是老老老老规矩,回复得源码!!看在我费心费力,劳心劳力,费尽心力,苦苦翻译好几天的份上,给个好评好不好??



作者: 漫步青云    时间: 2020-3-13 19:30
我来支持 下载看看
作者: 小白子    时间: 2020-3-13 19:31
羡慕大佬
作者: 薆要执著    时间: 2020-3-13 19:34
感谢开发
作者: youximeng88    时间: 2020-3-13 19:36
大佬牛皮啊,虽然看不懂
作者: DeHby    时间: 2020-3-13 19:37
感谢分享 辛苦了  

作者: 0010101    时间: 2020-3-13 19:47
虽然看不懂,但是感觉很厉害
作者: 罗泠雨人    时间: 2020-3-13 20:26
看的不是很明白了·

作者: 汉族    时间: 2020-3-13 20:45
辛苦楼主啦
作者: 天雨时晴    时间: 2020-3-13 21:07
不明觉厉
作者: sunmoonstar    时间: 2020-3-13 21:15
专门来顶帖的
作者: wbphs    时间: 2020-3-13 21:29
学习学习代码的原理

作者: 深圳梦    时间: 2020-3-13 21:56
支持开源~!感谢分享
作者: Decat    时间: 2020-3-13 22:04
支持开源~!感谢分享








作者: 315215    时间: 2020-3-13 22:21
大神呀大神
作者: 787327835    时间: 2020-3-14 01:33
支持开源~!感谢分享
作者: happyweeks365    时间: 2020-3-14 07:34
嗯,不知有木有用,试试看了..
作者: 杨明煜    时间: 2020-3-14 09:39
真的感谢.................
作者: 司徒西    时间: 2020-3-14 09:48
        支持开源~!感谢分享
作者: freexx    时间: 2020-3-14 13:04
辛苦了,支持一个
作者: chenliben    时间: 2020-3-14 15:13
感谢分享  
作者: 边缘浪子    时间: 2020-3-14 16:12
#在这里快速回复#很好很强悍,坚持下去哦~
作者: 灵海雪缘    时间: 2020-3-14 18:20
很高端的东西,小白直接不懂,还是下载学习学习

作者: onion52013    时间: 2020-3-14 18:27
1111111111111111111

作者: jspengcf    时间: 2020-3-14 19:45
还是老老老老规矩,回复得源码!!
作者: 韦贝贝    时间: 2020-3-15 09:26
llvm编译器框架下clang编译器<易语言SDK>
作者: w3516330    时间: 2020-3-17 04:36
虽然看不懂 但是还是支持下
作者: 阿龙    时间: 2021-12-5 13:41
感谢大佬开源

作者: zhonghuabaozi    时间: 2021-12-13 22:24
巨佬牛逼!
作者: 阿龙    时间: 2022-2-28 11:05
ATS转LLVMIR要用LLVM的接口,clang包含吗,论坛没有封装好的,只有你这个clang的,最近复习编译原理,想用易语言做个编译器跑在llvm上,没有llvm只能放弃llvm框架。
作者: wmv520    时间: 2022-2-28 11:19
支持开源~!感谢分享。。。
作者: dipingwei    时间: 2022-4-13 11:16
学习,感谢分享
作者: 白云飘飘    时间: 2025-2-21 13:26
学习,感谢分享
作者: 风一样存在    时间: 2025-6-10 13:47
        支持开源~!感谢分享
作者: 风一样存在    时间: 2025-6-10 13:48
        什么都看不懂,只会喊个666。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4