免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: CUTianrui007
打印 上一主题 下一主题

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

论坛徽章:
1
摩羯座
日期:2013-11-29 18:02:31
21 [报告]
发表于 2016-05-22 22:22 |只看该作者
通过图解来说编译原理,还是第一次听说的。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
22 [报告]
发表于 2016-05-23 14:37 |只看该作者
Zhihu 上关于本书的一些评价,大家有想买的可以参考:https://www.zhihu.com/question/43538570

论坛徽章:
19
处女座
日期:2014-07-18 14:50:5415-16赛季CBA联赛之北京
日期:2019-09-16 15:39:1415-16赛季CBA联赛之上海
日期:2019-09-15 15:29:0415-16赛季CBA联赛之山西
日期:2017-03-09 10:58:232017金鸡报晓
日期: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
23 [报告]
发表于 2016-05-23 14:59 |只看该作者
3:如果让你自己做一个编译器,如何下手呢?
针对这个问题,最近新出版了一本书《自制编译器》 http://www.ituring.com.cn/book/1308,可以从该书中获取帮助。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
24 [报告]
发表于 2016-05-23 18:58 |只看该作者
自己动手,丰衣足食

自己动手写编译器、链接器 ,自制CPU,自制操作系统,自制脚本语言,自己动手写搜索引擎。。。已经能够成套批发了

论坛徽章:
1
摩羯座
日期:2013-11-29 18:02:31
25 [报告]
发表于 2016-05-24 11:27 |只看该作者
回复 24# 爻易

我只能感慨,我上学那会,电脑都买不起,更不要说这么多图书了。
现在的孩子真幸福。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
26 [报告]
发表于 2016-05-24 11:36 |只看该作者
CUTianrui007 发表于 2016-05-24 11:27
回复 24# 爻易

我只能感慨,我上学那会,电脑都买不起,更不要说这么多图书了。


各个时代有各个时代的烦恼,也有各个时代的幸福。

书太多了也不好读啊,一天48小时都不够用。知识爆炸古时也出现过,庄子有同样感慨:吾生有涯,知识无涯!

论坛徽章:
12
寅虎
日期:2013-12-04 20:37:4915-16赛季CBA联赛之广东
日期:2017-08-22 19:23:1215-16赛季CBA联赛之上海
日期:2016-06-18 23:05:05操作系统版块每日发帖之星
日期:2016-06-06 06:20:00操作系统版块每日发帖之星
日期:2016-06-05 06:20:00操作系统版块每日发帖之星
日期:2016-06-03 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之巴勒斯坦
日期:2015-02-10 21:38:08卯兔
日期:2014-10-31 20:42:23申猴
日期:2014-06-11 17:15:10处女座
日期:2014-05-22 09:00:1815-16赛季CBA联赛之广夏
日期:2017-09-25 23:37:46
27 [报告]
发表于 2016-05-25 15:44 |只看该作者

窝其实一直想研究gcc的源代码,但是三天打鱼两天晒网,一直没看懂。

这本书围绕gcc源码,倒是挺合我意的。哪位看了的来说说到底如何。

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
28 [报告]
发表于 2016-05-26 11:20 |只看该作者
本帖最后由 lyhabc 于 2016-05-26 11:20 编辑

你平时用到的编译选项是什么?说明其作用
-j 加快编译速度

gcc/g++ 编译器

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-25 06:20:002017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:33:2115-16赛季CBA联赛之新疆
日期:2018-04-23 13:55:2315-16赛季CBA联赛之辽宁
日期:2018-07-23 08:59:12
29 [报告]
发表于 2016-05-27 14:36 |只看该作者
1:你所理解的编译过程包括哪些?每个过程的作用是什么?
预处理:预处理相当于根据预处理命令组装成新的C程序,不过常以i为扩展名。
编译:    将得到的i文件翻译成汇编代码。s文件。
汇编:    将汇编文件翻译成机器指令,并打包成可重定位目标程序的O文件。该文件是二进制文件,字节编码是机器指令。
链接:    将引用的其他O文件并入到我们程序所在的o文件中,处理得到最终的可执行文件。

