- 1、本文档共43页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北航程序设计语言原理教材第15章
第15章 平台无关语言
高级程序设计语言宗旨之一是平台无关,即用户会了某种语言到任何能实现该语言的环境上即可编制程序而不需其它知识,在该语言的某个环境上编制的程序拿到有该语言实现的另一个环境上可以照样运行,程序的计算,语义不变。传统上将其称之为可移植性(portability),前者程序员可移植、后者程序可移植。由于高级语言源程序最终总要在不同操作系统、不同指令系统、不同内码格式的具体机器上实现,可移植性始终不能完全彻底解决。例如两不同指令系统的目标码程序语义完全等价是不可能的,只能使之差异最小,一般情况下不影响计算逻辑,就算很好了。业界几十年来一直为此努力,到80年代初Ada已声称可以做到程序和程序员可移植。它的办法是:
[1] 语言定义是与机器无关的,凡与机器相关部份(如基元类型和输入/输出等)做成预定义程序包。保证Ada写的程序可移植,执行语义微小差别可由预定义包查出。
[2] 提出完整的可移植环境(APSE),分三层。第一层核环境(KAPSE)是操作系统的抽象,即应用程序接口集。接口是规范化(大体一致)的。第二层,最小Ada程序设计支持环境MAPSE,保证Ada程序编译,连接、加载、运行,排错……程序动作基本一致。当然要包括支持程序包、函数库,也是可移植性的基本保证。第三层,支持程序开发和动作的各种工具,尽可能相同。其中最主要的一环是编译器要经过ACVC测试。
[3] 语言中向用户开放属性机制,使程序员能得知每种类型实现状态以及运行时的某些状态值。当有不一致时可采取补救措施。
90年代网络计算兴起,对平台无关语言提出了更高要求。因为一个不断扩充的异质网不可能每个站点都提供庞大的可移植环境,更不能统一操作系统。经常是几个不同的机器计算一个应用(系统),即一处开发加载到另一处立即可用。联合开发的程序交互可用。可移植性上升为平台无关性。
1995年出现的Java就是在这种需求之下开发出来的。本章讨论Java语言设计特点及其保证平台无关的机制。
除此而外,网络计算中还用到两类平台无关语言: 置标语言(严格说不属于程序设计语言)和脚本语言(严格说不能做到平台无关)是网络客户必须掌握的语言,而且随着网络计算技术的成熟,它们的重要性会与日俱增,本章一并介绍。
15.1 平台无关语言的实现策略
网络协议保证网络上两站点间文件的传输。文件中的数据(即使有较复杂的数据结构)一般可以复原。如果文件中是程序,接受站点只能看作字节流。无法在本机上执行。除非机器同构操作系统相同。网络能做到的是把程序作为字符流数据传过去。
实现程序传输,并在任何站点上执行是平台无关语言的第一需求。现在的问题是传什么与 怎样执行。
(1) 传输源程序
要求语言的定义完全是机器无关的,每一接受站点配备一翻译器以屏蔽本机的特殊性,并配备与机器相关的预定义程序包(类似Ada)以支持程序连接和运行。
翻译器可以是编译器可以是解释器。编译器可以使目标代码效率高,但经本机优化其语义差异偏大。解释器则相反效率较低、语义差异狭小。对于小型语言可采用此种方案(如脚本语言)。Ada不完全移植性证明此方案不可取。更重要的是传过去之后要编译一连接一加载才能运行,无法用于实时性较高的协作程序。
(2) 传中间代码
编译技术中中间代码是抽象机器码,是对实现世界的抽象,故平台无关。传中间代码是一个可行方案。编译时所需环境(词法分析、语法分析)在源程序所在机器上配备,接受站点无需,且不必传递。传出去的中间码文件,如果中间码标准化做的更好,并有同样的解释器(网络可做到这一点)平台无关性就基本保证。再一个优点是可以尽早发现源程序错误,增加传输有效性。解释器屏蔽本机特性,不同操作系统上的解释器的一致性是平台无关性的根本保证。最初的Java即采用编译—中间代码—解释执行方案。
(3) 传中间代码再编译后在执行
解释执行效率是低的。如果接受到中间代码程序后对它进行编译生成本机目标代码并优化,此时可得到高质量目标码,优化的语义差异比没有统一的中间码程序作优化语义差异小。这样编译要付出时间。当程序较大或有多次执行的程序块时,它比解释执行效率高。当程序较小时得不偿失。
(4) 传中间代码编译——解释执行
为了弥补(3)的不足可对中间代码解释执行。若得知有重复执行的大块,则将该块编译,如循环块、多次调用的过程/函数块,作为目标码模块暂存,下次执行直接引用。新版Java即采用这种方案。
总之,站点间传某一机器的目标代码绝不可行; 传源代码有实现上语义“微小差别”问题,当程序较小时可行; 传中间码可使语义差别最小,分散处理使双方处理程序小巧,中间有一次代码校验(这也是网络传输必须的)质量较高。
文档评论(0)