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有哪些经常使用的快捷键,当中还有非常多讲得着实不错.这里就不再狗尾续貂而是谈谈别的这段时间的一些思考.近期增加了开发团队.代码量突突的上去了.同一时候也发现 ...
随机推荐
- [codeforces934D]A Determined Cleanup
[codeforces934D]A Determined Cleanup 试题描述 In order to put away old things and welcome a fresh new ye ...
- 国旗计划(flag)
国旗计划(flag) 题目描述 A国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了n名 ...
- 【BZOJ 2458 最小三角形】
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1551 Solved: 549[Submit][Status][Discuss] Descripti ...
- em,rem
em rem 相对单位: 也可用于设置padding line-height等em相对当前容器的默认字体设置比如,所有浏览器默认字体都是16px,body{ font-size:62.5%}以后即1 ...
- java rsa 解密报:javax.crypto.BadPaddingException: Decryption error
Exception in thread "main" javax.crypto.BadPaddingException: Decryption error at sun.se ...
- [ CodeVS冲杯之路 ] P1063
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1063/ 本来是想写石子合并的,结果把题目看错了,写成了合并果子…… 凑合交了上去,直接A了…… 题目将可以将任意两堆合 ...
- 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)
莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...
- Hoof, Paper, Scissors(USACO)
题目大意: 一种游戏(类似于石头剪刀布):两个人分别给出一个字母,然后比较:H>S,S>P,P>H,我们已知对手的字母顺序,求在前n局中我们最多能赢多少次. 由于出字母的人非常懒,所 ...
- C语言中的“>>”和“<<”
http://baike.1688.com/doc/view-d1750791.html C语言中的“>>”和“<<” [标签:程序设计] 浏览次数:68937提问时间:200 ...
- django使用mysql的设置与迁移
1.创建数据库 create database django_lianxi charset=utf8; 2.django项目文件夹的setting.py设置 Django项目默认 sqlite3 数据 ...