2:你平时用到的编译选项是什么?说明其作用
以GCC为例
-O 优化参数。后面可以跟数字表示优化级别-O0表示不优化,-O1,-O2,-O3优化程度依次递增。大部分平台最高级别是-O3,也就是说3以后的数字基本都没用。另外建议大家最高只用到-O2。大部分开源操作系统经过千锤百炼都是使用-O2参数编译的。优化级别开得太高对于调试不利。为了优化,编译器可能会打乱部分代码的顺序,造成我们单步跟踪的时候会发现在C源代码里乱跳。
另外还有一个-Os表示为代码大小进行优化,用它可以生成尽量短小的机器码。
-E 表示仅仅对代码进行预处理不编译。也就是仅仅将头文件包含和宏定义展开。如果没有用-o指定输出文件则将预处理结果输出到控制台上。
-c 表示仅仅汇编及编译代码,不进行链接。也就是将源代码编译成.o文件。
-S 表示仅仅汇编而不进行编译及链接。也就是将源代码翻译成汇编指令。gcc -S生成的文件阅读起来不如用objdump反编译.o文件生成的结果舒服。建议想分析汇编指令采用objdump命令反编译。
-o filename 指明输出文件名。一般配合-E -c -S三个命令使用
-ansi 表示除了ANSI C标准之外其他特性都认为语法错。比如//单行注释。需要注意的是,这个选项只是严格执行大部分ansi标准。
-std= 后面可以跟c89 c99 gnu89等标准。表示编译器使用哪个标准进行编译。比如使用c89标准就用-std=c89,如果想一些gcc的扩展特性就用-std=gnu89。这个gnu89是默认值,也就是什么都不指定的时候就是用c89标准+gcc的扩展。-ansi就相当于-std=c89
-pedantic 严格执行ANSI C标准。一般与-ansi配合使用可以让源代码严格遵循ANSI C标准。可以打印出-Wall以外更多的告警信息。
-w 关闭所有告警提示
-Wall 虽然是-Wall但是不是打开所有告警提示而是大部分,但下面的-W开头的告警需要单独打开。
-W 对某些告警显示更详细的信息
-Wfloat-equal 浮点数直接使用==判断是否相等时告警
-Wtraditional 如果使用了原始C语言里有而C标准化后被废弃的特性就告警
-Wshadow 对shadow变量进行告警。比如:
有个全局变量nCount,这时你写的函数有个参数也叫nCount。编译器就会告警提示你,说局部参数nCount起作用而全局nCount不起作用。如果你用意不是如此就需要修改代码了。
-Werror 把所有的告警都转化为编译错误。只要有告警就停止编译。
-g 生成调试信息。后面象-O一样用数字表示信息丰富程度。不跟数字默认为-g2,-g1是最基本的。-g3连宏信息都附加进去。有些调试器可以在调试时利用这些信息来展开宏。一般只要用-g。注意附加调试信息将显著增加ELF文件大小,但不会影响生成代码的大小。
-fstrict-aliasing  后面单独介绍
-mlong-calls 对于arm平台,如果想编译出来的.o文件能被shell下ld命令动态加载就需要加上此参数。不然会提示
Relocation value does not fit in 26 bits.
btw:这条是王璐玮试出来的。我偷学来的。
-D 定义宏。
-fvolatile 强制所有指针访问都是volatile类型的,也就是强制去内存取数据。如果你不确定是否所有指向设备地址空间的指针都是volatile类型声明的建议加上这个参数。会损失优化效果。
-I dirname 指示预处理器把dirname加入到include文件搜索路径里来。

3:如果让你自己做一个编译器,如何下手呢?
这个,没啥头绪。。

4:编译器和语言的关系是什么样的?
编程语言(programming language),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的,简单讲,编译器就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序。

求职 : 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
30 [报告]
发表于 2016-05-27 17:09 |只看该作者
自由开源和闭源软件的最大区别就是自由开源软件你可以学习到任何深度并得到很多人的帮助。闭源软件则因为大家都需要考虑赚钱,所以总是没有真正意义上的学写,更谈不上什么帮助。问题是很多时候你的需求和问题闭源软件的那些公司永远也搞不明白,你花了钱其实买回来的是个和你想象中根本不一样的玩意
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP