- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
也可以为软硬参杂的虚拟机
第二章 语言设计问题 语言设计考虑的因素 早期的语言设计的目标是希望程序能高效地运行于昂贵的硬件上,因此,早期语言总是以翻译成高效的机器码为目标,即使程序难以书写。 现在,硬件价格下降、软件价格上升,更强调程序容易书写,即使慢点也可。 例如,ML的类型特性、C++的类、Ada的包(Package)均以降低执行速度为代价,但对保证程序正确性有帮助。 开发语言时,有三个影响语言设计的主要因素: 计算机本身 在计算机上支持语言的执行模型,即虚拟计算机 语言所实现的计算模型 主要内容 计算机结构与程序设计语言的关系 结构上的对应关系 对应关系的实现手段 程序的执行模型:虚拟计算机 虚拟机与程序语言实现的关系 程序语言与虚拟机的绑定 C/C++概述 2.1 计算机的结构和操作 一个计算机是能够存储和执行程序的数据结构和算法的集成集合。 计算机可通过用电线、集成电路、电路板等构造为实际的物理设备,此即实际计算机或称硬件计算机。 计算机也可以用运行于其他计算机上的程序(或软件)来构造,此即软件仿真计算机。 程序设计语言的实现是通过一个翻译器,将以语言书写的程序翻译为机器语言程序(可被某计算机直接执行,该计算机可以是硬件计算机,也可以为软硬参杂的虚拟机)。 计算机结构与程序设计语言 一个计算机包含6个主要部件,它们与程序设计语言的主要方面有着非常密切的对应关系。 1、数据:提供各种可供操作的基本数据项和数据结构。 2、基本操作:提供对操作数据有用的基本操作集。 3、顺序控制:提供控制基本操作执行顺序的机制。 4、数据访问:提供控制向操作的执行供给数据的机制。 5、存储管理:提供控制程序和数据存储分配的机制。 6、操作环境:提供与包围程序和被处理数据的外部环境通讯的机制。 计算机硬件 翻译器和软件仿真计算机 尽管理论上有可能直接构造硬件或固件计算机,来运行任何特殊的程序设计语言,但构造这样的计算机并不经济。 现实的考虑是实际计算机采用低级机器语言(基于速度、灵活性和价格考虑),编程仍以高级语言进行。语言实现者面临的任务是如何使高级语言程序执行在实际计算机上,而不必关心其机器语言是什么。 这个实现问题有两个基本方案。 1、翻译(编译) 2、软件仿真(软件解释) 翻译(编译) 翻译过程: 高级语言程序→翻译器→等价的机器语言程序→硬件直接执行 翻译器: 源语言→等价的目标语言 翻译(编译) 几种特殊类型的翻译器: A、汇编器 目标语言:实际计算机的机器语言 源 语 言:汇编语言,机器语言的符号表示 大多数指令是一对一的翻译 B、编译器 目标语言:汇编和机器语言 源 语 言:高级语言 C、装配器或连接编辑器(loader/link editor) 目标语言:实际的机器代码 源 语 言:几乎与机器代码相同,通常包含可重定位的机器语言程序和数据表(刻划可重定位代码为变成真正可执行所必须修改的地方) D、预处理器或宏处理器 源 语 言:某种高级语言的扩展形式 目标语言:同样语言的标准形式。 通常进行宏替换。 翻译(编译) 高级源语言到可执行机器语言的翻译通常涉及多个翻译步骤,有时,编译的某些步骤本身也涉及多遍,如:多遍扫描。 软件仿真(软件解释) 我们可以通过运行在一台宿主机上的程序仿真另一台以高级语言为机器语言的计算机。 用宿主机的机器语言构造一个程序集(表达高级语言执行必需的算法和数据结构),即用软件构造运行于宿主机上的高级语言计算机,称为高级语言计算机在宿主机上的软件仿真(或软件解释)。 仿真计算机接受高级语言程序作为输入,主仿真器程序完成解释算法(解码并执行语言),最后从程序产生输出。 软件仿真和翻译 软件仿真和翻译的不同: 均以高级语言程序为输入,但是, 翻译为目标码后再运行于实际计算机上 仿真计算机直接执行输入程序 翻译器以物理输入顺序处理程序语句,每个语句只处理一次。 仿真器以逻辑控制流处理程序,可能重复处理某些语句而完全忽略其他语句。 纯粹的翻译和纯粹的仿真形成两个极端 全翻译是很少的,除了输入语言和输出语言非常相似,如汇编语言。 全仿真也非常少,除了操作系统控制语言或交互式语言情形。 软件仿真和翻译 通常,语言实现是二者的结合: 软件仿真和翻译 翻译和仿真各有不同优点 有的程序结构最好翻译成更简单的形式,——如循环中语句多次执行,翻译可省去解码时间。有的方面最好保持原有形式,在执行时根据需要处理。 翻译的主要缺点是失去了关于程序的一些信息。 单个的高级语言语句比单条机器语言指令含有更多信息。 仿真的优缺点基本正好相反。 不需要太多的空间来存储代码序列的多份拷贝。但解码代价高。 通常,如源语言结构在目标语言中有直接表示,则代码扩展不太严重,可采用翻译。其他情形,可采用仿真。 软件仿真和翻译 — 语言划分 程序执行时的基本表示是否
文档评论(0)