0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么要学习编译器课程

电子工程师 来源:网络整理 2021-03-30 10:49 次阅读

所有优秀的计算机科学学院都提供了编译器课程,但是相对比较少的学校把它作为本科课程的必修部分。这篇文章回答了这个问题:为什么需要学习这门课?即使你从没打算过编写编译器。

我写这篇文章的其中一个原因是,尽管我在读本科时很喜欢编译器课程,但是我几乎看不到它的实际作用。大多数资料看起来要么简单易懂,要么很深奥(事实上,我找到的大部分编译器资料都是很枯燥的。)无论怎样,我用了几年时间总结了为什么这类课程会如此有用的实际原因。原因如下。

分析器和解析器无处不在

严谨的程序员不得不去了解分析器和解析器,因为我们不会总是只写一些小程序。每次你写一个可扩展的程序或处理一种新类型的输入文件,你都需要了解它们(分析器和解析器)。格林斯潘第十定律:

“任何C或Fortran程序复杂到一定程度之后,都会包含一个临时的、只有一半功能的、不完全符合规格的、充满bug的、运行速度很慢的Common Lisp实现。”

我们花费如此多的时间在这些事情上,我们可以使用一次性的小技巧来做这些事情的每一个,或者我们利用60年的理论和实际知识去解决问题,并把它做对。重要的是:你应该什么时候借用已存在的代码或者使用已存在的工具?理论知识在什么时候可以提供帮助?哪些语言设计原则可以运用在我们日常使用的小语言?

你能更好地编写正确的代码

编译器应该把输入的语言正确地翻译成合法的程序。为了达到这个目标,编译器开发者必须了解整个输入语言,包括一些普通程序员没见过的罕见问题。这个理解过程是通往程序语言本质的重要一步,它和我们平时写代码时所看到的不一样。举个例子,我在学习了顺序点(sequence points),未定义行为(undefined behaviors),和常用的算术转换的细节后,完全改变了我对C语言的理解。C编译器编写者已经掌握这些概念了,但大多数初级和中级程序员都不知道这些概念。毫不夸张地说,一旦你知道语言的本质,你会以不同地方式和更准确地思考这个语言。这适用于任何的语言,特别是像C和C++这些语义不清晰的语言。

你可以编写更快的代码

通过了解编译器,你可以很清晰地知道哪些优化是编译器可以优化的,和哪些是编译器不能进行优化的,无论他们看起来是多么的合理和简单。你将会学到哪类代码通常会建造最佳代码块,为什么会这样和这些代码做了什么。你会知道为什么一些代码可以拥有更好的性能,比如使用一半寄存器组缓存滤波系数一半寄存器组缓存样本的FIR滤波器,它和使用普通优化器实现的不一样。你和你喜欢的编译器是一个能创建快速代码的团队,你可以使用它高效地工作,或者使用提前优化等无意义的技巧来修改它。

