从人工智能学习小知识:程序语言的分类

2025/07/26

在我学习计算机的年代,当时的教学材料把程序设计语言分为机器语言、低级语言、高级语言。但凡有一定数据结构抽象和结构化控制流的语言都被分类为高级语言(我记不得准确定义是什么了),举的例子有BASIC、Pascal和C语言。

自从知道有Python这个东西之后,动态类型、自动内存管理、内建数据结构令我大开眼界。我一直好奇C语言为什么被称为高级语言,它究竟哪里高级了。如果C算高级,那Python算什么级?

这个问题长期以来没有得到解答,大概没有人关心这么无聊的问题。反正哪个好用用哪个就是了,低级高级只是一种应付考试的说辞罢了。

现在有了人工智能,终于有一个家伙不会嘲笑我闲得没事干并且愿意给我提供详细解答。

ChatGPT是这么回答我的:


以前那种将语言分为“机器语言 / 低级语言 / 高级语言”的分类方式在今天基本过时,属于历史阶段的粗略划分。现代对编程语言的分类已经更加细化和多维,单一维度(如“与硬件距离”)不再足以刻画语言特性。

1. 过去的分类方式(简化线性、以“抽象程度”为轴):

分类举例特点
机器语言二进制指令可直接运行,CPU识别
低级语言汇编语言一对一对应CPU指令,强依赖硬件
高级语言BASIC、Pascal、C更接近人类思维、屏蔽硬件细节

合理性:
在20世纪70–80年代,这种分类在教学和技术传播中是实用的,因为计算资源有限,汇编仍被广泛使用。而“高级语言”强调“可移植”“可读性好”是进步象征。

2. 现在的问题:为什么这种划分过时了?

模糊不清:

忽略语言维度:

现代语言通常从多个维度分类:

不适应新语境:

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最初被叫做“高级语言”?

在1970年代之前,程序员主要用汇编语言或机器码编程。C语言的出现极大提高了抽象层级:

相较于汇编,C是革命性的高级语言。它让UNIX都能用C重写。

现在的问题:C真的“高级”吗?

从现代语言对比来看,C 语言反而非常“底层”:

相比之下,Rust、Go、Python、Java、Swift 甚至 TypeScript 都在抽象层级、安全性、并发支持上“比C高级得多”。

所以,从今天的眼光看,C语言的“高级”说法是相对而历史性的

现代术语怎么说?

现在我们一般这么称呼 C:

有时也调侃地说它是:“最低级的高级语言”“最高级的低级语言”

总结: