前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跟我一起深入浅出学编译

跟我一起深入浅出学编译

作者头像
iMike
发布2019-09-16 19:40:26
9220
发布2019-09-16 19:40:26
举报
文章被收录于专栏:运维之美运维之美

众所周知,编译技术是计算机科学史上的明珠之一。如果说整个互联网的发展是构建在编译技术和编程语言之上也毫不为过。

编译器是啥?就是一个程序,它可以阅读某一种编程语言编写的代码,并把这些源代码翻译成另外一种等价的程序,也就是源程序 ——> 目标程序。如果目标程序是个可执行的机器语言程序,那就可以被用户直接调用,产生输入和输出结果,比如 C 语言就是这样编译型语言。

解释器呢,是另外一种语言处理器,它并不通过翻译的方式生成目标程序,而是一边解释一边执行,从用户角度看,解释器直接利用了用户提供的输入源程序去执行指定的操作。 Java 语言就是结合了编译和解释的过程。一个 Java 源程序首先编译成一个成为字节码的中间表示形式,就是 class 或 jar,然后再交给虚拟机对得到的字节码加以解释,这样就可以实现跨平台运行这些字节码程序。

Python 也是半编译半解释的语言,Python 的解释器还有不少版本,比如 Cpython、Jython, Pypy 等,也有字节码 pyc 文件。JavaScript 就是解释型语言了。理解了这些内容,我们就会对编程语言有更透彻和清晰的理解,也更容易学习和掌握更多的编程语言,并在不同场景下发挥其最大的功效。

不过,有程序员可能会觉得,咱也不会去设计一门新的编程语言,有必要学习编译原理吗?学了有什么用呢?

实际上,编译原理不是用于炫耀的屠龙技,程序员在工作中经常会碰到需要编译技术的场景,比如:

1、编写界面模板引擎; 2、为项目编写各种各样的 DSL; 3、深度理解甚至开发出 Spring、Hibernate、阿里巴巴 Druid 这样的工具。

除此之外,解析用户输入,防止代码注入,为前端工程师提供像 React 那样的 DSL,像 TypeScript 那样把一门语言翻译成另一门语言,像 CMake 和 Maven 那样通过配置文件来灵活工作,运维工程师分析日志文件等等高级别的需求,都会用到编译技术。

编译技术,就是把高级语言的代码翻译成为计算机可以理解和运行的二进制代码的技术。掌握了编译技术,你可以获得什么能力呢?太多了,比如:

1、让你的软件支持公式和脚本,从而具有更强的灵活性; 2、有能力参与基础软件的研发,因为它们很多都会用到编译技术,比如 Hibernate、Spring、大数据系统等等; 3、编写特定领域语言,解决领域问题; 4、写出高效、高质的代码,成为更优秀的开发者; 5、更好地理解和学习新的语言,降低学习成本,快速跟进技术潮流。

除了实践性强,学习编译技术对于提升程序员的职场竞争力也很重要。理解了底层机制,才能更深入的思考问题和解决问题。学习编译原理,能让你从前端的语法、代码优化、与硬件结合等维度,加深对计算机的理解,提升工作中解决疑难杂症的能力。

程序员想要保持长期的竞争力,一定是在底层知识下功夫,然后做到一通百通。也许你以后不会成为编译器开发者,但学好编译原理,一定会让你终生受益。

如何深入理解并实践编译原理?

很多读者反馈说,知道编译技术的重要性,也很希望能啃下来,但总是会遇到许多问题:

1、作为底层技术,编译原理出了名的晦涩难懂,学习完全没有头绪; 2、网络上的资料过于抽象和理论化,篇幅长,讲解枯燥; 3、畏难情绪严重,学习编译原理简直成了心魔。 在这里帮大家找到一个非常全面的编译原理知识框架图资料,能帮你更好的理解和实践编译原理,克服畏难情绪,这张图出自极客时间专栏《编译原理之美》,作者是宫文学。

这门课如何让你认识到编译原理之美呢

在这个课程里,作者会从前端与后端两个层面来讲解编译原理的核心技术点,用具体的案例带你理解抽象的原理,帮助你建立信心,克服畏难情绪,让你在这个过程中一步步趟过雷区,在工作中真正用到编译技术。

课程具体分为三个部分:

第一部分:实现一门脚本语言 主要聚焦编译器前端技术,通过具体实例,带你了解词法分析、语法分析、语义分析的原理,实现一门脚本语言,并用工具提升效率。

第二部分:实现一门编译型语言 主要聚焦编译器后端技术,带你了解如何生成目标代码和对代码进行优化,并引入 LLVM 工具,最后生成可执行的文件能支持即时编译,并经过了多层优化。

第三部分:面向未来的编程语言 人工智能与编译技术结合是否会出现人工智能编程?这个模块将对编译技术的发展趋势进行分析,帮你更好地把握未来技术发展的脉搏。

1 分钟看看目录,为了帮你更加体系化的掌握编译器核心技能,我们将编译原理的内容精简到了 30 多节,但绝对干货满满,能让你真正学懂、落地实践编译原理。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奇妙的Linux世界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何深入理解并实践编译原理?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档