CS,六,程序设计语言

来源:互联网 发布:mac如何升级10.11 编辑:程序博客网 时间:2024/05/24 02:26

        在最初的时候,曾经约定了一套机器指令,使用那套机器指令编写了一个简单的程序,不同的CPU具有自己的一套机器指令,称为机器语言(第一代程序设计语言),如果使用机器语言去编写大型程序,那么难度和复杂度基本上是不可能的了。本章就是开始介绍一些程序设计语言,去取代机器语言,本章的目标并不是学习一门特定的程序设计语言,而是学习与程序设计语言相关的一些知识。

历史回顾:

       最喜欢看历史了,呵呵。讲机器指令一一替换为助记符,一旦这种助记符系统建立起来,就开发了称为“汇编器”的程序来将用助记符形式表达的程序转换成机器语言。以此方式,人们使用助记符形式开发程序,然后用汇编器把它转换为机器语言,这种助记符的编程语言称为汇编语言,称为第二代程序设计语言。它要求用汇编编写的程序依赖与特定的机器,因为它们只是简单的从助记符到机器指令的翻译。

为了达到机器无关的新目标,计算机科学家开发了第三代程序设计语言,它们不依赖与特定的机器,一般来说,第三代程序设计语言的方法就是标识一个更高级的原语的集合(和伪代码一样),每一个原语要能够当作相对应的机器语言中的一个较低级的原语序列而被执行。一旦这样的高级原语集合被标识出来,就可以编写一个称为“翻译器”的程序,它能将用高级原语表示的程序翻译成机器语言程序,翻译器很类似第二代语言的汇编器,因此这种翻译程序通常称为“编译器”。

说明一下:编译器用什么语言都可以写,编译器主要的功能就是进行词法、语法、语义分析,然后生成中间代码,优化中间代码,根据中间代码生成汇编语言,最后将汇编语言变成机器码。整个编译器的算法你可以用任意语言实现。但是你的机器一定需要可以运行这个“编译器程序”,然后才能使用它去编译高级语言,转成机器码二进制文件。

       还有一种称为“解释器”的东西,它作为实现第三代程序设计语言的另一种方法出现的,它在编译出一个高级语言原语对应的指令后,就执行了它们,并不产生供以后执行使用的机器语言程序。

       这里随便想想,高级语言只是一些对应了低级原语功能的高级语言,可以使用任何自然语言去定义这些高级语言,只要有对应的低级语言就行,然后为其开发特定的编译器,它能识别这些被定义好的高级原语,并转换成低级原语,所以用什么语言写程序无所谓,只不过英语更方便。另外还有注意一点,高级语言是通用的,机器无关的,但是它们最终都要转换成机器指令,所以这部分工作交给编译器了,同一段高级语言代码,在不同平台上的编译器,将会被编译成适合对应机器的程序;这里还要注意下,虽然基本上高级语言实现了机器无关性,但是不同的计算机处理工作的方式可能不同,所以相同的语言,在不同的机器上有着不同的特性,大概就是这样吧,虽然现在程序移植要简单多,但是有时候还是需要做少量修改。

下面说到程序设计范型,我们所熟知的也就是,面向过程和面向对象了,函数式范型也只是只闻其名。

 

传统的程序设计概念

       这应该是属于命令型范型的设计方式。变量指代存储器地址;存储器地址中的数据被称为数据类型,它决定了所需的存储空间大小,数据的编码方式以及在该数据上可执行的操作。数据类型(准确的叫基本数据类型)被作为原语而存在于该程序设计语言中。其他的赋值语句,控制语句,过程单元等语言特性,不再叙述。

语言有了,设计对应的编译器便成了主要工作,前面简单的说到,只是一个语言转换的翻译工作,其实很复杂,当涉及到多文件程序时,还有个“连接器”的程序,这里不再叙述。

 

面向对象程序设计

       在命令型范型,也就是面向过程程序设计之后,基本的数据类型已经不再满足我们的快速开发,我们将同一类事物封装成一个类,需要它时,产生一个它的对象,它内部具有对象数据和对象对外界刺激的响应处理。在面向过程程序基础上,增加自定义类型,区别于基本数据类型,提供“封装,继承,多态”的语言特性。典型的就是C的基础上加上class成为C++(这里没这么简单,嘿嘿)。下面介绍的类与对象什么的,学习高级语言的时候自然会学习,这里不再叙述。

 

       说到这里,下面也不用怎么看了,没什么需要记的,不过这里需要mark一下,按照标准的问题求解过程,这些程序设计语言特性已经满足了,但是当处理特定事情时,还是需要额外的特性,使得可以充分使用计算机资源。比如:程序设计中的并发活动,仿照多道程序设计操作系统,设计语言特性处理对应的处理方式。另外在互联网普及的现代,网络程序也是很常见。这里提到的“多线程编程”和“网络编程”都是我目前并没有使用过的,因为并没有用到,自己也没有去学习,也没有去写代码敲实验,惭愧惭愧。好了,本章也这么结束好了。

0 0
原创粉丝点击