脚本语言-程序设计语言原理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 局域网时代,需要在局域网内实现信息 共享,有协作计算需求。
– 网络协议栈实现了数据的平台无关; – 以文件共享形式实现; – 客户/服务器模式,程序可以不共享; – 只要局域网内使用相同或相互兼容的平台,
也可以实现程序的共享。
平台无关
• Internet时代,对资源共享提出了新的要求:
– 局域网的规模和结构是可控制的;但是,没有任何个人和机 构可以控制Internet的构成。
平台无关
• 即时编译(JIT: Just-in-Time Compile)。
使用即时编译是为了提高Java程序的执行效率,是 对Java解释器的改进。即时编译在虚拟机解释执行 Java字节代码时发生。当虚拟机第一次调用某个方 法时,不再直接解释这个方法的字节代码,而是用 即时编译器将这个方法的字节代码编译成为本机目 标代码,然后执行这些目标代码。即时编译不是将 整个类的字节代码进行一次性编译,而是只编译正 在执行的函数,“边执行,边编译”。
Java虚拟机是平台无关性的关键
Java字节 代码
JavaVM for Windows
Window s
JavaVM for Solaris
Solaris
JavaVM for Mac OS
Mac OS
在不同的操作系统上有不同的Java虚拟机,向上有一致 的接口(虚拟机的指令——字节代码),向下针对不同 的操作系统有不同的实现方式。
• 保留了高级语言的主要机制
– 与C++基本相同的字符集、标识符、关键字、运算 符、特殊符号
– 比C++更加强化类型。增加了布尔类型,只保留数 组类型;使用真正的类型转换(C++中的类型转换 是“伪”的,目的是为了通过编译器的检查;Java 中的类型转换在运行时真正发生,如果不能转换, 系统会抛出异常)
平台无关
• 平台无关语言(编程语言)的实现:
– 传送源代码 将源代码传送到目标机,先经过编译,生成目标 机代码,再执行。前提是必须有不同平台的编译器,这种情 况往往在编译时缺乏源代码原有的环境信息(全程量),且 只能先编译存入目标码再运行。局域网时代服务器已经做过 了。要实时运行只能是解释(也要求有完整的信息)型语言。
描述性程序设计语言 Declarative Languages
Declarative Languages
大规模软件
更关注如何描述 问题本身,更脱 离实际运行环境
Declarative
Deterministic
冯诺依曼单机
Concurrent
网络环境
不同的软件开发方法
更关注描述冯诺依曼机如何执行
Baidu Nhomakorabea
Imperative
– 基本类型定义与及其字长相关; – 各机指令集不一,操作效果相当,实现过程
有微小的差别; – 同一语言在相同编译和执行环境下,同一程
序执行速度不一(硬件差异,优化次数);
平台无关
• 可移植性(portability)-为减少开发费用和 开发时间。
– 程序员可移植:用户会了某种语言到任何能 实现该语言的环境上即可编制程序而不需其 它知识;
平台无关
• 编译解释执行。
Java语言实现平台无关的关键是使用了“编译解释”执行方式。Java源代码经过编译,称为 Java字节代码(byte-code)。Java虚拟机(VM)是 字节代码的解释器。JavaVM是用软件构造的 一个虚拟计算机,它由虚拟的寄存器、内存、 堆栈等;字节代码就是这台虚拟计算机的指令。 所有操作系统上的JavaVM执行一致的指令, 这样,就屏蔽了各个平台之间的差异(如下图 所示)。
– WWW(World Wide Web)是Internet上最广泛的信息发布/浏览 方式。与FTP等以往的方式相比较,WWW具有较强的动态性 和交互性,需要完成复杂的应用(如电子商务等)因此,共 享资源不但包括数据,也应包括程序。这就需要一种平台无 关的语言。
– 激烈的竞争迫使软件生产者不断降低开发成本,缩短开发周 期。平台无关语言使开发者不需要为一个软件开发多个操作 系统的版本,减少了开发费用和时间。
小规模软件
Declarative Languages
• 走出去:某一个环境下编写的程序要能 在其他环境下执行。
• 请进来:其他环境下编制的程序要能为 我的环境所使用。
走出去
• 平台无关(编程语言) • 放置标示 • 脚本语言 • 服务计算语言 • 本体描述语言
走出去
• 源程序经过编译生成的目标码是与本地 机紧密相关的。表现在:
– 保留声明、作用域、变量、表达式、语句、三种结 构化控制;
– 保留并增强C++的异常;
– 与C++相似的面向对象机制:类作为特殊类型、构 造函数、初始化序列、实例变量、this/super、方法 的覆盖与重载、成员可见性。
• 取消了C++不利于网络应用的机制:
– 指针。以对象引用代替指针; – 取消头文件和预处理器(宏与机器相关); – C++中原有冗余:struct、union都被类代替; – 不支持模板,动态束定功能可实现; – 取消typedef; – 不支持运算符重载;
– 程序可移植:在该语言的某个环境上编制的 程序拿到有该语言实现的另一个环境上可以 照样运行,程序的计算,语义不变。
平台无关
• 已采用增加可移植手段。
– 设预定义环境(包)——Ada; – 分出头文件 - 宏 - 编译文件——C;
平台无关
• 网络计算的兴起使可移植性上升为平台 无关性。
平台无关
第三代JVM采用近年发展出的动态编译技术。
P.java
javac
P.class
网络
JVM
类装入器和字节代码校验
解释器


探测器


JIT编译器

全面优化器
P.class profile native.code
本地 O.S
走出去
• 平台无关 • 放置标示 • 脚本语言 • 服务计算语言 • 本体描述语言
– 传送目标代码 只有在相同或相互兼容的平台之间才可以实现。 如在Windows NT/9x组成的局域网中,可以在一台机器上调用 执行其它机器上的应用程序。
– 传送中间代码 中间代码由源代码经过编译生成。中间代码经 过优化。中间代码传送到目标机上由解释器解释执行。Java语 言使用的是这种方式。
Java对平台无关性的支持方法
相关文档
最新文档