程序的要素:程序的背后
程序的要素:程序的背后编译器则有另外一个重要的功能:把由高级语言,诸如C,C ,Java或VB写成的程序翻译成硬件可以执行的指令。鉴于现代编程语言的复杂性和硬件执行指令的简单性,这个翻译过程是相当复杂的。如今我们使用的操作系统有Linux, iOS以及Windows。有许多类型的系统软件,但其中有两个是如今每个计算机系统的C位:一个是操作系统,一个是编译器。操作系统在用户程序和硬件之间提供了连接并且提供了大量的服务的管理功能。其中最重要的功能是:操作系统:用于管理计算机资源的督导程序,以使该计算机上运行的程序受益
一个典型的应用,诸如文字处理程序,或是一个大型的数据库系统,也许是由数百万行的代码以及能够支持应用实现复杂功能的如软件库组成的。但计算机中的硬件只能执行一些极其简单的底层指令。为了将一个复杂的应用转换成原始指令,这其中包含了好几个软件中的层级,用来把高级别的操作解释成简单的计算机指令,这就是伟大的抽象思想的一个很好的例子。
下图展示了这些软件层主要是以分层方式组织的,其中应用程序是最外面的环,而各种系统软件则位于硬件和应用程序软件之间。
Systems software系统软件:
提供一个最常使用的服务,包括操作系统,编译器,加载器和汇编器
有许多类型的系统软件,但其中有两个是如今每个计算机系统的C位:一个是操作系统,一个是编译器。操作系统在用户程序和硬件之间提供了连接并且提供了大量的服务的管理功能。其中最重要的功能是:
- 处理基础的输入和输出操作
- 分配存储和内存
- 提供对同时运行多个应用的计算机的共享保护。
操作系统:
用于管理计算机资源的督导程序,以使该计算机上运行的程序受益
如今我们使用的操作系统有Linux, iOS以及Windows。
编译器则有另外一个重要的功能:把由高级语言,诸如C,C ,Java或VB写成的程序翻译成硬件可以执行的指令。鉴于现代编程语言的复杂性和硬件执行指令的简单性,这个翻译过程是相当复杂的。
编译器:
一个把高级语言翻译成汇编语言的程序
从高级语言到硬件语言为了直接与电子硬件对话,你需要发送电子信号。计算机能理解的最简单的信号是on和off,所以计算机的字母表就两个符号。就像英语字母表里的26个符号可以写成任何形式一样,计算机字母表里的两个符号也没有限制计算机能做的事情。这两个符号可以由0和1表示,我们通常将计算机语言视为基数2的数字或二进制数。我们把每个字符称为a binary digit 二进制数字或 bit位。计算机是我们命令(称为指令)的奴隶。指令只是计算机可以理解和遵循的bit的集合,可以被认为是数字。比如说,如下bits:
1001010100101110
这是告诉计算机把两个数相加。将数字用于指令和数据是计算的基础。最初的程序员以二进制数与计算机进行通信,但这非常繁琐,以至于他们迅速发明了更接近人类思维方式的新符号。最初,这些符号是手工翻译成二进制的,但是这个过程仍然很累。通过使用计算机来帮助对计算机进行编程,先驱者发明了将符号表示法转换为二进制的软件。这些程序中的第一个被命名为汇编器。该程序将指令的符号版本转换为二进制版本。比如说,如果程序员写了:
add A B
那么汇编器会把它翻译成
1001010100101110
汇编器:
将指令的符号版本转换为二进制版本的程序。
该指令告诉计算机将两个数字A和B相加。如今仍沿用这种符号语言的名称,就是汇编语言。相反,机器可以理解的二进制语言是机器语言。
尽管有了巨大的进步,但是汇编语言仍然离科学家可能想用来模拟流体流动或会计可能用来记账的符号相去甚远。汇编语言要求程序员为计算机将遵循的每条指令写一行,以强制程序员像计算机一样思考。
认识到可以编写程序来将更强大的语言转换为计算机指令,这是计算早期的重大突破之一。如今,程序员的生产力和精神健全应归功于高级编程语言的创建和将这些语言的程序翻译成指令的编译器。下图显示了这些程序和语言之间的关系,这也是抽象的强大的一个示例。
一个编译器使得程序员可以写出高级语言的表达式:
A B
编译器会将达编译成汇编语言的表达式:
add A B
就像之前展示的,汇编器会将这条语句翻译成二进制指令从而告诉计算机把A和B两个数字相加。
高级编程语言提供了许多重要的好处。首先,它们使程序员能够使用英语单词和代数符号以更自然的语言进行思考,从而使程序看起来更像文本,而不是类似的隐含符号表。此外,它们允许根据语言的预期用途来设计语言。因此,Fortran设计用于科学计算,Cobol设计用于业务数据处理,Lisp设计用于符号操作,等等。对于更狭窄的用户群,也有特定领域的语言,例如对流体模拟感兴趣的用户。
编程语言的第二个优点是提高了程序员的生产率。在软件开发中达成广泛共识的为数不多的领域之一是,使用以较少的行来表达思想的语言编写程序时,开发程序所需的时间就会减少。简洁是高级语言优于汇编语言的明显优势。
最后一个优势是编程语言允许程序独立于其开发所在的计算机,因为编译器和汇编器可以将高级语言程序转换为任何计算机的二进制指令。
这三个优点是如此强大,以至于如今很少用汇编语言进行编程。