工作五六年还是基层码农?因为你没掌握编译原理

程序IT圈 | 65 2020-06-03 23:23 0 0 0


有人说:编译原理是用于炫耀的屠龙技,我不认同「炫耀」这两个字。编译原理可不是炫技,而是实打实对我们工作有帮助的一门技术。
现代语言的编译器,往往整合了最前沿的技术。掌握真实编译器的运行原理和实现机制,才能吃透语言的核心特性,更高效地运用它,进而提升我们的技术水平。而且,阅读语言编译器的源码,跟踪它的执行过程,可以获得对编译器的第一手理解,是高效学习编译原理的重要途径 我身边不少朋友,尽管理解了编译原理的理论和概念,但难以做到知行合一,把知识与实践相结合,让编译技术真正变成自己手中的高阶技能。 其实,要做到这一点,无非是解决这么几个问题:
1、语法分析方法有自顶向下和自底向上两种,自己动手实现时,该选择哪一种?选择自己手写,还是工具生成?2、语义分析中要做属性计算,但具体到自己用的语言,到底计算了哪些属性?如何完成引用消解和类型检查?3、编译器中会使用 IR ,实际使用中的 IR 到底是什么样子?4、编译器会优化我们写出的代码,但具体到某种语言,其背后的逻辑和优先级是怎样的?如何写出便于编译器优化的代码呢?
类似的问题还有很多,总结起来就一句:我们用的编译器,到底是怎么写出来的。

只有深入了解现代语言编译器的结构、采用的算法和设计上的权衡,在用编译技术完成一个项目时,你才知道在什么地方该用什么技术——掌握更多编译器的设计和实现思路,作为项目的决策依据。 去年,抽空追了个专栏,叫《编译原理之美》,作者是宫文学。他是北京物演科技 CEO,国内最早做 BPM(流程管理平台)和 BI 平台(大数据平台)的创业者之一,后来还做过电子表单和快速开发平台,这些经历都跟编译技术密不可分。所以,他熟知各种语言编译器的实现机制,实战经验非常丰富。 跟着学下来,感觉收获很大。最近,得知他跟极客时间合作,推出了第二季《编译原理实战课》,我第一时间就订阅了,跟了学了几节,很想把这个专栏推荐给你。 在专栏中,他系统梳理了编译原理的核心基础知识,解析 7 大主流语言的编译器源码。通过大量实战案例讲解,带你掌握真实编译器的实现机制与关键算法,进而站在更加宏观的视角,从编程语言的设计层面理解编译原理。
5e3958231bfa3b85e7bf58f8659296f9.webp
?点击上图,免费试读早鸟+口令「bianyi666」立省 40 元,到手仅 ¥89,仅限「前 50 人」有效


他是如何讲解这门课程的?


专栏中,他深入解析了 7 大主流语言的编译器:Java 编译(javac)、Java 的 JIT 编译器(Graal)、Python 编译器(CPython)、JavaScript 编译器(V8)、Go 语言的编译器(gc)以及 MySQL 的编译器。 这些编译器都很有代表性,是我们工作中经常会用到的,各自采用了不同的编译技术,对比分析下来,你可以发现其中的异同点,进而对编译技术有更全面、深入的认知。 内容分为三部分: 预备知识篇:系统梳理编译原理的核心知识体系,加深你对关键概念的理解。学完预备知识,再去看各种编译器的源代码和相关文档,可以更好地将实践与原理结合,并且互相印证。 真实编译器解析篇:研究 7 种主流语言的编译器源码,跟踪它们的运行过程,分析编译过程的每一步是如何实现的,并对一些针对性的编译技术点加以分析和点评。这样,在研究了 Java、Java JIT、Python、JavaScript、Julia、Go、MySQL 这 7 种编译器后,相当于把编译原理印证了 7 遍。 现代语言设计篇:分析总结前面讲过的编译器,进一步提升我们对编译技术的认知高度。学完这一模块,对如何设计编译器的前端、中端、后端、运行时,你会有比较全面的了解,知道如何在不同的技术路线之间做取舍。 宫老师说,课程中的大部分内容,都是他在读源码,跟踪源码执行过程的基础上梳理出来的。在课程设计上,他会以研究真实编译器的运行原理为主要手段,着力于扩大知识版图,增强实战能力,从而达到「行万里路」的目的。 说了这么多,是时候看看目录了。
 b5d2e074e461711dcf27a8ea67e72bef.webp
订阅福利 早鸟优惠+口令「bianyi666」 到手仅 ¥89立省 ¥40,仅限「前 50 人」有效。 订阅后生成海报发给好友,每成功邀请 1 位好友,可得 ¥24 返现。
93909d3760d5cd4de0698bc99da13f32.webp
△ 扫码免费试读 ? 点击「阅读原文」输入优惠口令「bianyi666」最低价 ¥89 入手,仅限 前 50 人
good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter