如前文《在36岁的本命年,我失业了》所述,最近的这段时间,不用打卡,时间自然比较充裕,尤其是春节以前,小朋友也放假了,天天嚷着要回老家,于是买了几张火车票,就把老人和小朋友一起送回了老家。考虑到LP一个人在CD上班,于是当天又赶回了CD。
于是,一段逍遥快活的日子重现江湖。但是由于习惯原因,每天差不多7点左右就起床了。有一天,心里想着之前忙于工作和带小朋友,城里面的各大公园已经许久未去了,索性拿一天时间,依靠共享单车和步行,逛逛。
早上从西三环出发,悠悠地骑着共享单车,第一站来到了青羊宫旁边的文化公园,不知道是来得太早了还是快过年了,人丁稀少啊,所以走马观花地快速转了一圈:烈士陵园、茶园、新春花展,文化公园一墙之隔是青羊宫,另外一边靠着琴台路,这个我是知道的,毕竟还是来过多次了,这次突然发现里面还有一座二仙庵。
时间关系,快速地从琴台路步行到一河之隔的百花潭公园,一样的人少,百花潭公园的一大特色就是里面的盆景园,喜欢的话不妨去逛逛。之前,还约着一些同学在这里喝茶、休闲、掏耳朵,一个同学的几十年的耳节还被清理出来了。快速地从靠近少陵路的门出去,少陵路也是有名的酒吧一条街,多年以前还和同学一起在这里小喝过一次,早上的少陵路自然十分冷清,不知道晚上如何,好像现在九眼桥、玉林路的风头远远盖过了它。
骑着单车,沿着锦江一路直奔武侯祠、锦里而去。热门地带当真是热门地带,早上10点左右的锦里门口已经是人山人海,共享单车也停不下,旅游的人真多啊,还有来自北京的小学生组团前来社会实践的。锦里来过多次,自然轻车熟路,不过还是感觉到锦里后面那一片地盘又扩大了许多,又多了许多吃喝玩乐的好去处。身边的外地口音不时传入耳朵,锦里本就是旅游胜地,看来节前提前出来旅游的人更是不少。
马不停蹄地赶到人民公园,爬了一下里面的小山,绕过里面的盆景园,从大爷大妈锻炼身体的场所来到相亲角晃了一晃,优质资源还是那么多,单身的朋友可以去看看,不少牌子上都还写着“”父母在现场”。纪念碑前转了一圈就出去了,本想继续去春熙路闲逛的,一看时间已近12点,于是找个小餐馆吃过回锅肉盖饭后,就去了省图书馆。
心想,在图书馆既可以看看书,又可以坐着休息一下,多好。结果一去,发现座无虚席啊,看书的,上自习的,看来CD人民还是热爱学习的。本想找一些嵌入式操作系统的书,结果发现了Steve Yegge著的《程序员的呐喊》,这本书主要是将Steve Yegge多年的博客文章整理成书,印象比较深的是作者第一次学习编译器原理的课程是没有通过考试的,后来认识到编译器原理的重要性,又再重新修了一次,作者也感叹很多计算机相关的专业课程设置其实没有把编译器原理放在一个正确的位置。刚好在这本书的旁边就是青木峰郎编写的《自制编译器》,顿时来了兴趣,想起了之前浏览过《编译原理》,也就是传说中的 “龙书”,刚好那段时间需要用到elf文件,ld文件,但又不是很熟悉,颇感苦恼,于是浏览了“龙书”。于是,找了个角落翻了翻,可是这中午时分又刚吃了饭,确实一个字,困,一看书,更困,最后想了想,借走吧,想不到这一借走,就给自己找了很多事干,整个春节,也忍不住时不时地翻这本书,当然也忍不住想把自己的心得体会写下来。
书是借了,还是得把城里逛的任务完成,又一路步行天府广场、春熙路、太古里,春熙路依然是人丁兴旺,年轻的面孔层出不穷,太古里感觉确实是高大上,天府广场的安保措施首屈一指。
闹市口的那家开了多年麦当劳的冰淇淋确实不错,第二个半价,一路走来,还是有点疲惫,思想斗争了一下,两个就两个吧,反正今天是在运动减肥中。又来到了宽窄巷子,以宽巷子进、窄巷子转、再从井巷子出,一路走走看看,只是为了增加运动步数。
最后前往浣花溪公园,路过一个没有自行车道的人行天桥,还车,过街,扫码,却发现这边的共享单车小红质量不高啊,这在张眼四处寻望,却感觉缺少了什么东西,猛地想起,书!书!书!刚刚借的《自制编译器》还在前一辆小红的车篮子里,惊的一身冷汗,赶紧跑步过桥,还好,车在,书亦在,命不该绝啊。不过,再看看天色已晚,只能打道回府了,于是还是扫了刚才那辆小红,直奔西三环而去……
拉拉杂杂地讲了这么多,还是回到正题《自制编译器》吧。作为嵌入式开发人员,我觉得不看这本书也罢,总的来说,编译器就是个工具,大家都会用、也都在使用中。突然想起,这几年国内芯片很热很热,大有三年赶超英美的激情,呵呵,还是呵呵吧。
(上述部分2019年2月就写完了,下面部分今天2019年12月15日才写,主要是凌晨4点,因为小朋友要起来上厕所,自己醒来后就辗转反侧,思绪如潮,索性起来……)
学习一下编译器相关知识,能力属于提高阶段。嵌入式开发中,一般用C或者汇编,我们通过编译器编写自己的程序,就可以产生bin文件,至于其中过程其实不明白也没有关系。因为我们只要记住各种编程语言的编程规范即可,比如谭教授那本经典的C语言,当然,细想起来,如果能够知其然并知其所以然,会不会更好?比如如果我的代码写的非常规范,会不会对编译过程及编译结果有好的影响?比如为什么需要关键字,比如unsigned int,我们编写的语句编译器是怎么样识别的?最终又是怎么样成为bin文件的?为什么我的代码老是会报错?编译器又是怎么样知道芯片的ram、flash范围的?全局变量的值到底是怎么样被使用的?局部变量怎么样实现动态使用的?如果使用汇编语言完成了一个程序,怎么样被标准的c程序调用呢?稍微复杂一些的需要用到链接文件,那么到底链接究竟是怎么样工作的呢?(突然想起之前整理过8位机的全局变量与芯片启动的关系理解,后面又学习过arm M系列的启动过程,后续找到之前的记录之后,陆续分享)上述只是各种问题的冰山一角。
写这篇文章的初衷,或者说对编译器感兴趣的初衷,是因为对链接文件不甚清楚,本想借机理清链接文件,本将自己的理解分享出来。写到此时,我想,其实书中对这部分的原理讲的比较清楚,同时基于x86平台给出了样例, 或者读者自行去阅读一下会更好,后续,我可以基于嵌入式平台做一些实验,来展示链接的过程。
对了,一位龚姓前同事购买了此书的电子版,分享给了我,有兴趣的朋友也可找我免费索要,感谢龚同事。下面部分内容直接copy至原书的电子版,同事也夹杂了自己的一些感悟,供大家参考。
本书适合的读者:
●●想了解编译器和解释器内部结构的人
●●想了解 C 语言程序运行机制的人
●●想了解 x86 CPU(Pentium或 Intel Core、Operon等)的结构的人
●●想了解 Linux上的链接、加载和程序库的人
●●想学习语法分析的人
●●想设计新的编程语言的人
本书由以下章节构成。
其中第4 部分链接和加载是我重点感兴趣和学习的部分。
第3 部分汇编代码部分,我早在08年就实践过了,比如使用汇编编写程序,在标准C语言中调用,只是当时的做法是:先使用C语言编写类似程序,在编译器中查看编译器产生的汇编程序,保留头尾的保护、恢复代码,仔细观察参数的传递过程,然后依葫芦画瓢,将中间部分的汇编程序替换即可,阅读本章之后,进一步地理解了这些都是有理论依据,都是有章可循的。
第1 章开始制作编译器本书概要以及了解编译器所需要的基础知识
第2 章C♭和cbc 本书制作的C♭编译器的概要
第1 部分代码分析
第3 章语法分析的概要语法分析的概念及方法
第4 章词法分析cbc 的词法分析(扫描)
第5 章基于JavaCC 的解析器的描述JavaCC 的使用方法(语法部分)
第6 章语法分析cbc 的语法分析
第2 部分抽象语法树和中间代码
第7 章JavaCC 的action 和抽象语法树JavaCC 的使用方法(action 部分)
第8 章抽象语法树的生成根据语法分析的结果生成语法树的方法
第9 章语义分析(1)引用的消解变量的引用和具体定义之间的消解
第10 章语义分析(2)静态类型检查编译时的类型检查
第11 章中间代码的转换从抽象语法树生成中间代码
第3 部分汇编代码
第12 章x86 架构的概要使用Intel 系列CPU 的系统的构造
第13 章x86 汇编器编程x86 CPU 的汇编语言的读法
第14 章函数和变量x86 CPU 架构中函数调用的形式
第15 章编译表达式和语句和栈帧无关的汇编代码的生成
第16 章分配栈帧和栈帧相关的汇编代码的生成
第17 章优化的方法优化程序的方法的概要
第4 部分链接和加载
第18 章生成目标文件ELF 文件的构造和生成
第19 章链接和库链接的种类和库
第20 章加载程序内存中程序的加载及动态链接
第21 章生成地址无关代码地址无关代码及共享库的生成
第22 章扩展阅读为读者的后续学习介绍相关知识
算上这本《自制编译器》,图灵的“自制”系列应该已经有6 本了。从CPU 到操作系统,从编译器到编程语言,再到搜索引擎等具体的应用,俨然已经可以自制一套完整的计算机体系了。
“自制”系列图书都是从日本引进并翻译出版的,本人也有幸读过其中几本。可能有很多读者和曾经的我一样对“自制”抱有疑惑:“在时间就是金钱、时间就是生命的IT 行业,为什么会存在这样的自制风潮?为什么要自制呢? CPU 可以用Intel、AMD,操作系统已经有了Windows、Linux,搜索引擎已经有了Google、Yahoo,编程语言及其对应的编译器、解释器更是已经百花齐放、百家争鸣……”直到翻译完本书,我才逐渐体会到自制是最好的结合实践学习的方式之一。
拿来的始终是别人的,要吃透某项技术、打破技术垄断,最好的方法就是自制。并且从某种程度上来说,自制也是一种创新,可能下一个Google 或Linux 就孕育在某次自制之中。
自制编译器的目的是了解当前实用的编程语言、编译器和OS 的相关知识,绝对不能闭门造车。因此作者使用的C♭ 语言是C 语言的子集,实现了包括指针运算在内的C 语言的主要部分,通过自制一个C♭ 语言的编译器,能够让我们了解C 语言程序编译、运行背后的细节;OS选用Linux,能够让我们知晓Linux 上的链接、加载和程序库;汇编部分采用最常见的x86 系统架构。作者自制的编译器cbc 能够运行在x86 架构的任何发行版本的Linux 上,编译C♭ 代码并生成可执行的ELF 文件。
作者青木先生在致谢中提到了Linux 和GNU 工具等开源软件的开发者。这也是本书的另一大特色:充分利用开源软件和工具。从GCC 到GNU Assembler 再到JavaCC 以及Linux,并非每一行代码都是自己写的才算自制,根据自己的设计合理有效地利用开源软件,既可以让我们更快地看到自制的成果,又能向优秀的开源软件学习。如果要深入学习、研究,那么开源软件的源代码以及活跃的社区等都是非常有帮助的。而如果把自制的软件也作为开源软件上传到Github 上供大家使用,并根据其他开发者提出的Pull Request 不断改进软件,那就更好了。

