软件开发编程工具

一般是指一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的特殊软件。

什么是编译器?

编译器是一个程序或程序集,它将高级语言编写的源代码转换为低级语言(汇编语言或机器语言)。编程语言可以有许多编译器。例如:GCC C,Turbo C,Quick C 等是 C 编程语言的不同编译器。

为什么需要编译器?

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

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

例如,在屏幕上输出“VIP会员”,C语言的写法为:puts("VIP会员");

二进制的写法为:

你感受一下,直接使用二进制是不是想撞墙,是不是受到成吨成吨的伤害?

在计算机发展的初期,程序员就是使用这样的二进制指令来编写程序的,那个拓荒的年代还没有编程语言。

直接使用二进制指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁查询指令手册,而且除错会异常苦恼,要直接面对一堆二进制数据,让人眼花缭乱。另外,用二进制指令编程步骤繁琐,要考虑各种边界情况和底层问题,开发效率十分低下。

因此,需要一个翻译器将源代码中给出的计算机指令翻译成二进制语言。因此,为了完成翻译器的工作,人们发明了编译器。世界上第一个编译器是 Grace Hopper 于 1952 年为 A-0 编程语言编写的。

编译器是怎么工作的?

将源代码转换成 CPU 能够识别的二进制指令,也就是将代码加工成 .exe 程序;这个工具是一个特殊的软件,叫做编译器(Compiler)。

编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为编译(Compile)。

除了将源代码从高级语言翻译成低级语言之外,编译器还有其他责任。在阅读用高级语言编写的源代码后,它执行以下操作

  • 执行源代码的预处理。收集要编译的源代码所需的所有文件。
  • 解析整个源代码。检查源代码中的任何语法错误。
  • 对源代码执行全面的语法分析。理解源代码的结构和语义。
  • (可选)将源代码转换为称为目标代码的中间代码,以提高性能。
  • 将目标代码转换为称为可执行代码的二进制语言。
源代码和目标代码
源代码和目标代码

什么是解释器?

解释器是一种将用高级语言编写的源代码转换为机器代码的程序。它类似于编译器,并执行从高级语言到低级语言的相同翻译任务。尽管它有相似之处,但解释器和编译器的工作机制却不同。

解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序结束就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。

为什么需要解释器?

解释器的第一个也是至关重要的功能是将源代码从高级语言翻译成机器语言。但是,编译器也有这样的功能。那么,为什么还需要一个解释器呢?

解释器的真正需求来自编译器无法满足软件开发需求的地方。编译器是一个非常强大的工具,用于开发高级语言的程序。但是,有几个与编译器相关的缺点。如果源代码的大小很大,那么编译源代码可能需要数小时。这将显着增加编译持续时间。这里的解释器很方便,可以减少这个巨大的编译时间。解释器旨在一次翻译单个指令并立即执行。

当经常更新源代码时,解释器也很方便。好像编译整个源代码需要 5 分钟。如果你已经更新了 5 次。那么总编译时间将是 25 分钟,这是非常花时间的。但是,如果使用解释器,就可以减少这个编译时间。

编译器和解释器之间的区别

编译器和解释器都是将源代码从高级语言翻译成机器语言的工具。两者都做同样的翻译任务。但编译器的工作机制与解释器不同。以下是编译器和解释器之间的一些区别

翻译机制

编译器读取整个源代码并立即转换为机器语言。如果在编译期间生成任何错误,它将终止整个过程而不执行单个指令。

而解释器则逐个翻译。它一次读取单个指令。将其转换为机器语言并执行它。此过程一直持续到最后一条指令。如果在解释期间生成任何错误,它将终止执行进一步的指令。

翻译时间

编译器一次读取整个源代码。它预处理,解析,分析源代码并立即将其转换为机器代码。因此,它要比解释器需要更多的翻译时间。

解释器一次读取源代码的单一指令。与编译器不同,它不会立即将整个源代码转换为机器代码。而是通过指令逐个翻译源代码。因此,需要较少的翻译时间。

程序速度

编译器一次翻译整个源代码。在编译过程之后,它生成一个可执行文件,其中包含二进制语言的程序的完整指令集。因此,它不需要任何进一步的转换来提高程序执行速度。

解释器按指令翻译源代码指令。它翻译单个指令然后执行它。每次执行指令之前,必须先将其转换为机器语言。这增加了解释的开销,因此降低了程序执行速度。

内存消耗

编译器通常在编译过程中生成一个称为目标代码的中间代码。因此,它需要比解释器更多的内存。

与编译器不同,解释器在解释过程中不会生成任何中间代码。因此,解释器具有内存效率。

调试

如果编译器包含错误,编译器也会继续处理整个源代码。它在编译过程结束时生成所有错误消息(如果有)的列表。这使得调试有点困难。

如果遇到错误,解释程序将停止解释过程。它会在解释过程中遇到错误时生成错误消息。

部署

编译器生成源代码的可执行文件。部署此可执行文件而不是源代码。通过隐藏其他源代码,可以提高安全性。

解释器不生成源代码的任何可执行文件。因此,在解释器的情况下需要部署整个源代码。源代码对每个人都是可见的,可能会引起安全问题。

编译器和解释器

下表列出编译器和解释器之间才差异

编译器 解释器
它会立即将整个程序转换为机器代码 它一次翻译程序的单个指令
它需要更多的翻译时间 它需要更少的翻译时间
程序执行比解释语言更快 程序执行比编译语言慢
它通常会生成其他中间代码 它不会生成其他中间代码
它需要更多内存,因为它会生成额外的对象代码 它需要较少的内存,因为它不会生成任何中间代码
编译过程结束时会显示错误 错误会在遇到时显示
需要部署可执行代码 需要部署源代码
编译语言示例:C,C ++,Java 等 解释语言示例:Ruby,Python,Shell 脚本等

什么是 IDE(集成开发环境)?

实际开发中,除了编译器是必须的工具,我们往往还需要很多其他辅助软件,例如:

  • 编辑器:用来编写代码,并且给代码着色,以方便阅读;
  • 代码提示器:输入部分代码,即可提示全部代码,加速代码的编写过程;
  • 调试器:观察程序的每一个运行步骤,发现程序的逻辑错误;
  • 项目管理工具:对程序涉及到的所有资源进行管理,包括源文件、图片、视频、第三方库等;
  • 漂亮的界面:各种按钮、面板、菜单、窗口等控件整齐排布,操作更方便。

这些工具通常被打包在一起,统一发布和安装,例如 Visual Studio、Dev C++、Xcode、Visual C++ 6.0、C-Free、Code::Blocks 等,它们统称为集成开发环境(IDE,Integrated Development Environment)。

集成开发环境就是一系列开发工具的组合套装。这就好比台式机,一个台式机的核心部件是主机,有了主机就能独立工作了,但是我们在购买台式机时,往往还要附带上显示器、键盘、鼠标、U盘、摄像头等外围设备,因为只有主机太不方便了,必须有外设才能玩的爽。

集成开发环境也是这个道理,只有编译器不方便,所以还要增加其他的辅助工具。