漫画 | 打死我也不学编译了!
在上古时代,程序员都用汇编编程,效率低下,非常痛苦
只有那些大神才能使用汇编搞大事情。
软件业的繁荣不能只靠几个大神,还需要千千万万的码农。
IBM公司29岁的巴科斯决心改变这种情况。
这个编程语言就是Fortran,但是当时人们对编译理论了解不多,开发工作既复杂又艰苦。
这时候,语言学家乔姆斯基对自然语言结构的研究给编译器带来了意外之喜。
1957年,经过三年的努力,Fortran编译器终于完成。
突破第一个编译器以后,高级语言便如雨后春笋般发展起来
最为知名,影响力最大的还是C和C++
编译器的理论和实践也逐渐成熟
随后甚至出现了生成编译器的生成器
Lex 和 Yacc生成的程序只是编译器的一部分,编译器的基本结构通常是分为三段。
对一个公司来说,当它开发一个编译器的时候,很少投入资金研发多种前端和后端,这就导致无法通用,无法共享。
后来,开源的GCC编译器最早打破了这种模式。
GCC开源,跨平台,支持多种前端和后端,很快成为Unix和Linux的标准编译器。
围绕着GCC,一个编译王国隐然成形。
苹果公司也决定采用GCC编译自家的Objective-C
但是Objective-C毕竟是个小众的语言,随着时间的推移,苹果公司提出的需求,GCC逐渐满足不了了。
GCC还是个“单体应用”,很难嵌入到其他应用程序当中。
就在此时,一个大神横空出世。
2005年,Chris Lattner加入苹果,负责苹果的编译器,XCode等工具的开发,以及LLVM社区的发展。
他不负众望,把Objective-C搞得风生水起,还开发了一个叫做Clang的LLVM编译器前端,支持C、C++和Objective-C。
模块化的LLVM吸引了很多语言的加盟
不仅如此,现在有很多领域都需要编译技术,但是不需要完整的编译器,模块化的LLVM正好可以大放异彩。
60年间,编译器从最早的把高级语言转化成机器码,到专注后端优化,终于走到了模块化这一步,LLVM成了新的王者。
后记:编译原理一门比较难的课程,我和很多同学聊的时候,有人说:编译太抽象了,太枯燥了,还有人说:打死我也不学编译了(这句话让我印象极为深刻,直接当了标题)。其实不学编译对日常工作影响也不大,大家主要把编译器当做一个工具直接使用,不会去了解内部的实现。真正从事编译器开发人也非常少。
不过学习编译原理能让程序员加深对编程语言和计算机系统的理解,有余力的话还是建议大家去看一下。
(完)
福利时间到!
免费包邮送5本《大话设计模式 Java溢彩加强版》!
畅销15年的超级IT原创书焕然上市
百万读者认可,趣味解读“设计模式+OOP”
JAVA设计模式与面向对象观念同步养成
全彩印刷+三维图表+学习课件=传神解析
全新升级,全新体验
《大话设计模式【Java溢彩加强版】》延续了前作轻松调侃的风格,采用了师生对话的方式展开讨论,其中穿插了大量“接地气”的类比案例,帮助大家迅速“开窍”。
作者精心将本书图表制作成彩色三维形式,阅读起来你会发现,不仅仅是养眼,对一些流程、概念的解说,用彩色三维图表更为精准,学习体验有了质变。
点击下方图片即可抽奖,赶快试试手气吧
PS :没中奖也可以到京东购买,京东有满100减50的活动,不要错过(点击阅读原文可直达)。
漫画 | 打死我也不学编译了!相关推荐
- 【Suatin】不学编译原理就制作语言2——Concrete Syntax Tree
前言 之前的文章 lang:谈谈自制编程语言 lang:C++自定义异常类--用来处理自制编程语言的异常信息 lang:计算器改进版本_默认函数_小数_指数 lang:计算器 lang:使用BNF范式 ...
- 计算机编译原理有必要学吗,计算机程序编译原理学习心得
计算机程序编译原理学习心得 <编译原理>是计算机专业的一门重要课程,正如教材:第一章的引论所述,"编译程序是现代计算机系统的基本组成部分之一"."一个编译程序 ...
- 从C语言到C++成长经历所得的一些技巧和感悟
我介绍几个办法,学习办法,期望你能找到爱好 1.必定要和喜爱编程的,或编程凶猛的,或常常编程的人,在一同,常常探讨问题!初学编程会有许多问题呈现,你自己很 难处理 c是我们必定要学的,它是一种很挨近底 ...
- 为什么会有这么多种程序设计语言?
传说人类建造通天塔触怒上帝,上帝施法使人类语言混乱彼此之间无法交流.这就是说各种各样的语言其实就是祸乱之源--只会导致交流的不便.可是看看如今的程 序设计语言的数量,你会怀疑人类是否又在造" ...
- 坚持与展望——科泰华捷董事长陈榕专访
记者/张蜀 记者手记:1977年高考的大学生意味着什么?让我想起路遥的一篇小说<人生>里的男主人公,当年的天之骄子啊.我较陈榕先生晚几年入清华,当年可能在学校见到过,但没有机会相识.77届 ...
- 如何学好编程%2B(精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你%2529
诶呀 整理的眼睛都疼了 可是还是整理的有点乱 希望能够带给你们很大的帮助哟要珍惜我的劳动成果.谢谢咯 方法(一) 编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说 ...
- 怎样学好编程(个人编程感受)!
前言 编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的<游戏之旅--编程感悟>和梁肇新 ...
- 循环遍历及函数基础知识
for of 专门用来循环数组,或者类似数组结构,不能遍历普通对象,for of 是取每一条的数据 let arr = [1, 2, 3, 4]// value 就是 for of 遍历的 数组的 数 ...
- 【repost】如何学好编程 (精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你...
方法(一) 编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的<游戏之旅--编程感悟>和 ...
最新文章
- UA MATH523A 实分析3 积分理论例题 判断函数可积性的一个题目
- Fiddler 环境和过滤规则详解
- 2019.7.16考试总结
- Linux 退出vi编辑模式
- 奇异值分解(SVD)原理详解及推导(转载)
- 无法扩展该卷 因为群集的数量将超过文件系统_Ubifs文件系统分析
- 【经验教程】支付宝怎么充值手机话费?
- 【c语言】判断一个数n能否同时被3和5整除
- 如何查看国内sci期刊有哪些
- 小米4S_2015911_官方线刷包_救砖包_解账户锁
- android最新版本9.1,微信9.1.0版本
- C语言操作符详解------移位操作符
- 分布式 PostgreSQL 集群(Citus)官方示例 - 多租户应用程序实战
- SHH 工具 隧道窗格
- HTML5+CSS3 鼠标悬停3D立体图片效果
- LeetCode 2.1.10 4Sum
- 整理的最新WebSHell (php过狗一句话,过狗菜刀,2016过狗一句话,2016php免杀一句话)
- 得到轮廓中面积最大的的轮廓
- 公众号如何申请微信支付?
- 绕过新手教程和开始动漫——钛备份的使用