从人工智能学习小知识:程序语言的分类
在我学习计算机的年代,当时的教学材料把程序设计语言分为机器语言、低级语言、高级语言。但凡有一定数据结构抽象和结构化控制流的语言都被分类为高级语言(我记不得准确定义是什么了),举的例子有BASIC、Pascal和C语言。
自从知道有Python这个东西之后,动态类型、自动内存管理、内建数据结构令我大开眼界。我一直好奇C语言为什么被称为高级语言,它究竟哪里高级了。如果C算高级,那Python算什么级?
这个问题长期以来没有得到解答,大概没有人关心这么无聊的问题。反正哪个好用用哪个就是了,低级高级只是一种应付考试的说辞罢了。
现在有了人工智能,终于有一个家伙不会嘲笑我闲得没事干并且愿意给我提供详细解答。
ChatGPT是这么回答我的:
以前那种将语言分为“机器语言 / 低级语言 / 高级语言”的分类方式在今天基本过时,属于历史阶段的粗略划分。现代对编程语言的分类已经更加细化和多维,单一维度(如“与硬件距离”)不再足以刻画语言特性。
1. 过去的分类方式(简化线性、以“抽象程度”为轴):
分类 | 举例 | 特点 |
---|---|---|
机器语言 | 二进制指令 | 可直接运行,CPU识别 |
低级语言 | 汇编语言 | 一对一对应CPU指令,强依赖硬件 |
高级语言 | BASIC、Pascal、C | 更接近人类思维、屏蔽硬件细节 |
合理性:
在20世纪70–80年代,这种分类在教学和技术传播中是实用的,因为计算资源有限,汇编仍被广泛使用。而“高级语言”强调“可移植”“可读性好”是进步象征。
2. 现在的问题:为什么这种划分过时了?
模糊不清:
- C语言既有高级语言的语法,又常被称为“低级高级语言”(因为靠近硬件)。
- C++、Rust、Zig等都能操作内存、寄存器,是否算低级语言?界线变得模糊。
忽略语言维度:
现代语言通常从多个维度分类:
- 抽象级别(如 Haskell vs C)
- 类型系统(动态 vs 静态 / 强 vs 弱)
- 范式(命令式、函数式、面向对象、逻辑式)
- 执行方式(编译型、解释型、虚拟机型、JIT等)
不适应新语境:
- Python、JS 这种“高级语言”也能嵌入底层C库,是否就变成低级语言?
- WebAssembly 虽然是面向虚拟机的中间语言,也支持多语言编译,是否算机器语言?
3. 现代更常见的分类方式
维度 | 分类举例 |
---|---|
范式 | 函数式(Haskell、Elm)、命令式(C、Go)、面向对象(Java) |
类型系统 | 静态类型(Rust、C++)、动态类型(Python、Ruby) |
内存模型 | 自动管理(Java、Python)、手动管理(C/C++)、RAII(Rust) |
执行方式 | 原生编译(C、Go)、虚拟机(Java、C#)、解释执行(Python) |
用途 | 系统编程(C、Rust)、脚本编写(Python、Lua)、前端(JS) |
总结:
- 早期“低级语言/高级语言”的线性分类是阶段性的合理简化,但在现代已经不够精确和全面。
- 今天更倾向于从语言特性、执行方式、用途等多维度进行分类。
- 不再把“低级语言”作为贬义或落后象征,像C和Rust仍是关键基础设施语言。
为什么C最初被叫做“高级语言”?
在1970年代之前,程序员主要用汇编语言或机器码编程。C语言的出现极大提高了抽象层级:
- 变量和结构体取代寄存器和内存地址。
- 控制结构(
if
,while
)取代跳转指令。 - 可以写跨平台代码(理论上)。
相较于汇编,C是革命性的高级语言。它让UNIX都能用C重写。
现在的问题:C真的“高级”吗?
从现代语言对比来看,C 语言反而非常“底层”:
- 没有内存安全机制(野指针、缓冲区溢出问题多)。
- 没有自动内存管理(手动 malloc/free)。
- 没有异常处理(只能用返回码)。
- 不支持模块化和封装(头文件 hack)。
- 没有现代类型系统、泛型、闭包、对象、协程……
相比之下,Rust、Go、Python、Java、Swift 甚至 TypeScript 都在抽象层级、安全性、并发支持上“比C高级得多”。
所以,从今天的眼光看,C语言的“高级”说法是相对而历史性的。
现代术语怎么说?
现在我们一般这么称呼 C:
- 系统级语言(Systems Programming Language)
—— 用来开发操作系统、驱动、嵌入式系统。 - 中间层语言(Mid-level language)
—— 同时具有高层抽象(控制结构)和低层控制能力(指针、内存操作)。
有时也调侃地说它是:“最低级的高级语言” 或 “最高级的低级语言”。
总结:
- C 在历史上确实是高级语言,但在今天相对已经“低级”了。
- 它仍然关键、强大,但从抽象层次和安全机制看,已远不及现代语言。
- 更准确的描述是:C 是一门“系统级语言”,用于构建那些“运行其他语言的东西”。