欢迎来到程序语言的世界!

你好!今天我们要一起探索人类与电脑沟通的不同方式。电脑虽然速度极快,但其实并不「聪明」——它们只听得懂「开」与「关」(也就是 1 和 0,即二进制)。程序语言就是我们用来跨越这条鸿沟的工具,链接我们复杂的人类思维与电脑简单的二进制大脑。看完这些笔记,你就会明白为什么我们需要不同的程序语言,以及我们如何将想法转译成机器能够执行的指令。


1. 分类:低级语言与高级语言

在计算机科学中,我们根据程序语言与计算机硬件的距离,或是与人类语言的相似度,将其进行分类。

低级语言 (Low-Level Languages)

之所以称为「低级」,是因为它们非常接近硬件(CPU 的实际电路)。主要分为两种类型:

1. 机器码 (Machine Code):这是电脑的「母语」。它完全由二进制(1 和 0)组成。对人类来说,阅读或编写这些代码非常困难,但电脑可以直接执行,无需任何转译。

2. 汇编语言 (Assembly Language):这是比机器码高一级的语言。它不使用二进制,而是使用简短的缩写,称为助记符 (mnemonics)(例如 ADDSUBMOV)。汇编语言中的每一条指令通常直接对应一条机器码指令。

高级语言 (High-Level Languages)

之所以称为「高级」,是因为它们更接近人类语言。例如 Python、Java 和 C#。它们使用像英文一样的关键字(如 ifwhileprint)。

指令式高级语言 (Imperative High-Level Languages):你所使用的大多数语言都是「指令式」的。这意味着代码由一系列指令组成,一步步告诉电脑如何完成任务。

打个比方:高级语言想象成食谱(「把蛋糕烤 30 分钟」)。而低级语言就像烤箱内部的齿轮为了转动定时器和点燃燃气所进行的细微机械运动。

快速回顾:优缺点比较

高级语言较易学习、调试较快,并且具有可移植性 (portable)(可以在不同类型的 CPU 上运行)。不过,由于需要转译,执行速度通常较慢。

低级语言让你对硬件有绝对的控制权,且非常节省内存。但编写难度极高,且针对特定处理器 (processor-specific)(为某种 CPU 编写的汇编语言无法在另一种 CPU 上运行)。

重点总结:高级语言偏向程序员(易用性),而低级语言则偏向机器(效率与控制)。


2. 转译代码

由于电脑只看得懂机器码,任何以高级语言或汇编语言编写的程序都必须进行转译。你可以把它们想象成联合国的翻译官。

三种转译器类型

1. 汇编器 (Assembler):汇编语言转译为机器码

2. 编译器 (Compiler):整份高级源代码一次过转译成机器码,并建立一个可执行文件(例如 .exe)。你只需要编译一次,之后机器码就可以不断执行,无需再通过编译器。

3. 解释器 (Interpreter):逐行转译高级代码。它读取一行、转换成机器码、执行,然后再移至下一行。如果遇到错误,它会立即停止。

记忆小技巧:编译器想象成书本的完整翻译——你需要等一段时间等待翻译完成,但之后随时都可以阅读整本书。将解释器想象成同声传译员——他们随你说话进行翻译,但如果你停止说话,翻译也就跟着停止。

你知道吗?Python 通常是一种解释型语言,这就是为什么你可以在程序执行到一半时才看到错误!而 Java 则结合了这两者的特点。

重点总结:编译器产生的文件速度快且独立;解释器非常适合逐行测试代码,但执行速度较慢。


3. 中间逻辑:字节码 (Bytecode)

有时候,编译器并不会直接编译成机器码。相反,它会将源代码转译成一种称为中间语言 (Intermediate Language)字节码 (Bytecode) 的东西。

为什么要使用字节码?

主要原因是可移植性。不同的电脑配备不同的 CPU。如果你直接为 Intel 芯片编译成机器码,它在 ARM 芯片(如手机中的芯片)上就无法运行。
通过先转译成字节码,这种「中间语言」可以发送到任何设备。该设备随后使用其特定的「虚拟机 (Virtual Machine)」将字节码转译为属于该设备的机器码。这就是 Java 如何实现其「一次编写,到处运行 (Write Once, Run Anywhere)」目标的方法!

快速回顾:常见错误提醒!
不要混淆源代码 (Source Code)目标码 (Object Code)
源代码:你亲手编写的程序代码(例如 Python 或 C#)。
目标码:电脑实际执行、经过转译的机器码

重点总结:字节码是一个中间步骤,使软件更容易在不同类型的硬件上运行。


最终总结检查表

• 你知道机器码是二进制而汇编语言使用助记符吗?
• 你能解释为什么高级语言对人类来说更容易吗?
• 你能描述编译器(整份编译)与解释器(逐行转译)之间的差异吗?
• 你理解字节码如何让代码在不同设备间保持可移植性吗?

如果觉得这些内容很多,别担心!只要记住:核心就是「转译」。我们希望使用类似英文的语言工作,而电脑只想要 1 和 0。这一章提到的所有内容,都只是为了让这场「沟通」得以实现的工具。