中文是一种尽量用简短文字表达更多含义的语言,所以很多时候一句话的含义很容易曲解成别的意思。最近,有人提出C语言是一种中级语言的概念,所以特意介绍一下低级语言和高级语言的区别。
最初的编程语言是机器语言(machine language),它和硬件系统紧密相连。机器语言是计算机的一套完整指令集(称为机器码machine code),它可以被CPU直接执行。机器码中所有的指令用二进制编码,每条二进制指令可以直接控制具体的硬件元器件。机器语言具有代码直接执行、控制硬件灵活和运行速度快的特点,但是不同种类计算机的机器码是不相同的,一种机器语言编写代码只能在一种计算机型号上运行。
指令示例
1、0000 载入(LOAD)
2、0001 存储(STORE)
寄存器示例
1、0000 寄存器A
2、0001 寄存器B
代码示意
0000,0000,000000010000 代表 LOAD 1, 16
使用机器语言必须记忆全套的机器码,不仅开发过程繁琐、消耗时间长,代码的可读性也非常低。为了让软件工程师更高效的编写程序,汇编语言(assembly language)被发明出来。这种语言的编写方式和机器语言基本相同,只是用英文符号替换了机器的编码。汇编语言的代码不能被计算机直接执行,需要通过汇编程序将它们转换成可执行的机器代码。虽然机器代码已经被容易记忆的英文符号代替,但是程序的开发难度依然很高。程序开发时不但需要控制硬件计算器和寄存器等,还需要解决数据在硬件中存储的地址转换等问题。
由于机器语言和汇编语言中的指令直接映射为硬件操作,语言没有进行更高级别的抽象,所以这类语言被称之为低级语言(Low-level programming language)。计算机架构中最常使用的是分层架构,例如OSI七层网络模型、TCP/IP四层网络模型,所以这里的低级指代的是较低的抽象层级。
与低级语言相对的是高级语言(Heigh-level programming language),现在常用的开发语言都是高级语言,例如:C/C++、Java、PHP、Python、JavaScript、Golang等。高级语言可以跨不同的计算机硬件架构和操作系统。高级语言的语法更接近自然语言的语法和结构,也与系统硬件的“距离”更远。通过语言自身的开发库兼容不同的操作系统,通过操作系统兼容不同的硬件架构。从这个分类来看,C语言虽然没有现代语言的很多特性,例如:面向对象、内存管理、函数编程等。但是,完全符合高级语言的特性,所以不是什么中级语言。
高级语言和低级语言只是翻译上的简化,并不是对开发语言好坏或者强弱的评判。每种开发语言都有特定的使用场景和推进计算机发展的独有价值。