《自制编译器》-读后感相关推荐

  1. GC13:XO独占游戏《神鬼寓言传奇》公布

    作者: 来源: www.bts668.com 微软日前公布了<神鬼寓言传奇>(Fable Legends),该游戏是此系列作品的新作,将作为Xbox One游戏出现. 这款由狮子头工作室开 ...

  2. Facebook 重金挖不到,ASP.NET 之父,微软大神“红衣教主”传奇

    作者 | 伍杏玲 出品 | CSDN (ID:CSDNnews) 2018 年底,微软"王者归来",时隔 16 年市值重返全球第一.人们纷纷用"力挽狂澜"&qu ...

  3. 乔布斯去世衍生多种周边产品(支持乔布斯请顶)

    各种乔布斯肖像 乔布斯公仔 乔布斯立体纸人 不管你是不是狂热的苹果粉丝,是不是拥有n多的苹果产品,苹果帮主乔布斯都应该值得我们纪念. "为什么说乔布斯改变了世界?没有 iPhone,就不会有 ...

  4. 一战封神!“中国飞人”苏炳添跑出9秒83到底有多牛?

    公众号后台回复"图书",了解更多号主新书内容作者:CDA数据分析师来源:CDA数据分析师 [导读] 在刚刚结束的东京奥运会百米飞人大战上,中国选手苏炳添在半决赛跑出9秒83,刷新了 ...

  5. 乔布斯导演的最后一幕

    连作者也说,他仅仅是这本书的写作者,真正的作者是乔布斯."中信出版社总编辑潘岳近日分享了<史蒂夫·乔布斯传>幕后的故事.这本传记预定期已达100万册,预估最终销量将达到500万册 ...

  6. 30本pdf完整版的经典Linux学习和开发教程和资料下载 android arm java 资料大全

    史上最牛的Linux内核学习方法论   点击下载 我的arm_linux移植笔记   点击下载 S3C2440完全开发流程   点击下载 Linux系统命令及其使用详解完整版   点击下载 Linux ...

  7. 30本pdf完整版的经典Linux学习和开发教程和资料下载 android arm java 资料大全...

    史上最牛的Linux内核学习方法论 点击下载 我的arm_linux移植笔记 点击下载 S3C2440完全开发流程 点击下载 Linux系统命令及其使用详解完整版 点击下载 Linux主要shell命 ...

  8. 养成励志的习惯,一生励志——文指星终极励志

    语言的突破全集 卡耐基 --励志经典     点击下载 人性的优点--卡耐基名著--励志经典     点击下载 人生格言精华总集     点击下载 人生定律与原则--励志经典     点击下载 厚黑学 ...

  9. 养成励志的习惯,一生励志

    语言的突破全集 卡耐基 --励志经典     点击下载 人性的优点--卡耐基名著--励志经典     点击下载 人生格言精华总集     点击下载 人生定律与原则--励志经典     点击下载 厚黑学 ...

  10. 【转】乔布斯经典语录

    2011年8月25日消息,乔布斯辞去了苹果公司CEO的职务.10月6日,传来了他去世的消息.在此缅怀乔帮主的同时,与大家分享乔布斯在世时的经典语录.(来自于<乔布斯传>--神一样的传奇的附 ...

最新文章

  1. JSTL 读取数组 和 字符串连接
  2. p40与p100训练性能对比
  3. 如何拆分PDF,PDF拆分页面的方法
  4. 新媒体技术发展迅猛 手机将让生活产生巨变(转)
  5. Facebook开源了两个无监督翻译模型,只用单语就能训练双语
  6. 关于使用 View Binding 不生效的记录
  7. delphi 操作excel 复选框
  8. html css字体特效,40款CSS+JS文字动画特效html源码
  9. DINO Emerging Properties in Self-Supervised Vision Transformers 论文阅读
  10. c++ packaged_task
  11. java学习(方法)
  12. html中添加水印效果
  13. 项目管理-项目开发相关
  14. java string 加空格_java字符串加入空格
  15. 一元多项式 java_java链表实现一元多项式的合并同类项以及加法
  16. 移动平均法 and 指数平滑法
  17. 科学计算机程序 字表处理软件都是,计算机应用基础知识--1
  18. Linux查看文件夹的大小
  19. 金融申请评分卡(2)
  20. js 编写一个函数,计算任意两个数字之间所能组成的奇数个数

热门文章

  1. 《华仪酒店管理系统》项目研发阶段性总结
  2. VJC案例-填字游戏
  3. 想做游戏次世代角色建模,如何学好人体和五官的雕刻?
  4. 大数据量数据库优化(转)
  5. 安装软件时候出现无效驱动器D
  6. 824c语言程序设计考研试题,2017年西藏大学文学院824计算机专业基础综合之C程序设计考研题库...
  7. ERROR in ./src/main.js Module not found: Error: Can't resolve 'vue-loader' in 'C:\Users\Shinelon\Web
  8. Adobe Photoshop CS3绿色精简版(26M)
  9. P7533 [COCI2016-2017#4] Bridž
  10. 二次剩余--欧拉准则