忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: CUTianrui007

编译器和语言的恩怨情仇(获奖名单已公布) [复制链接]

求职 : Linux运维
论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:15:0815-16赛季CBA联赛之山东
日期:2016-10-31 10:40:10综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00IT运维版块每日发帖之星
日期:2016-02-08 06:20:00数据库技术版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-10 06:20:00黄金圣斗士
日期:2015-11-24 10:45:10IT运维版块每日发帖之星
日期:2015-09-01 06:20:00IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:012015年亚洲杯之巴勒斯坦
日期:2015-05-05 10:19:03
发表于 2016-05-27 17:13 |显示全部楼层
好帖要顶起来

求职 : Linux运维
论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:15:0815-16赛季CBA联赛之山东
日期:2016-10-31 10:40:10综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00IT运维版块每日发帖之星
日期:2016-02-08 06:20:00数据库技术版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-10 06:20:00黄金圣斗士
日期:2015-11-24 10:45:10IT运维版块每日发帖之星
日期:2015-09-01 06:20:00IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:012015年亚洲杯之巴勒斯坦
日期:2015-05-05 10:19:03
发表于 2016-06-02 14:59 |显示全部楼层
知呼上的介绍和评论很详细,书看来真的非常好。前期再威信里也看到介绍了。一直很关注。确实对底层构建程序描述的很详细。

求职 : Linux运维
论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:15:0815-16赛季CBA联赛之山东
日期:2016-10-31 10:40:10综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00IT运维版块每日发帖之星
日期:2016-02-08 06:20:00数据库技术版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-10 06:20:00黄金圣斗士
日期:2015-11-24 10:45:10IT运维版块每日发帖之星
日期:2015-09-01 06:20:00IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:012015年亚洲杯之巴勒斯坦
日期:2015-05-05 10:19:03
发表于 2016-06-02 17:38 |显示全部楼层
龙书看过。不过有这种以思维导图为基础的书,学起来更容易系统化。

论坛徽章:
16
处女座
日期:2014-07-18 14:50:542017金鸡报晓
日期:2017-02-08 10:33:212017金鸡报晓
日期:2017-01-10 15:13:2915-16赛季CBA联赛之深圳
日期:2016-12-15 17:55:53C
日期:2016-10-25 16:00:1515-16赛季CBA联赛之新疆
日期:2016-07-21 14:02:0415-16赛季CBA联赛之江苏
日期:2016-06-30 12:15:04shanzhi
日期:2016-06-17 17:59:31平安夜徽章
日期:2015-12-26 00:06:30综合交流区版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-09-01 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17
发表于 2016-06-03 15:29 |显示全部楼层
我觉得不只是为了学习编译原理而学习编译编译,学习编译原理是为了理解程序编译的过程,写出更高质量的程序。
例如Android里面利用了预处理机制,生成了很多代码。典型的例子Android init程序中keywords.h这个文件定义了init中使用的关键字,它的用法很有意思,在C程序中两次包含了这个问题。它竟然完成了两件事情:
·  第一次包含keyworks.h时,它声明了一些诸如do_classstart这样的函数,另外还定义了一个枚举,枚举值为K_class,K_mkdir等关键字。
·  第二次包含keywords.h后,得到了一个keyword_info结构体数组,这个keyword_info结构体数组以前面定义的枚举值为索引,存储对应的关键字信息,这些信息包括关键字名、处理函数、处理函数的参数个数,以及属性。

论坛徽章:
2
水瓶座
日期:2014-06-12 08:22:39IT运维版块每日发帖之星
日期:2015-08-05 06:20:00
发表于 2016-06-14 06:25 |显示全部楼层

这本书好想要,现在正缺的。。参与参与。。
1:你所理解的编译过程包括哪些?每个过程的作用是什么?
       我所理解的程序的编译过程分为预处理、编译、汇编、链接等几个阶段。
       预处理:预处理相当于根据预处理命令组装成新的C程序,不过常以i为扩展名。
       编译:    将得到的i文件翻译成汇编代码。s文件。
       汇编:    将汇编文件翻译成机器指令,并打包成可重定位目标程序的O文件。该文件是二进制文件,字节编码是机器指令。
       链接:    将引用的其他O文件并入到我们程序所在的o文件中,处理得到最终的可执行文件。

