免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: cjaizss

【大话IT】编译器的设计其实远没想象中那么妖魔化 [复制链接]

论坛徽章:
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
发表于 2016-08-16 11:26 |显示全部楼层
爻易 发表于 2016-08-16 11:10
学如逆水行舟,不进则退。一个写编译器、操作系统,能培养出什么样的能力;另一个只是写些无关紧要的边边角 ...


从简单做起,逐步提高能力

论坛徽章:
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
发表于 2016-08-16 11:29 |显示全部楼层
语言的目的是交流信息:一是与人交流,一是与机器交流,故有人的语言与机器的语言。

以人与机器为两端,还设计有不同级别的中间语言以平滑转换

论坛徽章:
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
发表于 2016-08-16 15:18 |显示全部楼层
本帖最后由 MMMIX 于 2016-08-16 15:20 编辑

相对于自己设计编程语言并实现对应编译器/解释器,或者重新为已有编程语言实现编译器/解释器,或者直接研究现有的成熟编译器(GCC,CLang),编译相关技术本身还有更广泛的用途,例如:

1. 配置文件解析
2. 规则文本的解析
3. 代码生成
4. DSL
等等

对于编译相关技术的学习掌握,不但可以让你对现在许多软件如何工作理解更深入,同时在面对许多问题的时候,也能提供一条额外的、往往更高效的思路(这也正是学习编译相关技术的意义所在)。

另外,编译相关技术并不是屠龙之技,而是已经渗透到整个软件系统当中,在从内核到最顶层的用户界面,几乎涉及的每一个软件模块中都能看到它们的应用。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-08-19 06:20:00
发表于 2016-08-16 18:07 |显示全部楼层
本帖最后由 lgw 于 2016-08-16 18:07 编辑


所有语言最终都是编译成机器码

论坛徽章:
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
发表于 2016-08-17 07:22 |显示全部楼层
最终留存的还是语言的两端:给人读的源代码以及给机器执行的机器码。

相比较而言,还是源代码更加重要,只要有源代码,可以随时转换为机器码,而反向转换则更为困难!

由此,围绕源代码的控制权,也会展开一系列的合纵连横。这也从另一方面要求我们掌握编译器设计,从点到链地发展(星火之点->燎原之线)

论坛徽章:
2
2016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之广夏
日期:2016-12-07 08:32:11
发表于 2016-08-17 13:40 |显示全部楼层
回复 23# pinja


    不不不,是柴犬~

论坛徽章:
0
发表于 2016-08-18 17:05 |显示全部楼层
其实如果把虚拟机看作硬件的话,那之上跑的也是“机器语言”

论坛徽章:
0
发表于 2016-08-18 17:11 |显示全部楼层
从事IT行业两年了,最近才知晓语言的编译原理。

请问,为什么说 C# Java Python 等高级语言是虚拟机语言呢?

C/C++呢,他们不需要依靠所谓的虚拟机去解释(翻译)的过程吗?

C/C++编译后 exe可执行文件中是机器码对吧,

Java 编译后的 exe文件是JDK什么才认识的代码,通过JDK来解释翻译执行对吧

(最近在研究使用Python来写Socket通讯,据说性能很好)

------------------------

C/C++最终编译的结果与编译器有关系吗? 比如VS编译的或者使用其他IDE编译。

Python呢? 是否也跟IDE有关系吗? 可以编译成机器码的exe可执行文件吗?

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-08-21 06:20:00
发表于 2016-08-18 17:23 |显示全部楼层
解释型语言有哪些? 编译型语言有哪些? 感觉不需要虚拟机(JDK/.NetFramework)的语言运行起来性能更好。回复 38# micromad


   

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-08-21 06:20:00
发表于 2016-08-18 17:30 |显示全部楼层
用过debug写过程序就能理解 或者masm/nasm
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP