在上古时代,程序员都用汇编编程,效率低下,非常痛苦

只有那些大神才能使用汇编搞大事情。

软件业的繁荣不能只靠几个大神,还需要千千万万的码农。

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的活动,不要错过(点击阅读原文可直达)。

漫画 | 打死我也不学编译了!相关推荐

  1. 【Suatin】不学编译原理就制作语言2——Concrete Syntax Tree

    前言 之前的文章 lang:谈谈自制编程语言 lang:C++自定义异常类--用来处理自制编程语言的异常信息 lang:计算器改进版本_默认函数_小数_指数 lang:计算器 lang:使用BNF范式 ...

  2. 计算机编译原理有必要学吗,计算机程序编译原理学习心得

    计算机程序编译原理学习心得 <编译原理>是计算机专业的一门重要课程,正如教材:第一章的引论所述,"编译程序是现代计算机系统的基本组成部分之一"."一个编译程序 ...

  3. 从C语言到C++成长经历所得的一些技巧和感悟

    我介绍几个办法,学习办法,期望你能找到爱好 1.必定要和喜爱编程的,或编程凶猛的,或常常编程的人,在一同,常常探讨问题!初学编程会有许多问题呈现,你自己很 难处理 c是我们必定要学的,它是一种很挨近底 ...

  4. 为什么会有这么多种程序设计语言?

    传说人类建造通天塔触怒上帝,上帝施法使人类语言混乱彼此之间无法交流.这就是说各种各样的语言其实就是祸乱之源--只会导致交流的不便.可是看看如今的程 序设计语言的数量,你会怀疑人类是否又在造" ...

  5. 坚持与展望——科泰华捷董事长陈榕专访

    记者/张蜀 记者手记:1977年高考的大学生意味着什么?让我想起路遥的一篇小说<人生>里的男主人公,当年的天之骄子啊.我较陈榕先生晚几年入清华,当年可能在学校见到过,但没有机会相识.77届 ...

  6. 如何学好编程%2B(精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你%2529

    诶呀 整理的眼睛都疼了 可是还是整理的有点乱  希望能够带给你们很大的帮助哟要珍惜我的劳动成果.谢谢咯 方法(一) 编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说 ...

  7. 怎样学好编程(个人编程感受)!

    前言 编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的<游戏之旅--编程感悟>和梁肇新 ...

  8. 循环遍历及函数基础知识

    for of 专门用来循环数组,或者类似数组结构,不能遍历普通对象,for of 是取每一条的数据 let arr = [1, 2, 3, 4]// value 就是 for of 遍历的 数组的 数 ...

  9. 【repost】如何学好编程 (精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你...

    方法(一) 编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的<游戏之旅--编程感悟>和 ...

最新文章

  1. UA MATH523A 实分析3 积分理论例题 判断函数可积性的一个题目
  2. Fiddler 环境和过滤规则详解
  3. 2019.7.16考试总结
  4. Linux 退出vi编辑模式
  5. 奇异值分解(SVD)原理详解及推导(转载)
  6. 无法扩展该卷 因为群集的数量将超过文件系统_Ubifs文件系统分析
  7. 【经验教程】支付宝怎么充值手机话费?
  8. 【c语言】判断一个数n能否同时被3和5整除
  9. 如何查看国内sci期刊有哪些
  10. 小米4S_2015911_官方线刷包_救砖包_解账户锁
  11. android最新版本9.1,微信9.1.0版本
  12. C语言操作符详解------移位操作符
  13. 分布式 PostgreSQL 集群(Citus)官方示例 - 多租户应用程序实战
  14. SHH 工具 隧道窗格
  15. HTML5+CSS3 鼠标悬停3D立体图片效果
  16. LeetCode 2.1.10 4Sum
  17. 整理的最新WebSHell (php过狗一句话,过狗菜刀,2016过狗一句话,2016php免杀一句话)
  18. 得到轮廓中面积最大的的轮廓
  19. 公众号如何申请微信支付?
  20. 绕过新手教程和开始动漫——钛备份的使用

热门文章

  1. 05 linux shell脚本 变量的取用echo;变量的设置和修改;变量的使用规范以及示例
  2. Lost connection to MySQL server during query问题
  3. Linux磁盘分区和逻辑卷
  4. JVM之jstat命令
  5. 计算机偏置,深度学习中偏置的作用
  6. TensorFlow2学习七、使用MNIST手写体识别数据集识别自己手写图片
  7. git 更新某个目录或文件
  8. 计算机excel基础知识教程,EXCEL基本操作技巧 一
  9. 摄影师眼中的爱情(完整版)▒┣
  10. app与后台通信完整流程