什么是编程语言
本节阅读量:当前最新的计算机能在纳秒以内执行一条指令,即使日常使用的手机,其性能也超过当年阿波罗登月时使用的计算机上亿倍。 但计算机只能理解有限的简单指令,且需要由我们来告诉它该执行哪些指令。
计算机程序是由一串计算机能理解并执行的指令组成。创建计算机程序的过程叫做编程。 程序员通过编写文本形式的源代码生成程序。
机器语言
计算机的CPU不理解中文,也不理解C++。CPU能直接理解的语言被称为机器语言。 机器语言中的指令由一串长度不定的0和1组成,每个单独的「0」或者「1」称作一个比特(bit)。 例如,一条简单的机器语言指令:「10110000 01100001」。 计算机刚出现时,只有机器语言可以使用,编程非常困难且耗时。
机器语言的指令只能做特定的事情,比如将两个数字相加,或者访问内存的某个位置。 同时,不同的CPU有不同的指令集,就好比一个CPU讲中文,另一个CPU讲英文。 为一种CPU编写的程序在另一种CPU上无法运行。机器语言没有可移植性,程序必须重写才能在新的CPU上运行。
汇编语言
由于机器语言难以理解和阅读,人们发明了汇编语言。汇编语言使用简单的单词缩写和数字来替代机器语言中的指令。 例如,「mov al, 061h」代表将061h这个数字移动到寄存器al中。相较于机器语言,汇编语言具有较好的可读性。
CPU不能直接执行汇编语言,因此需要一个程序将汇编语言转换成机器语言,这个程序就叫做汇编器。 由于汇编语言基本与机器指令一一对应,精心编写的汇编语言有着最高的执行性能。 因此,在不少对程序执行速度有要求的场景中,仍能看到大量的汇编代码。
汇编语言仍有不少缺点:
- 即使是简单的需求,也需要大量的汇编指令才能实现。单条指令虽然含义明确,但多条组合起来就很难理解了。
- 汇编语言也没有可移植性。不同的CPU有不同的指令集,对应不同的汇编语言,编写好的程序仍需重写才能在其他平台上运行。
高级语言
为了解决程序的可读性和可移植性问题,人们发明了C、C++、Python、Java等新的编程语言,这些语言被称为高级语言。 使用高级语言编程时,不用考虑程序会在哪种机器上执行。例如在C++中可以写出「a = 97」这样的语句,将97赋值给变量a。
与汇编语言一样,高级语言也必须转换成计算机能够执行的指令才能运行。 转换方式有两种:「编译执行」与「解释执行」。
编译执行需要使用编译器将源代码转换成计算机能执行的文件。 经过多年发展,大部分情况下,编译器生成的程序执行速度甚至比人类手工编写的汇编代码更优秀。
解释器则是逐行读取源代码并翻译执行。每次运行程序时都需要经历解释执行的过程,因此解释执行的速度比编译执行要慢不少。
高级语言的语法接近于日常使用的自然语言,阅读和修改的成本都比较低。同时,代码无需修改即可在多种CPU平台上通过编译或解释来执行。
但有两种情况会影响代码的可移植性:
- 不同的操作系统有各自的接口。如果使用了这些接口,程序就需要修改才能在另一个操作系统上执行。本教程会避免使用操作系统独有的接口。
- 不同的编译器可能有各自扩展的功能。如果使用了这些独有的功能,其他编译器将无法编译你的代码。