资源描述
,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,2019年6月30,感谢你的观看,1,第二章 语言设计问题,感谢你的观看,2019年6月30,1第二章 语言设计问题感谢你的观看2019年6月30,2,语言设计考虑的因素,早期的语言设计的目标是希望程序能高效地运行于昂贵的硬件上,因此,早期语言总是以翻译成高效的机器码为目标,即使程序难以书写。,现在,硬件价格下降、软件价格上升,更强调程序容易书写,即使慢点也可。例如,,ML,的类型特性、,C+,的类、,Ada,的包,(Package),均以降低执行速度为代价,但对保证程序正确性有帮助。,开发语言时,有三个影响语言设计的主要因素:,计算机本身,在计算机上支持语言的执行模型,即虚拟计算机,语言所实现的计算模型,感谢你的观看,2019年6月30,2语言设计考虑的因素早期的语言设计的目标是希望程序能高效地运,3,主要内容,计算机结构与程序设计语言的关系,结构上的对应关系,对应关系的实现手段,程序的执行模型:,虚拟计算机,虚拟机与程序语言实现的关系,程序语言与虚拟机的绑定,C/C+,概述,感谢你的观看,2019年6月30,3主要内容计算机结构与程序设计语言的关系感谢你的观看2019,4,2.1,计算机的结构和操作,一个计算机是能够存储和执行程序的数据结构和算法的集成集合。,计算机可通过用电线、集成电路、电路板等构造为实际的物理设备,此即实际计算机或称,硬件计算机,。,计算机也可以用运行于其他计算机上的程序(或软件)来构造,此即,软件仿真计算机,。,程序设计语言的实现是通过一个翻译器,将以语言书写的程序翻译为机器语言程序(可被某计算机直接执行,该计算机可以是硬件计算机,也可以为软硬参杂的,虚拟机,)。,感谢你的观看,2019年6月30,42.1 计算机的结构和操作一个计算机是能够存储和执行程序的,5,计算机结构与程序设计语言,一个计算机包含,6,个主要部件,它们与程序设计语言的主要方面有着非常密切的对应关系。,1,、数据:提供各种可供操作的基本数据项和数据结构。,2,、基本操作:提供对操作数据有用的基本操作集。,3,、顺序控制:提供控制基本操作执行顺序的机制。,4,、数据访问:提供控制向操作的执行供给数据的机制。,5,、存储管理:提供控制程序和数据存储分配的机制。,6,、操作环境:提供与包围程序和被处理数据的外部环境通讯的机制。,感谢你的观看,2019年6月30,5计算机结构与程序设计语言一个计算机包含6个主要部件,它们与,6,计算机硬件,包括程序和被处理的数据,操作主存和高速缓存中的数据,在主存和外部环境间传递程序或数据,完成处理工作,取机器指令,解码,调用指定的基本操作,以指定的操作数作为输入,返回,感谢你的观看,2019年6月30,6计算机硬件包括程序和被处理的数据操作主存和高速缓存中的数据,7,翻译器和软件仿真计算机,尽管理论上有可能直接构造硬件或固件计算机,来运行任何特殊的程序设计语言,但构造这样的计算机并不经济。,现实的考虑是实际计算机采用低级机器语言(基于速度、灵活性和价格考虑),编程仍以高级语言进行。语言实现者面临的任务是如何使高级语言程序执行在实际计算机上,而不必关心其机器语言是什么。,这个实现问题有两个基本方案。,1,、翻译(编译),2,、软件仿真(软件解释),感谢你的观看,2019年6月30,7翻译器和软件仿真计算机尽管理论上有可能直接构造硬件或固件计,8,翻译(编译),翻译过程:,高级语言程序,翻译器,等价的机器语言程序,硬件直接执行,翻译器:,源语言,等价的目标语言,感谢你的观看,2019年6月30,8翻译(编译)翻译过程:感谢你的观看2019年6月30,9,翻译(编译),几种特殊类型的翻译器:,A,、汇编器,目标语言:实际计算机的机器语言,源 语 言:汇编语言,机器语言的符号表示,大多数指令是一对一的翻译,B,、编译器,目标语言:汇编和机器语言,源 语 言:高级语言,C,、装配器或连接编辑器(,loader/link editor,),目标语言:实际的机器代码,源 语 言:几乎与机器代码相同,通常包含可重定位的机器语言程序和数据表(刻划可重定位代码为变成真正可执行所必须修改的地方),D,、预处理器或宏处理器,源 语 言:某种高级语言的扩展形式,目标语言:同样语言的标准形式。,通常进行宏替换。,感谢你的观看,2019年6月30,9翻译(编译)几种特殊类型的翻译器:C、装配器或连接编辑器(,10,翻译(编译),高级源语言到可执行机器语言的翻译通常涉及多个翻译步骤,有时,编译的某些步骤本身也涉及多遍,如:多遍扫描。,感谢你的观看,2019年6月30,10翻译(编译)高级源语言到可执行机器语言的翻译通常涉及多个,11,软件仿真(软件解释),我们可以通过运行在一台宿主机上的程序仿真另一台以高级语言为机器语言的计算机。,用宿主机的机器语言构造一个程序集(表达高级语言执行必需的算法和数据结构),即用软件构造运行于宿主机上的高级语言计算机,称为高级语言计算机在宿主机上的软件仿真(或软件解释)。,仿真计算机接受高级语言程序作为输入,主仿真器程序完成解释算法(解码并执行语言),最后从程序产生输出。,感谢你的观看,2019年6月30,11软件仿真(软件解释)我们可以通过运行在一台宿主机上的程序,12,软件仿真和翻译,软件仿真和翻译的不同:,均以高级语言程序为输入,但是,,翻译为目标码后再运行于实际计算机上,仿真计算机直接执行输入程序,翻译器以物理输入顺序处理程序语句,每个语句只处理一次。,仿真器以逻辑控制流处理程序,可能重复处理某些语句而完全忽略其他语句。,纯粹的翻译和纯粹的仿真形成两个极端,全翻译是很少的,除了输入语言和输出语言非常相似,如汇编语言。,全仿真也非常少,除了操作系统控制语言或交互式语言情形。,感谢你的观看,2019年6月30,12软件仿真和翻译软件仿真和翻译的不同:感谢你的观看2019,13,软件仿真和翻译,通常,语言实现是二者的结合:,感谢你的观看,2019年6月30,13软件仿真和翻译通常,语言实现是二者的结合:感谢你的观看2,14,软件仿真和翻译,翻译和仿真各有不同优点,有的程序结构最好翻译成更简单的形式,,如循环中语句多次执行,翻译可省去解码时间。有的方面最好保持原有形式,在执行时根据需要处理。,翻译的主要缺点是失去了关于程序的一些信息。,单个的高级语言语句比单条机器语言指令含有更多信息。,仿真的优缺点基本正好相反。,不需要太多的空间来存储代码序列的多份拷贝。但解码代价高。,通常,如源语言结构在目标语言中有直接表示,则代码扩展不太严重,可采用翻译。其他情形,可采用仿真。,感谢你的观看,2019年6月30,14软件仿真和翻译翻译和仿真各有不同优点感谢你的观看2019,15,软件仿真和翻译,语言划分,程序执行时的基本表示是否为实际机器的机器语言,成了语言划分的基础。,1,、编译型语言。如:,C,、,C+,、,Fortran,、,Ada,等,源语言翻成机器码,仿真仅限于一些运行支持例程(用于仿真源语言中和机器语言没有紧密类似的基本操作)。,通过硬件解释器,可实现更快的程序执行。,当然,也可能有的部分仍采用软件仿真,如数据控制结构和存储管理。,2,、解释型语言。如:,LISP,、,ML,、,Prolog,、,Smalltalk,等,翻译器不是产生机器代码,而是产生某种中间形式,比源语言更易执行。,然后使用软件解释器对中间代码进行执行。通常执行慢,也需要对基本操作、存储管理和其他语言特性的仿真,,这类语言翻译器很简单,更多的复杂性在软件仿真。,返回,感谢你的观看,2019年6月30,15软件仿真和翻译 语言划分程序执行时的基本表示是否为实,16,2.2,虚拟计算机和绑定时间,计算机的构造方式,1,、通过硬件实现,直接使用物理设备,2,、固件实现,在合适的硬件计算机上使用微程序设计,3,、软件仿真,在宿主机上用某种语言实现,4,、上述技术的组合,各自选择合适的实现方式,当一个程序设计语言被实现后,,程序执行时所使用的运行时数据结构和算法定义了一个计算机,。我们称其为由语言实现定义的虚拟计算机。,感谢你的观看,2019年6月30,162.2 虚拟计算机和绑定时间计算机的构造方式感谢你的观看,17,虚拟计算机,虚拟机的机器语言是该语言的翻译器产生的可执行程序(形式:对编译是实际的机器码形式;对解释是某种任意结构);,其数据结构是程序运行时使用的运行时数据结构;,基本操作是那些运行时实际可执行的;,顺序控制、数据控制和存贮管理结构也是那些运行时使用的,不管其是用软件、硬件、还是用微程序表示的。,感谢你的观看,2019年6月30,17虚拟计算机虚拟机的机器语言是该语言的翻译器产生的可执行程,18,虚拟机和语言实现,(1/3),语言定义隐含地刻划了一个虚拟机。,如果语言用它们的虚拟机来定义,使得每个语言和一个共同理解的虚拟机相关联,则使用虚拟机来描述语言的语义是直接的。,语言在不同计算机上的每次实现,实现者都会从语言定义中看到略微(或非常)不同的虚拟机。同一语言的两个不同实现,可能使用不同的数据结构和操作集合(特别是在语法中隐藏的部分)。,每个实现者有很大自由度确定自己的虚拟机结构,这些是他的语言实现的基础。,感谢你的观看,2019年6月30,18虚拟机和语言实现(1/3)语言定义隐含地刻划了一个虚拟,19,虚拟机和语言实现,(2/3),当语言在一特定计算机上实现时,实现者首先确定表示语言的语义解释的虚拟机,然后通过基本计算机提供的软、硬件元素来构造虚拟机。,语言实现的组织和结构由实现者的许多细微决策确定,需考虑计算机各种软、硬件设施和使用代价。,例:虚拟机如有整数加和平方根操作,则整数加可直接用硬件提供的整数加来实现,平方根可用软件仿真,使用一个子程序。,感谢你的观看,2019年6月30,19虚拟机和语言实现(2/3)当语言在一特定计算机上实现时,20,虚拟机和语言实现,(3/3),三个因素导致相同语言的不同实现,1,、实现者虚拟机概念的不同(隐含在语言定义中),2,、宿主机提供的设施的不同,3,、实现者如何用宿主机提供的设施仿真虚拟机元素的选择和如何去构造翻译器支持这些虚拟机选择的不同。,实现者还需确定什么通过翻译处理?什么在执行中解决?,返回,感谢你的观看,2019年6月30,20虚拟机和语言实现(3/3)三个因素导致相同语言的不同实,21,绑定和绑定时间,不严格地说,一个程序元素到某特定特征或性质的绑定,仅是从一个可能性质的集合中性质的简单选择。决定这个选择的程序陈述或处理的时间称为性质对元素的绑定时间。,语言中有不同的绑定和不同的绑定时间。,绑定时间的类型,对绑定类型没有简单的分类,但可区分出一些主要的绑定时间。这里,我们基于一个基本假设:程序的处理总是先翻译,后执行。,感谢你的观看,2019年6月30,21绑定和绑定时间不严格地说,一个程序元素到某特定特征或性质,22,绑定时间,(1/4),1,、执行时(运行时),很多绑定是在程序执行过程中完成的。如:变量到值的绑定,变量到特定存储位置的绑定(在很多语言中)。,进一步可分为:,a.,进入子程序或块时。,大多数语言中,重要的绑定只限制发生在执行中进入子程序或块时,如,C,、,Fortran,中形参到实参、以及形参到特定存储位置的绑定。,b.,在执行中的任意点。,某些绑定可以发生在程序执行中的任意点,如:变量通过赋值到值的绑定,以及在,LISP,、,ML,中,名字到存储位置的绑定。,感谢你的观看,2019年6月30,22绑定时间(1/4)1、执行时(运行时)感谢你的观看20,23,绑定时间,(2/4),2,、翻译时(编译时)绑定,可进而分为三种:,a.,程序员选定的绑定,写程序时,程序员有很多关于变量名、变量类型、程序语句结构
展开阅读全文