【AI系统】传统编译器发展

传统编译器发展

编译技术是计算机科学皇冠上的一颗明珠,作为基础软件中的核心技术,程序员的终极追求是能够掌握编译器相关的技术。

简单的说,编译器其实只是一段程序,它用来将编程语言 A 翻译成另外-种编程语言 B,上面将源代码翻译为目标代码的过程是叫作编译(compile)。完整的编译过程通常包含词法分析、语法分析、语义分析、中间代码生成、优化、目标代码生成等步骤。我们很难想象,在没有出现编译器的时候,程序员编程是有多么的困难。

在本文内容里面,由于 AI 系统中大量地使用了传统编译器中的概念和内容,本文我们将会去了解传统编译器的发展。想要深入了解编译器的内容也参考以下经典材料。

在这里插入图片描述

基础介绍

出现原因

我们平时所说的程序,是指双击后或者执行命令行后,就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有 .exe.com;在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。

可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。

例如,在屏幕上输出一句话,Python 语言的写法为:

def print_id(comment):
    print(comment)

print_id("我是 ZOMI")

二进制的写法就变得非常复杂,看到都想撞墙:

在这里插入图片描述

在 1950 年代开始,计算机发展的初期,程序员就是使用二进制指令来编写程序,当时候除了缺乏编译器也缺乏良好的编程语言。当程序比较大的时候,不但编写麻烦,需要频繁查询指令手册,而且 Debug 会异常苦恼,要直接面对二进制数据,让人眼花缭乱。另外,用二进制指令编程步骤繁琐,要考虑各种边界情况和底层问题,开发效率十分低下。

这就迫使程序员开发出了编程语言,提高程序开发的效率,例如汇编、C 语言、C++、Java、Python、Go 语言等,都是在逐步提高程序的开发效率。至此,编程终于不再是只有极客能做的事情了,不了解计算机的读者经过一定的训练也可以编写出有模有样的程序。

因此,编译器跟编程语言的发展是相辅相成的,有了高级编程语言,通过编译器能够翻译成低级的指令或者二进制机器码。

什么是编译器

典型的编译型程序语言有 C 和 C++,以 C 语言为例:C 语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于 CPU,只认识有限的二进制形式的指令。这时候就需要一个程序工具,将 C 语言代码转换成 CPU 能够识别的二进制指令。这个工具是一个特殊的软件程序,叫做编译器(Compiler)。

编译器可以将整个程序转换为目标代码(object code),这些目标代码通常存储在文件中。目标代码也被称为二进制代码,在进行链接后可以被机器直接执行。

在这里插入图片描述

编译器能够识别高级语言程序代码中的词汇、句子以及各种特定的格式和数据结构,并将其转换成机器能够识别的二进制码,这个过程称为编译(Compile)

编译的过程,类似于将中文翻译成英文、将英文翻译成象形文字。它是一个复杂的软件执行过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件等多个步骤,期间涉及到复杂的算法和硬件架构。

在 C 语言的编译器有很多种,不同的平台下有不同的编译器,例如:

  • Windows:常用的是微软编译器(cl.exr),被集成在 Visual Studio 或 Visual C++ 中,一般不单独使用;
  • Linux:常用 GUN 组织开发的 GCC,很多 Linux 发行版都自带 GCC;
  • Mac:常用的是 LLVM/Clang,被集成在 Xcode 中

代码语法正确与否是由编译器来检查,即编译器可以 100% 保证开发者编写的程序代码从语法上是正确,因为哪怕有一点小小的错误,编译器会反馈错误的地方,便于开发者对自己编写的代码进行修改。

最后是编译器的几个重要的特点

  1. 编译器读取源程序代码,输出可执行机器码,即把开发者编写的代码转换成 CPU 等硬件能理解的格式
  2. 将输入源程序转换为机器语言或低级语言,并在执行前并报告程序中出现的错误
  3. 编译的过程比较复杂,会消耗比较多的时间分析和处理开发者编写的程序代码
  4. 可执行结果,属于某种形式的特定于机器的二进制代码

历史发展

编译器从计算机架构和驱动计算机架构刚开始发展到现在,历经了 60 余年,这段时间内编译器发展了很多代。先让目光回到 1957 年的第一个编译器 IBM Fortran,其早期在计算机领域属于一项了不起的技术。它的起源和取得的成果,付出的巨大努力是今天很多开发者都无法想象的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值