编译器介绍

2025 年 6 月 3 日 | 阅读 5 分钟

众所周知,编译器是一种软件工具,负责将人类用高级编程语言编写的代码转换为机器码。这个过程允许程序在硬件上正确运行,只需将人类可读的指令转换为计算机处理器可以直接有效地执行的低级命令。

Compiler Introduction

尽管如此,我们知道高级语言,例如 PythonC++Java,主要设计为可读,并且更容易供普通人类编写,但在计算机无法直接理解它们的情况下。这就是编译器发挥作用的地方。它负责提取人类可读的代码,然后将其转换为由 1 和 0 组成的二进制代码。每个编译器通常用于处理一组特定的可用操作系统和计算机硬件类型。这意味着它创建的机器码是为特定平台设计的。

  • 例如, 其中一个编译器可能用于积极生成在带有 x64(64 位)处理器的 Linux 系统上运行的代码。另一个可能针对基于 ARM 的系统,这在智能手机和平板电脑中很常见。

编译器转换源代码后生成的文件通常称为“目标代码”。 更常见的是,不要将其与(OOPS)面向对象编程混淆;在这种情况下,“对象”仅指编译后的、机器就绪的输出。

编译器一词的含义是什么?

编译器通常被认为是帮助将程序员用高级语言编写的代码(该代码可能包括 C++ 或 Java 等语言)转换为计算机可以轻松理解的机器语言的工具。"

编译器的主要工作就是将人类可读的代码翻译成有效的低级版本,通常保持原始含义但工作速度更快,并且使用更少的内存,并翻译代码,检查错误。如果代码中出现错误,例如拼写错误或缺少符号,在这种情况下,编译器会指出它以进行更正。

要点

与编译器使用相关的各种要点如下:

  • 编译器是一种将高级语言转换为机器语言的翻译器。
  • 高级语言由开发人员编写,而机器语言可以被处理器理解。
  • 编译器用于向程序员显示错误。
  • 编译器的主要目的是在不改变程序含义的情况下更改用一种语言编写的代码。
  • 当你执行用 HLL 编程语言编写的程序时,它分两部分执行。
  • 在第一部分中,源程序被编译并翻译成目标程序(低级语言)。

在第二部分中,目标程序通过汇编器转换为目标程序。

Compiler Introduction

图:编译器中源程序的执行过程

历史

现在,在本节中,我们将讨论编译器的各种重要里程碑

  1. 术语 “编译器” 最初由一位名为 Grace Murray Hopper 的计算机科学家在 1950 年代初使用。她帮助奠定了计算机如何有效地理解人类编写代码的基础。
  2. 更常见的是,第一个有效的编译器最终由 John Backus 和他的团队在 IBM1954 年至 1957 年之间开发。这个早期的编译器帮助个人用户或程序员轻松地将高级指令翻译成机器语言,从而使编程更容易。
  3. 1960 年COBOL 成为 第一种编程语言,可以在不同类型的计算机系统上编译和运行。这是朝着使程序更具可移植性和在各种平台上使用的重要一步。
  4. 1960 年代和 1970 年代,研究人员专注于改进编译器读取和理解代码的方式。这包括关于 扫描(将代码分解成部分)和 解析(检查代码的结构)的工作。

为什么要使用编译器?

Compiler Introduction

众所周知,在使用编译器时,在编写和运行程序时会提供几个实际优势

  1. 提前进行错误检查: 编译器通常会在运行整个程序之前对其进行检查。这意味着它可以及早捕获代码中所有可用的错误,这些错误无非是语法或数据类型错误,因此可以更有效地修复它们。
  2. 更快的执行速度:编译后的程序通常更快,这是因为编译器在将其转换为最终的可执行文件之前对代码进行了优化。
  3. 可移植性:一旦程序被编译成可执行文件,我们不必在构建它的同一平台或同一台机器上运行它。尽管如此,我们可以将其移动到另一个兼容的系统上,并且它仍然可以工作。

编译器的应用

与编译器使用相关的各种应用如下

Compiler Introduction
  • 通过将代码转换为机器语言来实现高级编程语言。
  • 它还有助于个人有效地优化代码,以利用现代计算机体系结构,包括并行处理。
  • 尽管如此,它还支持计算机中高级内存层次结构的设计和有效使用。

常见问题/常见问题解答。

关于编译器使用的各种常见问题如下

问题 1: 提及与编译器使用相关的关键特征。

回答: 与编译器相关的各种关键特征如下

  • 翻译
  • 优化
  • 错误检测
  • 平台独立性
  • 效率

问题 2: 列出编译器和解释器的基本区别。

回答: 编译器会一次查看我们的整个程序,并将其转换为计算机可以自行运行的内容,例如一个应用程序。完成后,我们会得到一个单独的文件,我们可以打开并使用它,而无需原始代码。

解释器的工作方式不同。它逐个步骤地检查我们编写的代码集,并在读取时运行它。它不会创建一个单独的文件,它只是在我们使用它时直接运行代码。


下一主题编译器阶段