Java的诞生及其历史影响

小枫
Java是Internet上的世界语。
Java是最佳的网络应用开发语言。
Java的诞生,从根本上解决了Internet的异质,代码交换,以及网络程序的
安全性等诸多问题。首先,Java是一种平台无关语言。Java程序编译后,
生成字节代码(byte-code),运行在Java虚机器(实际上是一个解释器)上。一
个操作系统平台只要提供Java虚机器,Java程序就可以在上面运行。从理
论上讲,Java程序可以运行于所有的操作系统平台上,从根本上解决了
Internet的异质问题。其次,Java采用了可移动代码技术,在网络上不仅可
以进行无格式的数据信息交换,而且可以进行程序交换。Java是比较纯的
面向对象语言,它的绝大多数程序实体都是对象,利用对象的封装性可以
大大降低网络上程序交换的复杂性。第三,Java可以和HTML(HyperText
Markup Language)无缝的集成,把静态的超文本文件变成了可执行的应用程
序,极大地增强了超文本的可交互操作性。最后,Java是一种更安全的语
言,它消除了C和C++中众多的不安全因素,提供了诸多安全保障机制,
例如:异常处理,代码检查等,比其它语言更适合网络应用软件的开发。
Java不仅仅是一个程序设计语言,更是一个网络操作系统。这是因为:第
一, Java的可以不依赖于任何现有操作系统,可以直接运行在某种机器或
CPU上(例如:Java芯片,80x86);第二, Java有自己的内存管理功
能;第三,Java支持多线程程序,可以个用C实现的EMACS的文本编辑器。
在研究开发过程中,Gosling 深刻体会到消费类电子产品和工作站产
品的开发哲学之间差异:消费类电子产品要求高可靠、费用低、标准化、
使用简单,而工作站用户要求强大的计算能力,而不在此乎价格以及操作
的复杂性。消费类电子产品用户并不关心CPU的型号,也不欣赏专用昂贵
的RISC处理器,他们需要建立在一个标准基础之上,一系列可选的方案,
从8086-80586都可以上。
从C++开始
为了使整个系统与平台无关,Gosling首先从改写C++编译器着手。但
是Gosling在改写过程中感到仅C++是无法满足需要的,于是在1991年6
月份开始准备开发一个新的语言,那么给它起一个什么名字呢? Gosling回
首向窗外望去,看见一棵老橡树,于是建一个目录叫Oak,这就是Java语
言的前身。(后来发现Oak已是Sun公司的另一个语言的注册商标,才改名
为Java,即爪哇,太平洋上一个盛产咖啡的岛屿的名字)。
Gosling在开始写Java时,并不局限于扩充语言机制本身,更注重用的顶置盒
式操作系统,但实践证明,这个市场尚未成熟。例如:好几家交互式有线
电视网的实验都以失败告终。
Naughton立即认识到研究方向应该转移。在Naughton的努力下,研究
开始向在线服务,CD-ROM和基于网络的台式机方向转移。最后
FirstPerson解散,一部分人去了Sun Interactive开发数字视频数据服务器,
而另一部分开始把Java用于基于网络的台式机系统。
Java语言的转折点
到了1994年,WWW已如火如荼的发展起来。Gosling意识到WWW
需要一个中性的浏览器,它不依赖于任何硬件平台和软件平台。它应是一
种实时性较高,可靠安全,有交互功能的浏览器。于是Gosling决定用Java
开发一个新的Web浏览器。
这项工作由Naughton和Jonathan Payne负责,到1994年秋天,完成了
WebRunner的开发工作。WebRunner是HotJava的前身,这个原型系统展
示了Java 可能带来的广阔市场前景,给SunLab两位领导: Bert SutherLand
和Eric Schmidt留下深刻印象,这一点非常重要,因为这两个人是Sun的首
席技术官员。特别是Sun的总裁McNealy对Java抱有坚定的信念,为Java
进入WWW立下了汗马功劳。正如McNealy所料,WebRunner改名为
HotJava,并于1995年5月23日发表后,引起了产业界巨大的轰动,Java
的地位也随之而得到肯定。McNealy卓越的洞察力和果断的决策,挽救了
这项差点锁进文件柜的脊有C++的运算符重载和多继承也被排除在Java之外。Java
为了追求语言简单性的另一惊人之举,是把C程序员推崇倍至的指针取消
了。指针实际上是C和C++最容易出错的方面,往往有时出了错很难定位,
例如有一段C程序:
/* 上面有若干行C代码*/
int *p, ;
p = (int *)malloc(10*sizeof(int)) ;
for (i=0; i *p++=0
/*下面有若干行C代码*/
......
a = index[n] ; /* index是一个整型数组 */
如果这段程序在前面不对end取值做检查,则极容易出错。当end>10
时,数组越界,在Unix中可能出现Segment Violation错误,在DOS和
Windows环境中就可能“死机”。奏个class可以组成一个包(package)。Java
的class和C++的一样有层次结构,子类可以继承父类属性和方法。Java
类中的方法,均缺省为虚函数。Java的类是可以动态加载的。
由于Java是比较纯粹的面向对象语言,它没有支持C++的模板(template)
机制。我们大家都熟悉,在C++中可以定义一个模板类Stack,实现
个新类加载到当前环境中,这和传统程序开发的编
译、链接、测试有很大不同。这样的好处是支持快速原型开发,特别是字
节代码中带有编译时刻的信息,运行中出现错误很容易定位。
健壮性
Java的最初设计的目标是应用于电子类消费产品的控制,要求很高的
健壮性(Robust)。Java尽可能消除了C++的不可靠因素,可以防止许多编
程错误,因而更容易写出健壮的软件。当然,完全可靠的系统单靠语言是
无法保证的。
Java是一种比C++还强的强类型语言。Java要求显式的方法声明,这
保证了编译器可以发现方法调用错误,保证了程序更加可靠。
Java内存模型是提高程序可靠性最重要手段。Java不支持指针,这杜
绝了内存的非法访问。Java自动的无用单元收集防止了内存丢失等动态内
存分配所导致的问题。Java解释器运行时也实施检查,可以发现数组和字
符串访问的越界。
异常处理是Java保证程序健壮性的另一重要手段。一般认为,异常处
理是成熟语言的标志。异常是一个信号,这样开发的程序很容易在多种平台上使用。
可移植
平台无关性本身就提供了一种良好的可移植(Portable)。Java还提供
了实现无关性(no implementation dependent),例如: Java中的原始数据类型
的长度在任何平台上都一样。Java环境本身对硬件平台和操作系统也是可
移植的。Java的编译器是用Java写的,Java的运行系统是用ANSI C写的。
高性能
Java是一个解释型语言。众所周知,解释型语言除不可能达到编译型
语言的速度外,其它性能(例如:可根据运行的上下文和当前值决定执行
走向等)并不逊色于编译型语言。实际上,Java程序平均要比C慢20倍。
为了解决高性能(High-performance)问题,Java的设计者们正在开发
“Just in time”编译器,这种编译器可以在运行时把Java的字节代码翻译
成特定CPU的机器码。SUN申称转化成机器码的字节代码在性能上接近
于C或C++。
多线程
Java是一个多线程(Multithreaded)语言,它可以同时运行多个线程处
理多个任务。多线程技术可以提高图形用户界面的交互性能。使用C或C++
开发多线程应用程序往往是令人头痛的。首要的困难是要保证多个例程可
被若干并发线程运行。如果一个例程改变了状态变量的值,那么一次只可
能有一个线程执行。用C和C++编写多线程应用程序,需要程序员负责例
程的锁定与释放。这种显式地控制锁的方式一方面繁琐,另一方面又极易
产生死锁。
Java提供了语言内置的多线程控制,从而大大简化了多线程应用程序
的开发。Java的Java.lang包提供了一个类Thread,由它负责启动一个线
程,运行一个线程,终止一个线程,检查线程状态。
Java的线程支持还包括一组同步原语。罩网络编程。包括套接字(soc
ket),Internet地址,网
络数据包,统一资源定位URL(Uniform Resource Locator)等。
java.util。由一些通用的数据结构工具类组成,包括目录树、hash表、
日期、栈、位集、字符串等。虽然这个包没有某些商品C++库覆盖面广,
但可以胜任大多数网络应用程序的开发。
3 运行动的无用单元收集,程序无需显示释放占有的空间,无用单元自动回
收的算法依赖于虚机器最终实现的硬件环境。
Java虚机器的方法区是编译后的代码区域,它包括方法代码、符号表
符等。
4 Java带来的影响
Java作为语言,在Internet上已是灸手可热,大有“听取蛙声一片”的
气势。虽然新闻界的报导有些言过其辞,但勿庸置疑的是,Java作为软件
开发的一种革命性的技术,其地位已被确立, 这表现在以下几个方面:
(1) 计算机界的许多大公司已经购买了Java的许可证,包括IBM,
Apple,DEC,Adobe,Silicon Graphics,HP,Oracle,Toshiba,
Netscape以及最不情愿的Microsoft。Microsoft已在其Web浏览器
Explorer3.0版中增加了对Java的支持。这一点说明,Java已得到了工业界
的认可。
(2) 众多的软件开发商开始开发支持Java的软件产品。例如:Borland
公司正在开发的基于Java的快速应用程序开发环境Latte,预计产品会在
1996年中期发布。Borland公司的这一举措,推动了定的硬件平台,操作
系统以及网络环境,软
件的可移植性差,软件之间的通讯基本上限于数据通讯,无法进行代码的
交换。随着Internet的发展,以网络为中心的计算普及,客观上,需要一种
独立于平台的,代码可移动的计算技术,Java恰恰填补这一空白,这把
Wintel垄断的软硬件市场打开了一个巨大的缺口,引发了一场软件开发的
革命。
我们可以设想未来的计算方式,每个HomePage的实质是一个多媒体
应用程序,这些程序用Java来开发。Java应用程序运行在异质的机器、异
质的操作系统之上,甚至于电冰箱,烤面包箱,防盗电子设备之中,用Internet
把所有的电子设备连接起来,通过T发商也会大幅度降低销售成本。软件
的销售将变成类似杂志订阅活动。
对应用软件开发的影响
以前的应用软件开发商,为了使应用软件通用,通常要维护若干个操
作系统的版本,如:DOS的,Windows3.1的,Windows 95的,Solari2.0
的等等,这是一个很大的开销。采用Java后,这些开销会大幅度削减,
保证正确的数据访问,接受用户对数据的
修改。有关OpenDoc的基本技术和方法是美国加州构件集成实验室
(Component Integration Labs)完成。商品化的产品主要由Apple,IBM开发。
Java作为分布式对象技术远比OpenDoc和OCX要简单得多,关键是
在于Java提供一代码的可移动性和平台无关性。胜人一筹之处在于,网络
信息交换可以是数据信息,也可以是程序实体,是一项最有前途的分布式
对象技术。
Java连同Internet,WWW改变应用软件的开发和使用方式,一切都
要围绕着网络,围绕着平台无关。Word、Excel等传统的信息处理工具都
必然走向萎缩,因为它们是单机时代的产物。信息的价值在于使用和共享,
Internet和Web是信息的使用和共享最快捷、最便宜的方式,Word将演化
成为Web写作工具,Excel则将演化成Web上的电子表格。

枫到红极枫飘落 , 情到浓时情转薄 . 昨日共看花盛荣 , 今朝独对落花风 . 神龟虽寿有竟时 , 情能绵绵无绝期 ? 风来风去风匆匆 , 断续情随断续风 . 缘起缘灭缘可求 ? 花自飘零水自流 .
DOC
Word、Excel等传统的信息处理工具都
必然走向萎缩,因为它们是单机时代的产物。信息的价值在于使用和共享,
Internet和Web是信息的使用和共享最快捷、最便宜的方式,Word将演化
成为Web写作工具,Excel则将演化成Web上的电子表格。
-----------------------------------------------------------
伟大的预想,现如今慢慢成为现实。
“网络就是计算”,Sun公司当年喊出这个口号,感慨万千....

天下总有散掉的宴席...
对时间积分
虚拟机。。。。。呵呵 牛B