2:你平时用到的编译选项是什么?说明其作用
      -c 只是编译不链接,生成目标文件“.o”
      -S 只是编译不汇编,生成汇编代码
      -E 只进行预编译,不做其他处理
      -S 编译到汇编语言不进行汇编和链接
      -c 编译到目标代码
      -o 文件    输出到 文件

     -ansi       关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性
     -static     此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么
     -share     此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
      -O0
      -O1
      -O2
      -O3
       译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
       -w           不生成任何警告信息。
       -Wall       成所有警告信息。
       -g            生成调试信息。GNU 调试器可利用该信息。
最常用:
       gcc -Wall -g -ansi -o exe main.c 使用标准ANSC模式编译,并且生成警告信息和调试信息


3:如果让你自己做一个编译器,如何下手呢?
         了解编译器的输入(程序源代码)和输出(机器码/某种中间代码),然后试着实现。
         编译器的编写分为 3 个步骤:
         词法分析器,用于将字符串转化成内部的表示结构。
         语法分析器,将词法分析得到的标记流(token)生成一棵语法树。
         目标代码的生成,将语法树转化成目标代码。

4:编译器和语言的关系是什么样的?
       不管是什么语言,编译器的工作都是把他们翻译成机器能识别的机器语言,所以不管是c,c++,basic或者什么其他语言,他们编译链接出来的可执行文件都是差不多的(假设都是x86平台)。
        程序语言可以用来写操作系统和编译器,操作系统用来编译器运行,编译器用来编译程序语言,编出来的东西可以是操作系统和编译器。

论坛徽章:
2
水瓶座
日期:2014-06-12 08:22:39IT运维版块每日发帖之星
日期:2015-08-05 06:20:00
发表于 2016-06-14 06:26 |显示全部楼层
这本书好想要,现在正缺的。。参与参与。。
1:你所理解的编译过程包括哪些?每个过程的作用是什么?
       我所理解的程序的编译过程分为预处理、编译、汇编、链接等几个阶段。
       预处理:预处理相当于根据预处理命令组装成新的C程序,不过常以i为扩展名。
       编译:    将得到的i文件翻译成汇编代码。s文件。
       汇编:    将汇编文件翻译成机器指令,并打包成可重定位目标程序的O文件。该文件是二进制文件,字节编码是机器指令。
       链接:    将引用的其他O文件并入到我们程序所在的o文件中,处理得到最终的可执行文件。

2:你平时用到的编译选项是什么?说明其作用
      -c 只是编译不链接,生成目标文件“.o”
      -S 只是编译不汇编,生成汇编代码
      -E 只进行预编译,不做其他处理
      -S 编译到汇编语言不进行汇编和链接
      -c 编译到目标代码
      -o 文件    输出到 文件

     -ansi       关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性
     -static     此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么
     -share     此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
      -O0
      -O1
      -O2
      -O3
       译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
       -w           不生成任何警告信息。
       -Wall       成所有警告信息。
       -g            生成调试信息。GNU 调试器可利用该信息。
最常用:
       gcc -Wall -g -ansi -o exe main.c 使用标准ANSC模式编译,并且生成警告信息和调试信息


3:如果让你自己做一个编译器,如何下手呢?
         了解编译器的输入(程序源代码)和输出(机器码/某种中间代码),然后试着实现。
         编译器的编写分为 3 个步骤:
         词法分析器,用于将字符串转化成内部的表示结构。
         语法分析器,将词法分析得到的标记流(token)生成一棵语法树。
         目标代码的生成,将语法树转化成目标代码。

4:编译器和语言的关系是什么样的?
       不管是什么语言,编译器的工作都是把他们翻译成机器能识别的机器语言,所以不管是c,c++,basic或者什么其他语言,他们编译链接出来的可执行文件都是差不多的(假设都是x86平台)。
        程序语言可以用来写操作系统和编译器,操作系统用来编译器运行,编译器用来编译程序语言,编出来的东西可以是操作系统和编译器。