其次,编译器后端是与目标架构密切关联的,当然,现代的架构都尽量提供汇编程序员友好的平台,而且离着不远了。通过理解编译器后端和它为什么是这样产生代码的,你会对计算机架构的操作有更好的理解。

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7409

    浏览量

    87691
  • 分析器
    +关注

    关注

    0

    文章

    92

    浏览量

    12486
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49043
收藏 人收藏

    评论

    相关推荐

    C7000优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    C7000优化C/C++<b class='flag-5'>编译器</b>

    Keil编译器优化方法

    我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
    的头像 发表于 10-23 16:35 315次阅读
    Keil<b class='flag-5'>编译器</b>优化方法

    嵌入式学习-常用编辑之GCC编译器

    、GCC编译过程GCC编译器编译过程经过预处理,编译,汇编,链接等4步才能够生成可执行文件。预处理:主要实现将头文件展开,宏定义替换以及
    发表于 08-27 10:17

    AI编译器技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统编译器的功能,如将高级语言编写的源代码转换为机器可执行的代码,还融入了人工智能技术
    的头像 发表于 07-17 18:28 1456次阅读

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性、优化策略、适用范围以及技术复杂性等方面。以下是对两者区别的详细探讨,旨在全面解析其内在差异。
    的头像 发表于 07-17 18:19 1668次阅读

    深度学习编译器和推理引擎的区别

    深度学习编译器和推理引擎在人工智能领域中都扮演着至关重要的角色,但它们各自的功能、应用场景以及优化目标等方面存在显著的差异。以下是对两者区别的详细探讨。
    的头像 发表于 07-17 18:12 1186次阅读

    Meta发布基于Code Llama的LLM编译器

    近日,科技巨头Meta在其X平台上正式宣布推出了一款革命性的LLM编译器,这一模型家族基于Meta Code Llama构建,并融合了先进的代码优化和编译器功能。LLM编译器的推出,标志着Meta在人工智能领域的又一重大突破,将
    的头像 发表于 06-29 17:54 1453次阅读

    SEGGER编译器优化和安全技术介绍 支持最新C和C++语言

    SEGGER编译器是专门为ARM和RISC-V微控制设计的优化C/C++编译器。它建立在强大的Clang前端上,支持最新的C和C++语言功能。 除其他外,其主要功能包括: 1) 尺寸优化:通过调整
    的头像 发表于 06-04 15:31 1397次阅读
    SEGGER<b class='flag-5'>编译器</b>优化和安全技术介绍 支持最新C和C++语言

    C语言:嵌入式开发中的关键编译器角色

    嵌入式程序开发跟硬件密切相关,需要使用C语言来读写底层寄存、存取数据、控制硬件等,C语言和硬件之间由编译器来联系,一些C标准不支持的硬件特性操作,由编译器提供。
    发表于 04-26 14:53 540次阅读
    C语言:嵌入式开发中的关键<b class='flag-5'>编译器</b>角色

    QT开发学习笔记1(安装交叉编译器

    QT安装交叉编译器
    的头像 发表于 02-18 10:02 853次阅读
    QT开发<b class='flag-5'>学习</b>笔记1(安装交叉<b class='flag-5'>编译器</b>)

    Embedded Studio 编译器教程

    最近入手先辑的HPM6750,需要使用Embedded Studio 编译器来做开发,各位推荐一下学习资料。
    发表于 02-04 08:01

    Triton编译器的原理和性能

    Triton是一种用于编写高效自定义深度学习原语的语言和编译器。Triton的目的是提供一个开源环境,以比CUDA更高的生产力编写快速代码,但也比其他现有DSL具有更大的灵活性。Triton已被采用
    的头像 发表于 12-16 11:22 2720次阅读
    Triton<b class='flag-5'>编译器</b>的原理和性能

    TVM编译器的整体架构和基本方法

    有将近两个月没有学习一些新东西,更新一下博客了。一直在忙公司的一个项目,是做一款支持LSTM和RNN的通用架构加速IP。自己恰好负责指令编译工作,虽然开始的指令比较粗糙,没有一套完整的编译器架构
    的头像 发表于 11-30 09:36 2277次阅读
    TVM<b class='flag-5'>编译器</b>的整体架构和基本方法

    为什么C语言进行编译

    为什么我们编写的C语言进行编译?什么是编译编译时发生了什么? 机器无法理解我们编写的C语言,而编译就是将面向人类的高级语言转换成为面向机
    的头像 发表于 11-24 15:47 1249次阅读
    为什么C语言<b class='flag-5'>要</b>进行<b class='flag-5'>编译</b>

    编译器的优化选项

    一个程序首先要保证正确性,在保证正确性的基础上,性能也是一个重要的考量。编写高性能的程序,第一,必须选择合适的算法和数据结构;第二,应该编写编译器能够有效优化以转换成高效可执行代码的源代码,要做到
    的头像 发表于 11-24 15:37 852次阅读
    <b class='flag-5'>编译器</b>的优化选项