LLVM每日谈之二十 Everything && Clang driver
近期在读<Getting Started with LLVM Core Libraries>。这是读的第一本LLVM的书。非常多地方尽管讲的是自己知道的东西。可是也给人耳目一新的感觉,让人感觉之前有些不确定的东西,或者没有联系起来的知识点一下子贯通了,那感觉非常酸爽。
1.先谈谈题目里的Everything。
LLVM每日谈之十六中,以前提到过:Everything is a value.主要讲的是重要的LLVM IR的C++类都是Value的子类,同一时候在对IR的详细操作中,由于LLVM IR使用的是SSA,所以能够把非常多的东西直接看成Value,而且也能够当做Value去操作,这样就非常方便了。我觉的这句话非常经典,是属于点睛之笔的一句话。理解了这句话,有种豁然开朗,境地猛一下提升的感觉。详细内容能够去參照LLVM每日谈之十六。
在读<Getting ...>这本书的时候,遇到了另外一个Everything:Everything is a lib.这句话相同的经典,相同的高境地。之前我依据源代码结构,自己猜測LLVM整个架构下的所有产品基本上都是依照库的形式去组织代码的。甚至有的工具在是一个工具的同一时候,也是一个库。
这句话证实了我的看法,LLVM的源代码是依照库的形式去组织的。这对理解整个LLVM的源代码,有非常大的帮助,尽管不过一个架构方面的知识,可是能够让人对架构的理解提升不少。
所以:
Everything is a lib.
Everything is a value.
2. Clang driver。
Clang是LLVM框架以下的一个前端,这是无需置疑的。可是非常多人easy忽略Clang driver。这个方面之前我也有过考虑,也是从读<Getting ...>这本书彻底的理清楚了。
把LLVM作为编译器使用的时候。命令行使用的“clang”事实上并非前端Clang,而是指的是Clang driver;在命令行使用的“Clang cc1”也指的不是前端Clang,而指的是Clang编译器。这当中不仅包括了前端Clang。还包括了LLVM Core部分等。Clang driver不只调用了前端Clang,同一时候还调用了LLVM Core,而且应为LLVM没有自己的Linker的缘故,在编译的最后阶段,还调用了系统的linker。LLVM的linker产品lld仍然在开发中。
所以假设把前端Clang和Clang driver分清楚,就好像分清楚了LLVM Core和LLVM框架一样,不同的概念指代的是不同范围的东西。假设不搞清楚。那么对之后的学习和工作。会造成非常多的困扰。
所以:
Clang driver是一个驱动,一个包括编译所有阶段的驱动,不同于前端Clang,也不同于编译器Clang。
LLVM每日谈之二十 Everything && Clang driver的更多相关文章
- [置顶] LLVM每日谈之十五 LLVM自带的examples
作者:snsn1984 在LLVM源码的目录下,有一个目录叫做examples,这个目录下边有几个LLVM的例子,初学者一般不会太关注这些例子,但是这些例子确实是精华中的精华,在LLVM的学习过程中不 ...
- LLVM每日谈之十九 LLVM的第一本系统的书<Getting Started with LLVM Core Libraries>
作者:史宁宁(snsn1984) LLVM最终有了一本系统的书了--<Getting Started with LLVM Core Libraries>. 这本书号称是LLVM的第一本书, ...
- Qt浅谈之二十App自动重启及关闭子窗口
一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 int ma ...
- Qt浅谈之二十App自动重启及关闭子窗口(六种方法)
一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 int ma ...
- LLVM每日谈21 一些编译器和LLVM/Clang代码
作者:闪亮宁(snsn1984) 一些自己的收藏LLVM/Clang代码,而他自己写一些一点点LLVM/Clang译器的代码.在这里把这些代码库分享出来,欢迎大家交流探讨. 1.crange http ...
- Qt浅谈之二十六图片滑动效果
一.简介 博客中发现有作者写的仿360的代码,觉得其中图片滑动的效果很有意思,特提取其中的代码.并加上类似mac的画面移动的动画效果. 二.详解 1.代码一:界面滑动(QWidget) (1)slid ...
- 每日算法之二十六:Substring with Concatenation of All Words
变相的字符串匹配 给定一个字符串,然后再给定一组同样长度的单词列表,要求在字符串中查找满足下面条件的起始位置: 1)从这个位置開始包括单词列表中全部的单词.且每一个单词仅且必须出现一次. 2)在出现的 ...
- Eclipse用法和技巧二十六:浅谈快捷键
网络上到处都是eclipse有哪些常用的快捷键,其中还有很多讲得着实不错,这里就不再狗尾续貂而是谈谈别的这段时间的一些思考.最近加入了开发团队,代码量突突的上去了,同时也发现关于快捷键还是有很多细节, ...
- Eclipse使用方法和技巧二十六:浅谈快捷键
网络上到处都是eclipse有哪些经常使用的快捷键,当中还有非常多讲得着实不错.这里就不再狗尾续貂而是谈谈别的这段时间的一些思考.近期增加了开发团队.代码量突突的上去了.同一时候也发现 ...
随机推荐
- ubuntu启动报错 Errors were found while checking the disk-drive for /
开机报这个错误,主要原因是硬盘检测不通过导致的,下面介绍两种方法规避该问题: 修改grub 这个方法网上比较多,直接贴过来: 进入Ubuntu启动菜单时,光标选中 *Ubuntu 后,按键盘上的 e ...
- RHEL退出RHN
清除原有数据 rm -rf /etc/sysconfig/rhn/rhn_systemidrm -rf /var/cache/yum/*yum clean all 加载刷新源 yum repolist ...
- 转:Android Log
在调试代码的时候我们需要查看调试信息,那我们就需要用Android Log类. android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以 ...
- 结构型设计模式之代理模式(Proxy)
结构 意图 为其他对象提供一种代理以控制对这个对象的访问. 适用性 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用P r o x y 模式.下面是一 些可以使用P r o x y 模式常见 ...
- mysql server5.7 找不到my.ini,只有my-default.ini【mysql全局配置文件】
起因是在尝试将csv文件导入mysql的table时,出现如下错误: “The MySQL server is running with the --secure-file-priv option s ...
- TemplateBinding和Binding
TemplateBinding是Binding的一个轻量级版本,它失去了成熟版本Binding的很多功能,比如继承内容引用(inheritence context referencing),Relat ...
- com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class
保存信息如上: 我在添加一个支持库的时候遇的问题,这个库com.yanzhenjie:album:1.0.5 这是由于v4包重复导致的,在网上我也找过多种解决方案 用了这种,方式 configur ...
- 13.OpenStack常用命令
常用的命令 使用trove create创建数据库 trove create name --size= --databases DBNAME \ --users USER:PASSWORD --dat ...
- 2.tornado请求与响应
之前我们介绍了tornado的基础流程,但还遗留了一些问题.今天我们就来解决遗留问题并学习新的内容 settings,使用tornado.web.Application(handler, **sett ...
- Openstack ceilometer
https://www.cnblogs.com/liguangsunls/p/6879879.html