这本书的序言、后记写的都让我很有感触!mark:

后 记

总有曲终人散时,不知不觉我们已经完成了对UCC 编译器的剖析,一路走来,最深的体会仍然是“纸上得来终觉浅,绝知此事要躬行”。按这个道理,理解UCC 编译器的最好办法应是:“直接阅读其源代码,思考UCC 编译器在不同的执行点应处于怎样的状态,加入一些打印语句,输出相应的调试信息来验证自己的判断是否正确,如果发现缺陷,就写一些测试程序来触发缺陷,然后修改UCC 编译器的源代码。”在遇到困惑时,或许拙作能带来一点点的帮助和提示,但拙作不能代替也不应取代对UCC 源代码的主动阅读。源代码分析的相关’书籍很容易带来一个副作用,即读者在书籍的牵引下被动地看书,而忽视了对源代码本身的主动阅读。主动思考和被动阅读所带来的效果是完全不一样的。
LLVM 和GCC 的功能已经足够强大,也有足够庞大的程序员社区在支撑其不断发展和改进。而UCC 几乎不可能与这些编译器媲美,UCC 编译器最大的优点在于它的规模和复杂度都在一个C 程序员单枪匹马就可以掌控的范围内。只要愿意付出努力,一定可以较好地搞明白廿匚仁编译器,从而更好地用好C 语言这个简洁有力的利器。UCC 编译器最适合的读者可能是在校的大学生,有时间,有精力,且暂时还不用考虑写代码养家糊口,可以静下心来练好专业基本功。能有机会在一线参与编译器开发的程序员少之又少,但攻克UCC 编译器这座山头的意义在于它能让我们获得攻克其他山头的能力,这可能就是所谓“磨刀不误砍柴工”。当然,选择怎样的山头来练兵,源于我们自己的兴趣。从练基本功的角度出发,我们可以选择自己感兴趣的其他山头来攻克,比如麻省理工大学的xv6 操作系统,而不一定要选择UCC 编译器。XV6 操作系统是甘川艾V6 系统在x86 平台上的重生。每个人心中都有自己的偶像,当我们在谈论某某是我的偶像时,其潜台词往往是“我们希望自己能成为那样的人”。绝大部分人都无法达到自己偶像的高度,但偶像很大程度上会指引我们前进的方向。20 世纪70 年代诞生的C 和UNIX 影响了一代又一代的程序员,对整个1丁行业也产生了深远的影响。阅读UCC 源代码和XV6 源代码,比捧着编译原理和操作系统的教材应该有趣得多,这也是我们向伟大的先行者DennisRitchie 和Ken Thompson 致敬的最好办法,其实也是学习编译原理和操作系统的最有效方法之一。有了源代码级的感住认识后,再去补充理论知识,才会得到更好的升华。
CPU 由于物理上的限制,其主频已不再无限提高了,摩尔定律在单CPU 上已渐渐失效,现在和未来的方向应是多核、分布式和并行。在分布式或者并行的环境下,如何为程序员提供一个易用的编程环境,或许是未来若干年编译方向的研究热点。当然还有优化,毕竟我们始终在追求“没有最好,只有更好”.
限于水平和能力,书中不当之处敬请批评与指正。

作 者

