软件编程语言的发展,是随着硬件技术的不断进步而逐步发展起来的。从最初的机器语言,发展到助记符式的汇编语言,再到今天还在不断完善中的高级语言,其使用是越来越广泛,所起的作用也是越来越重要。
软件编程语言的第一阶段,即机器语言,严格来说,不算真正意义上的编程语言。机器语言对硬件的依赖程度太大,基本上被绑定到某种类型的机器设备上了,比如最早可用于机器语言设计的被称之为现代电子计算机的前身的分析机。从某种程度上说,早期的所谓机器语言,也就是根据设备的制作目的,将解决某一问题的逻辑顺序,在设备上依次实现,得出预想的结果而已。和结构化编程的一段代码类似,可以说一个设备就是一段结构化程序的物理实现。
后期随着相关理论及硬件技术的发展,编程语言的相关概念被逐渐提出并实现,推进了机器语言的演化。比如世界上首位程序员——阿达·洛芙莱斯在计算机软件领域做出的许多开创性的贡献:如变量、递归、程序算法的提出等(详见软件世界的缘起及现代编程语言的诞生,程序员群体有一位老祖母)。
而随着晶体管、电子管等硬件技术的发展,摩根定律、布尔代数等数学理论的完善,最终在计算机发展中出现了寄存器、二进制算法等概念和理论,推进了机器代码的标准化,即基于“0/1”或者说“是/否”基础的现代机器语言。
寄存器从硬件实现上来说,可以理解为一个电容器,其储电和放电的状态就可以分别表示“0”或者“1”,据此可以完美的实现机器语言的相关功能。寄存器最起码具备四种功能,即清除、存储、接收、输出。而机器语言通过“0/1”进行编写,通过寄存器进行存储及相关运算,从而实现了编程过程。
可以看的出来,机器语言的编码过程可以说是非常的不人道。不宜辨识、不宜理解,不容易纠错,算是其最大的特点了吧。于是,软件编程语言水到渠成的发展到了第二阶段,即汇编语言。汇编语言的出现,就是为了解决机器语言的缺点,增加机器语言的可识别性。说白了,就是用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减。
从编程语言的发展可以看的出来,机器是不能直接识别汇编语言,从而按照其逻辑进行运算的。因此顺理成章的出现了现代软件编程系统至关重要的概念——编译器。简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。
一个现代编译器的主要工作流程是:源代码(sourcecode)→预处理器(preprocessor)→编译器(