编程书籍有时会指出 CPU 不理解 C++ 语言(或任何高级编程语言)。所有 C++ 语句都必须先翻译成机器代码才能执行。但是谁来翻译?
哦,这并不神秘,他们说;翻译由编译器完成——它本身就是一个计算机程序。但在这种情况下,计算机正在进行翻译。
在我看来,这是一个无法解决的悖论。CPU(计算机核心的“大脑”)不理解 C++ 的一个词,但它执行 C++ 和它自己的内部语言之间的转换。这不是矛盾吗?
编程书籍有时会指出 CPU 不理解 C++ 语言(或任何高级编程语言)。所有 C++ 语句都必须先翻译成机器代码才能执行。但是谁来翻译?
哦,这并不神秘,他们说;翻译由编译器完成——它本身就是一个计算机程序。但在这种情况下,计算机正在进行翻译。
在我看来,这是一个无法解决的悖论。CPU(计算机核心的“大脑”)不理解 C++ 的一个词,但它执行 C++ 和它自己的内部语言之间的转换。这不是矛盾吗?
大部分答案是这样的:C++ 源代码(或任何高级编程语言)存储在文本文件中,就像您可能存储文章或备忘录一样。但是文本字符以数字形式存储。因此,当编译器处理这些数据时,它会进行另一种形式的数字运算、评估数据并根据精确的规则做出决策。
如果这不能解决问题,请想象一下:您的任务是阅读一个懂日语但不会英语的人的来信。与此同时,你会英语,但不会一个字的日语。
但是假设你有一本指导书,告诉你如何将日语字符翻译成对应的英语。说明书本身是用英文写的,所以你使用它没有问题。
因此,即使您不懂日语,也可以通过仔细按照说明翻译所有您想要的日语。
这就是计算机程序的真正含义:CPU 读取的指令书。计算机程序是一种惰性的东西——一系列指令和数据——但计算机内部的“知识”来自于它的程序。程序使计算机能够做各种聪明的事情——包括翻译包含 C++ 的文本文件。
编译器当然是一个非常特殊的程序,但它所做的一点也不奇怪或不可能。如前所述,作为计算机程序,它是一本“指导书”。它告诉我们如何做的是读取一个包含 C++ 源代码的文本文件并输出另一本说明书:这个输出是你的 C++ 程序的可执行形式。
最初的编译器必须用机器代码编写。后来,旧的编译器可以用来编写新的编译器……因此,通过引导过程,即使是熟练的程序员也可以越来越少地依赖编写机器代码。