《C编译器剖析》后记的更多相关文章

  1. PL/0编译器实践---后记

    花了几天时间,把清华版的<编译原理>一书中的PL/0编译器实践了一遍.颇有收获,记录如下: 理解代码的技巧,如何理解一份代码,比如这个程序,其逻辑相对于一般程序就比较复杂了,如何翻译,虚拟 ...

  2. C编译器剖析PDF文档及UCC编译器162.3

    http://blog.csdn.net/sheisc/article/details/42387857 http://blog.csdn.net/sheisc/article/details/455 ...

  3. 我的书籍《深入解析Java编译器:源码剖析与实例详解》就要出版了

    一个十足的技术迷,2013年毕业,做过ERP.游戏.计算广告,在大公司呆过,但终究不满足仅对技术的应用,在2018年末离开了公司,全职写了一本书<深入解析Java编译器:源码剖析与实例详解> ...

  4. 解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析

    许可证编译器 (Lc.exe) 的作用是读取包含授权信息的文本文件,并产生一个可作为资源嵌入到公用语言运行库可执行文件中的 .licenses 文件. 在使用第三方类库时,经常会看到它自带的演示程序中 ...

  5. Android源码剖析之Framwork层后记篇(硬件消息传递、apk管理、输入法框架、编译过程)

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 既然写到后记篇,就代表本系列到此为止,暂时告一段落:其他一些Manager随后有时间再补,就像源码的 ...

  6. C++编译器函数模版机制剖析 - 函数模版的本质

    思考:为什么函数模板能够和函数重载放在一块.C++编译器是怎样提供函数模板机制的? demo 1 #include <cstdio> #include <iostream> u ...

  7. stl源代码剖析:编译器的提前定义位置集设置

    眼下我的工作环境还是win.全部演示也用VS或者cygwin这些环境作为基础. 1.配置项目的附加include目,添加提前定义位置集设置,编译器会把它添加include路径,比方在某个目录中定义一个 ...

  8. WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler

    插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...

  9. C++编译器模板机制剖析

    思考:为什么函数模板可以和函数重载放在一块.C++编译器是如何提供函数模板机制的? 一.编译器编译原理 什么是gcc gcc(GNU C Compiler)编译器的作者是Richard Stallma ...

随机推荐

  1. 学习笔记 MYSQL报错注入(count()、rand()、group by)

    首先看下常见的攻击载荷,如下: select count(*),(floor(rand(0)*2))x from table group by x; 然后对于攻击载荷进行解释, floor(rand( ...

  2. 拖拽手势和清扫手势冲突时(UIPanGestureRecognizer和UISwipeGestureRecognizer冲突时)

    故事发生在这样的情境上:给整个控制器添加了一个拖拽手势,然后又在控制上的每个Cell上加了左滑清扫手势,然后问题来了:只有拖拽手势起作用,而左滑手势没有效果了,然后怎么解决这个问题呢!先上图: 当给整 ...

  3. 解决Android后台清理APP后,程序自动重启的问题

    最近解决了一个Android APP的bug,发现APP在被后台清理后,会自动重启.现象很奇怪,有的手机(HTC)后台清理后,程序会再次重启,而有的手机(小米)则不会.猜想可能是小米手机内部做了处理, ...

  4. Android版本和API Level对应关系

    http://developer.android.com/guide/topics/manifest/uses-sdk-element.html Platform Version       API ...

  5. (九)Maven坐标详解

    Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等.为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就 ...

  6. VMware的三种网络连接方式区别

    关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三 ...

  7. MySQL 5.7.10 自动备份、自动清理旧备份集

    http://blog.csdn.net/mchdba/article/details/51527081 MySQL版本是5.7.10-log社区版本,需要进行备份,但是备份时间长了后,磁盘不够用,所 ...

  8. 跳入linux的第一个坑-因为安装Ubuntu导致的硬盘被误格的恢复.(记TestDisk使用记录)

    不看废话,直接跳到操作说明 前几日心血来潮想把家中的旧笔记本换成Linux操作系统,算是在业余生活中正式投入Linux的怀抱.说干就干,发行版选择了Ubuntu,下载了Ubuntu16.04的ISO, ...

  9. RHEL6.3系统安装

      进入安装界面   这里选择跳过   点击下一步   选择安装语言     选择键盘   选择系统储存方式   选择是否格式化储存设备     给安装的系统一个计算机名     选择时区   给ro ...

  10. Practical oral English

    1.如果你继续发烧,我就去请医生过来If your fever continues, I'll send for the doctor.2.在这么大的停车场里,我是永远都找不到我的车的I'll nev ...