|
191 | 191 | - 星期日:Sunday(Sun) |
192 | 192 |
|
193 | 193 |
|
| 194 | +## 编程语言代际 |
194 | 195 |
|
| 196 | +> 计算机科学界通常根据编程语言距离底层硬件的远近(即**抽象程度**)以及其发展历史,将编程语言划分为五个代际(Generations of Programming Languages,简称 1GL 到 5GL)。随着代际的更迭,编程语言越来越接近人类自然语言,开发效率不断提高,但对底层硬件的控制力相应减弱。 |
| 197 | +
|
| 198 | + |
| 199 | +| 代际 | 名称 | 核心特征 | 编程范式 | 与硬件距离 | 关注点 | 典型代表 | |
| 200 | +| :-: | :--- | :------: | :------: | :---: | :--- | :--- | |
| 201 | +| 1GL | 机器语言 | 二进制指令 | 机器指令 | 直接操作 | 硬件控制 | CPU指令集 | |
| 202 | +| 2GL | 汇编语言 | 助记符 | 汇编指令 | 紧密绑定 | 硬件优化 | x86 Assembly | |
| 203 | +| 3GL | 高级语言 | 类英语语法 | 过程式/面向对象 | 高度抽象 | 算法与逻辑 | C, Java, Python | |
| 204 | +| 4GL | 面向问题语言 | 声明式/特定领域 | 非过程化 | 完全抽象 | 解决特定问题 | SQL, MATLAB | |
| 205 | +| 5GL | 人工智能语言 | 约束/逻辑描述 | 声明式/逻辑式 | 意图抽象| 意图理解 | Prolog, AI Code Gen | |
| 206 | + |
| 207 | + |
| 208 | + |
| 209 | +### 第一代:机器语言(1GL - First-Generation Language) |
| 210 | + |
| 211 | +**机器语言 (Machine Language)** |
| 212 | + |
| 213 | +* **核心特征**:计算机唯一能直接理解和执行的语言,纯粹由二进制代码(0 和 1)组成。 |
| 214 | +* **工作方式**:直接对 CPU 寄存器和内存地址进行操作,无需任何翻译过程。 |
| 215 | +* **优点**:执行速度极快,对硬件的利用率最高。 |
| 216 | +* **缺点**:极难编写、阅读和调试;代码不可移植(针对某种 CPU 架构编写的代码在其他架构上完全无法运行)。 |
| 217 | +* **代表**:纯二进制机器码。 |
| 218 | + |
| 219 | +### 第二代:汇编语言(2GL - Second-Generation Language) |
| 220 | + |
| 221 | +**汇编语言 (Assembly Language)** |
| 222 | + |
| 223 | +* **核心特征**:使用人类相对易读的“助记符”(Mnemonics,例如 `ADD`, `MOV`, `SUB`)来代替二进制机器指令。 |
| 224 | +* **工作方式**:计算机无法直接执行,必须通过一个称为“汇编器(Assembler)”的程序将其翻译成机器语言。 |
| 225 | +* **优点**:比机器语言更容易编写和排错,且依然能保持极高的运行效率和底层控制力。 |
| 226 | +* **缺点**:依然是面向机器的语言,与具体的 CPU 架构强绑定(如 x86 汇编和 ARM 汇编不通用),开发大型软件效率极低。 |
| 227 | +* **代表**:Assembly(汇编语言)。目前仍常用于操作系统内核、驱动程序开发及对性能要求极高的底层模块。 |
| 228 | + |
| 229 | +### 第三代:高级语言(3GL - Third-Generation Language) |
| 230 | + |
| 231 | +**高级语言 (High-Level Language)** |
| 232 | + |
| 233 | +* **核心特征**:引入了更高级的抽象,语法接近人类数学公式和英语,是**目前我们最熟悉、应用最广泛的通用编程语言群体**。 |
| 234 | +* **工作方式**:程序员编写源代码,然后通过“编译器(Compiler)”或“解释器(Interpreter)”转化为机器码执行。 |
| 235 | +* **优点**: |
| 236 | + * **可移植性强**:与硬件架构脱钩(如“一次编写,到处运行”)。 |
| 237 | + * 支持复杂的数据结构和控制流(循环、条件判断)。 |
| 238 | + * 支持结构化编程和面向对象编程(OOP)。 |
| 239 | +* **缺点**:需要告诉计算机“如何做”(How to do),即必须编写出详细的算法和逻辑步骤。 |
| 240 | +* **代表**: |
| 241 | + * 早期:FORTRAN, COBOL, BASIC, C, Pascal, Delphi |
| 242 | + * 现代主流:C++, Java, Python, JavaScript, Go, Rust, C# 等。 |
| 243 | + |
| 244 | +### 第四代:面向问题的语言 / 非过程化语言(4GL - Fourth-Generation Language) |
| 245 | + |
| 246 | +**甚高级语言 / 领域特定语言 (Very High-Level / Domain Specific)** |
| 247 | + |
| 248 | +* **核心特征**:相比第三代语言,它进一步提升了抽象级别。其核心思想是**“声明式(Declarative)”**——程序员只需告诉计算机“**做什么(What to do)**”,而不需要详细说明“怎么做(How to do)”。 |
| 249 | +* **优点**:代码量极少,开发效率极高,通常针对特定的领域(Domain-Specific)。 |
| 250 | +* **缺点**:通用性较差,通常只能用于解决特定领域的问题,执行效率有时受限于底层的引擎优化。 |
| 251 | +* **代表**: |
| 252 | + * **数据库查询**:SQL(你只需告诉 SQL“提取这些数据”,不用编写遍历数据库的循环代码)。 |
| 253 | + * **数学与数据分析**:MATLAB, R。 |
| 254 | + * **部分脚本和前端语言**也被认为具有 4GL 特性。 |
| 255 | + |
| 256 | +### 第五代:逻辑与人工智能语言(5GL - Fifth-Generation Language) |
| 257 | + |
| 258 | +**自然语言 / 约束式 / AI 语言 (Natural Language / Constraint-based)** |
| 259 | + |
| 260 | +* **核心特征**:最初是在 20 世纪 80 年代提出,目标是基于**逻辑推理**和**约束求解**。程序员向计算机输入一组“事实(Facts)”和“规则(Rules)”,计算机自动通过逻辑推导得出答案。 |
| 261 | +* **设计初衷**:无需编写任何算法,让计算机自己去寻找解决问题的方法,主要用于早期的人工智能研究、专家系统和神经网络。 |
| 262 | +* **代表**:Prolog, OPS5, Mercury, LISP(部分分支)。 |
| 263 | +* **历史局限**:传统的 5GL 并没有像人们预想的那样取代 3GL 成为主流,因为纯粹的逻辑推理在解决通用软件工程问题时显得十分吃力。 |
| 264 | + |
| 265 | +--- |
| 266 | + |
| 267 | +### 🌟 补充:未来的“第六代”(AI 大模型时代的编程范式) |
| 268 | + |
| 269 | +> 虽然学术界对“第六代”还没有公认的定义,但在当下的 ChatGPT、GitHub Copilot 和 Claude 等 LLM(大语言模型)时代,编程语言的发展正在出现一种新的形态: |
| 270 | +
|
| 271 | +* **自然语言编程(Prompt Engineering)**:人类使用纯自然语言(如中文、英文)描述需求,AI 自动将其翻译为 3GL 或 4GL 代码并运行。 |
| 272 | +* 从某种意义上说,这实现了 5GL 当初未能完美实现的愿景——人类真正彻底从“如何做(底层算法)”中解放出来,只需专注于“解决什么问题”。 |
| 273 | + |
| 274 | + |
| 275 | +### 代际划分已经过时 |
| 276 | + |
| 277 | +> 值得注意的是,**“第几代语言”这个分类法在现代计算机科学界已经很少使用了**。原因如下: |
| 278 | +
|
| 279 | +1. **界限模糊:** 随着语言发展,Python 或 Java 拥有极其丰富的库,写起来也很像 4GL;而 SQL 也可以嵌入到 3GL 中。 |
| 280 | +2. **范式更重要:** 现在大家更倾向于用**编程范式**来分类,例如: |
| 281 | + * 面向对象 (OOP): Java, C#, Delphi |
| 282 | + * 函数式 (Functional): Haskell, Scala, Lisp |
| 283 | + * 脚本语言 (Scripting): Python, JavaScript |
| 284 | + * 系统语言 (Systems): Rust, C, Go |
195 | 285 |
|
196 | 286 |
|
197 | 287 |
|
|
0 commit comments