程序是指用某种程序设计语言编写的用来解决某个问题或完成某项任务的指令序列。例如,若要计算圆的面积,用Python可编写出以下程序:
r = eval(input("输入圆的半径: ")) # 输入半径,赋给变量r area = 3.1415926 * r * r # 计算面积,赋给变量area print("圆的面积等于:",area) # 输出计算的面积
程序设计语言是编写计算机程序所用的语言,它是人与计算机进行交流的工具。程序设计语言的发展过程是从低级语言到高级语言,即从机器语言到汇编语言再到高级语言。
机器语言被称为第一代语言,它是计算机发展初期使用的语言。机器语言是由“0”和“1”组成的二进制代码,一条指令是一串二进制代码,一条指令规定计算机执行的一个操作。计算机所能执行的指令集合,叫作指令系统,不同型号的计算机的指令系统不同。机器语言依赖于计算机硬件设备,不同的计算机硬件设备下有不同的机器语言。因此,在一种类型的计算机上编写的机器语言程序,不能在另一种类型的计算机上执行。
在计算机发展初期,人们只能用机器语言编写程序。机器语言是唯一能被计算机硬件“理解”的语言,换句话说,只有用机器语言编写的程序才可直接被计算机执行。但对人们来说,机器语言难懂,不容易记忆,而且易写错,用其编写的程序难以修改和维护。例如,要计算“15+10”,用机器语言编写的程序如下:
10110000 00001111 : 把15放入累加器A中 00101100 00001010 : 把10与累加器A中的值相加,把结果仍放入累加器A中 11110100 : 结束,停机
人们直接用机器语言来编写程序,是一种相当复杂的手动劳动方式,程序的质量完全取决于个人的编写水平。由于使用机器语言编写程序要求使用者熟悉计算机硬件的所有细节,特别是随着计算机硬件结构越来越复杂,指令系统变得越来越庞大,一般的工程技术人员难以掌握,使得机器语言使用起来很不方便。为了使工程技术人员编写程序工作更轻松,计算机工作者开展了对程序设计语言的研究以及语言处理程序的开发。
汇编语言被称为第二代语言,也称为符号语言。它出现于20世纪50年代初,用助记符来表示每一条机器指令,如用ADD表示加法指令、用SUB表示减法指令等。这样,每条指令都有明显的符号标识。例如,要完成“15+10”的计算,用汇编语言编写的程序如下:
MOV A,15 : 把15放入累加器A中 ADD A,10 : 把10与累加器A中的值相加,把结果仍放入累加器A中 HLT : 结束,停机
与机器语言相比,汇编语言比较直观和便于识别、记忆,但它仍是面向计算机的语言,要求编程人员对计算机硬件较熟悉,而且通用性差,不同计算机的汇编语言不同。用这种语言编写程序,仍然是相当烦琐的。
高级语言也称算法语言,出现于20世纪50年代中期,比较有影响力的有Fortran、ALGOL 60、COBOL、Pascal、C等。它们的特点是与人们所熟悉的自然语言和数学语言更接近,可读性强,编程方便。一般来说,用高级语言编写的程序可以在不同的计算机上执行,尤其是有些标准版本的高级语言,在国际上是通用的。在使用这些高级语言编程的过程中需要给出算法的每个步骤,需要一步一步地安排好计算机的执行顺序,告诉计算机怎么做,因此高级语言被称为面向过程的语言,也被称为第三代语言。
近些年,随着Windows的普及以及多媒体技术和网络技术的发展,涌现出了多种面向对象的程序设计语言,如Java、Visual Basic、Visual C++、Delphi、Python等,它们被称为第四代语言。它们的特点是只要告诉计算机做什么就可以了,由计算机自己生成和安排执行的步骤,这就是第四代语言——非过程化语言的思想。例如,要完成“15+10”的计算并输出结果,用高级语言(Python)编写的程序如下:
A=15+10 # 计算15+10,将结果赋给变量A print(A) # 输出A的值
由上述程序可以看出,高级语言的特点是易学、易用、易维护。人们可以用它来更高效、更方便地编写各种程序。但用高级语言编写的程序是不能直接在计算机中执行的,必须经过编译程序或解释程序翻译成机器语言。
这里必须指出,高级语言虽然比较接近于自然语言,但它与自然语言还有一定的差距。它对所采用的符号、各种语言成分及其构成、语法格式等都有专门的规定,即有严格的语法规则。这是因为高级语言程序是由计算机处理并执行的,而自然语言是由人处理的。目前为止,计算机的能力是人预先赋予的,计算机本身不能自动地适应变化。因此,使用高级语言编程时必须严格遵循其语法规则。
用汇编语言和高级语言编写的程序,计算机是无法直接执行的,必须进行适当的转换。语言处理系统的作用就是将汇编语言程序和高级语言程序转换成可在计算机上执行的程序、最终的计算结果或其他中间形式。
语言处理系统因所处理的语言及处理方法和处理过程的不同而不同。但任何一种语言通常都有一个翻译程序,这个翻译程序也称为语言处理程序,其作用是把汇编语言程序或高级语言程序翻译成等价的机器语言程序。被翻译的汇编语言程序或高级语言程序称为源程序,翻译后生成的机器语言程序称为目标程序。
除翻译程序外,语言处理系统还包括正文编辑程序、连接编辑程序(用于将多个分别编译或汇编过的目标程序与库文件进行结合)和装入程序(用于将目标程序装入内存并启动执行)等。
语言处理程序根据所翻译的语言及其处理方法的不同可分为汇编程序、编译程序和解释程序。汇编程序是把汇编语言程序翻译成机器语言程序的翻译程序。将高级语言程序翻译成机器语言程序的翻译程序有两种,即编译程序和解释程序,它们的工作方式不同。下面分别介绍上述3种语言处理程序。
由于汇编语言的指令与机器指令大体上一一对应,因此汇编程序较为简单。汇编程序的工作过程就是对汇编语言的指令逐行进行处理,并将其翻译成计算机可理解的机器指令。其处理的步骤如下。
① 把指令助记符操作码翻译成相应的机器操作码。
② 把符号操作数翻译成相应的地址码。
③ 用操作码和操作数构造成机器指令。
编译过程是:将用高级语言编写的源程序输入计算机,然后调用编译程序把整个源程序翻译成由机器指令组成的目标程序,再经过连接编辑程序连接后形成可执行程序,最后执行得到执行结果,如图1-1所示。采用编译程序执行一般效率高,高级语言大多采用编译程序。微型计算机高级语言如Fortran、Pascal、C等都采用编译程序,BASIC语言有采用解释程序的,也有采用编译程序的。
图1-1 编译过程
编译程序对源程序进行翻译的方式相当于“笔译”。在编译程序执行的过程中,要对源程序扫描一次或几次,最终生成一个可在具体计算机上执行的目标程序。由于源程序中的语句与目标程序中的指令通常具有一对多的关系,所以编译程序的实现算法较为复杂。但通过编译程序可以一次性产生高效执行的目标程序,并把它保存在外存储器(简称外存)上,以便多次执行。因此,编译程序更适用于翻译规模大、结构复杂、执行时间长的大型应用程序。
编译程序的工作过程如图1-2所示。编译程序多次扫描并分析源程序,然后将其转换成目标程序。通常编译程序在初始处理阶段建立符号表、常数表和中间语言程序等,以便在分析和综合时引用和加工。源程序的分析是经过词法分析、语法分析和语义分析3个步骤完成的,分析过程中发现错误时会给出错误提示。目标程序的综合包括存储分配、代码优化、代码生成等,目的是为程序中的常数、变量、数组等数据分配存储空间。
图1-2 编译程序的工作过程
随着高级语言在形式化、结构化、智能化和可视化等方面的发展,编译程序也随之向自动化程序设计和可视化程序设计的方向发展。这样,可为用户提供更加理想的程序设计工具。
解释程序对源程序的翻译方式相当于两种自然语言间的“口译”。解释程序的工作过程是边解释边执行,即把用高级语言编写的源程序输入计算机后,解释程序对它进行逐句扫描、翻译、执行,得到执行结果。图1-3所示是解释程序的工作过程。这种对源程序逐句执行的工作方式,显然便于实现人机交互。解释程序结构简单、易于实现,但效率较低。
图1-3 解释程序的工作过程
与机器语言和汇编语言不同,高级语言是面向用户的。目前,高级语言种类已达数百种。下面介绍几种常用的高级语言。
Fortran语言是使用最早的高级语言之一。从20世纪50年代到现在,它始终在科学计算中占据着重要地位。许多大型科学计算的软件包是用Fortran语言编写的。它的特点是形式接近数学公式、简单易用,是进行大型科学和工程计算的有力工具。随着计算机科学技术的发展,提供向量和并行计算能力是Fortran语言发展的主要趋势。
C语言是20世纪70年代初由美国贝尔实验室开发的,它最初是作为UNIX操作系统的主要语言开发的。C语言在发展过程中做了多次改进,1977年出现了不依赖具体计算机的C语言编译文本,使C语言移植到其他计算机上的工作大大简化,也推动了UNIX操作系统在各种计算机上的应用。随着UNIX操作系统的广泛使用,C语言迅速得到推广。1978年以后,C语言成功地应用在大、中、小、微型计算机上,成为独立于UNIX操作系统的通用程序设计语言。它表达简洁,控制结构和数据结构完备,还具有丰富的运算符和数据类型,可移植性强,编译质量高。C语言作为高级语言,还具有低级语言的许多功能,可以直接对硬件进行操作,如对内存地址的操作、位的操作等。因此,用C语言编写的程序可以在不同体系结构的计算机上运行。C语言不仅适用于编写效率高的应用软件,也适用于编写操作系统、编译软件等系统软件。C语言已成为应用最广泛的通用程序设计语言之一。
C++语言是在C语言基础上发展起来的面向对象的通用程序设计语言。C++语言于20世纪80年代由贝尔实验室设计并实现。C++语言是C语言的扩展,扩展的内容绝大部分来自其他著名语言(如Simula、ALGOL 68、Ada等)的优秀特性。它既支持传统的面向过程的程序设计,又支持面向对象的程序设计,而且运行性能好。C++语言与C语言完全兼容,用C语言编写的程序能方便地在C++环境中重用。因此,近些年C++语言迅速流行,成为当今面向对象程序设计的主流语言之一。
Visual C++是Microsoft公司Visual Studio开发工具箱中的C++程序开发包。Visual Studio提供了一整套开发互联网和Windows应用程序的工具,包括Visual C++、Visual Basic、Visual FoxPro,以及其他辅助工具,如代码管理工具Visual SourceSafe和联机帮助系统MSDN。Visual C++除包括C++编译器外,还包括所有的库、例子和开发Windows应用程序所需要的文档。从早期的1.0版本发展到6.0版本,Visual C++有了很大的变化,在界面、功能、库支持方面都进行了许多增强。Visual C++ 6.0在编译器、MFC类库、编辑器以及联机帮助系统等方面都比以前的版本有了较大改进。Visual C++是一种大型语言,其功能、概念和语法规则都比较复杂,要深入掌握它需要花较多的时间,尤其需要有较丰富的实践经验,一般使用Visual C++编程的主要是专业软件开发人员。
Java是由Sun公司开发的一种新型的跨平台分布式程序设计语言,Java因其简单、安全、可移植、面向对象、多线程处理和动态等特征引起世界范围内的广泛关注。从狭义上讲,Java是一种编程语言,它既可作为一种通用的编程语言,又可用来创建一种可通过网络发布的、动态执行的二进制“内容”。从广义上讲,Java包括客户-服务器模式下的开发和执行环境,其具有完全的平台无关性,它基于C++,但又抛弃了C++中的非面向对象和容易引起软件错误的地方,因此是一种简单又稳定的语言。
BASIC(beginners all-purpose symbolic instruction code,初学者通用符号指令代码)语言是在20世纪60年代初期研制的一种交互式语言,它是一种应用广泛的计算机高级语言,特点是易学、易用、人机交互能力强,非常适合初学者学习、使用。BASIC语言有多种版本,除了最初的基本BASIC外,常用的还有Quick BASIC、True BASIC、Turbo BASIC、Visual Basic等,特别是Visual Basic给广大用户在Windows环境下开发软件带来了很大的方便。
1991年,Microsoft推出了Visual Basic 1.0。它是第一个基于Windows的可视化编程软件,许多专家把Visual Basic的出现当作软件开发史上一个具有划时代意义的事件。此后,Microsoft相继推出了Visual Basic 2.0到Visual Basic 6.0多个版本。Visual Basic是基于BASIC的可视化程序设计语言,它既保持了BASIC语言简单、易学、易用的特点,又采用了面向对象、事件驱动的编程机制,而且Visual Basic引入了“控件”的概念,使得大量已经编好的Visual Basic程序可以被直接使用。用户可用Visual Basic快速创建Windows程序,还可编写企业水平的客户-服务器(client/server,C/S)程序及强大的数据库应用程序。Visual Basic已成为一种简单、易学、功能强大、应用广泛的通用程序设计语言。
Python是由荷兰人吉多·范罗苏姆(Guido van Rossum)设计的解释型、面向对象、通用的程序设计语言。其具有简洁的语法规则,使得程序设计学习更容易,同时具有强大的库功能,能满足大多数应用领域的开发需求。
Python源于1989年末,Guido为了开发一个新的脚本解释程序,在ABC(all basic code)语言的基础上,吸收Modula-3的优秀思想,结合UNIX Shell和C语言的习惯设计了Python。之所以取名为Python,是因为Guido是BBC出品的电视剧 Monty Python's Flying Circus 的剧迷。
Python的第一个版本于1991年初公开发行。由于功能强大和采用开源方式发行,Python发展得很快,用户越来越多,形成了庞大的语言社区。
2000年10月,Python 2.0正式发布。它修复了许多缺陷和错误,增加了许多新的语言特性,开启了Python广泛应用的新时代。
2008年12月,Python 3.0正式发布。这个版本在语法层面和内部解释器进行了很多重大改进,内部解释器采用完全面向对象的方式实现。这些重要改进使此版本不完全兼容之前的版本,因此用早期版本Python编写的程序无法在Python 3.0环境下运行。
目前,Python的两个版本Python 2.x和Python 3.x均在使用。其中Python 3.x是主流,Python 2.x的最后一个版本Python 2.7于2020年终止支持。
近年来,Python由于容易入门和第三方库丰富的特点受到了广大程序开发者的喜爱,在各种编程语言排行榜上都名列前茅。