论坛徽章:
16
处女座
日期:2014-07-18 14:50:542017金鸡报晓
日期:2017-02-08 10:33:212017金鸡报晓
日期:2017-01-10 15:13:2915-16赛季CBA联赛之深圳
日期:2016-12-15 17:55:53C
日期:2016-10-25 16:00:1515-16赛季CBA联赛之新疆
日期:2016-07-21 14:02:0415-16赛季CBA联赛之江苏
日期:2016-06-30 12:15:04shanzhi
日期:2016-06-17 17:59:31平安夜徽章
日期:2015-12-26 00:06:30综合交流区版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-09-01 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17
发表于 2016-06-14 10:23 |显示全部楼层
本帖最后由 shenlanyouyu 于 2016-06-14 10:23 编辑

回复 35# 陌路巨额投入
4:编译器和语言的关系是什么样的?
       不管是什么语言,编译器的工作都是把他们翻译成机器能识别的机器语言,所以不管是c,c++,basic或者什么其他语言,他们编译链接出来的可执行文件都是差不多的(假设都是x86平台)。
        程序语言可以用来写操作系统和编译器,操作系统用来编译器运行,编译器用来编译程序语言,编出来的东西可以是操作系统和编译器。

我个人认为第四点有些观点太绝对,有些语言是编译成中间代码,执行的时候再解释为机器语言。

   

论坛徽章:
16
处女座
日期:2014-07-18 14:50:542017金鸡报晓
日期:2017-02-08 10:33:212017金鸡报晓
日期:2017-01-10 15:13:2915-16赛季CBA联赛之深圳
日期:2016-12-15 17:55:53C
日期:2016-10-25 16:00:1515-16赛季CBA联赛之新疆
日期:2016-07-21 14:02:0415-16赛季CBA联赛之江苏
日期:2016-06-30 12:15:04shanzhi
日期:2016-06-17 17:59:31平安夜徽章
日期:2015-12-26 00:06:30综合交流区版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-09-01 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17
发表于 2016-06-29 10:43 |显示全部楼层
本帖最后由 shenlanyouyu 于 2016-06-29 10:43 编辑

回复 8# 王楠w_n
老板,这活动到期了,怎么木有响应了。


   

论坛徽章:
135
2015年亚洲杯之日本
日期:2015-04-28 13:32:012015年亚洲杯之朝鲜
日期:2015-05-06 10:16:442015年亚洲杯之日本
日期:2015-05-06 10:21:342015年亚洲杯纪念徽章
日期:2015-05-13 17:16:442015亚冠之北京国安
日期:2015-05-13 17:18:292015亚冠之鹿岛鹿角
日期:2015-05-13 17:19:062015亚冠之德黑兰石油
日期:2015-05-27 16:47:402015亚冠之塔什干棉农
日期:2015-05-28 15:24:122015亚冠之卡尔希纳萨夫
日期:2015-06-01 13:52:392015亚冠之柏斯波利斯
日期:2015-06-04 17:37:292015亚冠之阿尔纳斯尔
日期:2015-06-16 11:31:202015亚冠之塔什干火车头
日期:2015-06-23 10:12:33
发表于 2016-06-29 14:05 |显示全部楼层
今天结贴回复 38# shenlanyouyu


   

论坛徽章:
16
处女座
日期:2014-07-18 14:50:542017金鸡报晓
日期:2017-02-08 10:33:212017金鸡报晓
日期:2017-01-10 15:13:2915-16赛季CBA联赛之深圳
日期:2016-12-15 17:55:53C
日期:2016-10-25 16:00:1515-16赛季CBA联赛之新疆
日期:2016-07-21 14:02:0415-16赛季CBA联赛之江苏
日期:2016-06-30 12:15:04shanzhi
日期:2016-06-17 17:59:31平安夜徽章
日期:2015-12-26 00:06:30综合交流区版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-09-01 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17
发表于 2016-06-30 16:23 |显示全部楼层
回复 39# 王楠w_n



   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP