.NET和JAVA的跨平台,我们很期望.但是容易吗

来源:互联网 发布:iphone移动数据用不成 编辑:程序博客网 时间:2024/05/24 07:21

java最吸引人之处,在于跨平台。而.net可以看作java的改良版,囊括java大部分的优点,所以当然也具有跨平台的潜力。但是认真追究起来,java和.net的程序其实也不算真正跨平台,因为java vm(虚拟机器)和.net vm本身就是一个平台,而java程序只能在java vm上执行,.net程序只能在.net vm上执行,至于vm的底下是什么操作系统,则无关紧要。

更清楚的说,java和.net的跨平台,指的是跨“操作系统”平台。所以,java vm和.net vm能移植到什么os平台,java程序和.net程序就能跨到什么平台。

从1.0版至今,java历经了近八年的发展,java已经无所不在了。除了在服务器上已经取得压倒性的胜利之外,在桌面系统的安装比例也已经超过90%(2002年的数据),且随着最近dell等大厂和sun签约在pc上预先安装java vm,此数据未来会更高。

但事实上,java跨平台的开放程度并不若我们所想象的美好,主要的原因在于四不、一没有:

版本不一致:许多操作系统上虽然已经具备java vm,但是版本并未和最新版的java vm同步,甚至不同版本差距颇大者。举例来说,早期mac os在追随java的脚步上,步伐很慢,往往差了一个版本,例如在java 1.3推出一、二年后,mac os仍只有1.2版的java vm可用(但是现在mac os x已经追上java的版本推进)。另外,java vm安装比例固然已经超过90%,但是其中应该有许多仍是使用ie浏览器内建的microsoft vm(只支持到java 1.1.4 api),不能执行1.2以后的java 2程序。所幸的是,版本落差这个问题近来已经有显著的改善。

特殊动态链接库不存在:对于那些非j2se标准的动态链接库(例如java 3d),往往只局限在window、solaris、linux三个操作系统。关于这一点,我不认为未来几年内会有所改善。

标准不够开放:sun曾经把java提交给iso来制订开放的标准,但后来又因为舍不得而撤回,改成立jcp委员会为java的标准制订单位。这也使得java在开放程度上并未如宣传上所说的那么好。(这一方面,.net还比java好一些,至少核心部分已经是ecma的标准)。

厂商不服气:这可能会造成标准的分裂。早期微软在visual j++产品中就有一些可能造成java分裂的举动出现。近年来关于ibm和jboss等公司,在j2ee的产品上,和sun也是屡次发生冲突。甚至之前传出某公司有利用市场的力量,另立标准的可能。例如eclipse的swt就是一个和java的awt/swing互相竞争的api。

技术人员没有跟上新技术:过去这八年,java修修补补,废弃了一些旧的api和程序设计思维,增加了许多新东西。如果开发人员未能随时补充新知识,仍用旧的方法开发系统,就会横生困扰。这其实是很严重的问题。

.net在跨平台问题也不少:

.net某些api在设计时,并没有考虑到跨平台的需求,例如windows forms就是如此。这会使得移植.net vm到不同操作系统时,难度会比较高。mono(linux上的.net vm)曾想移植windows forms到linux上,但是后来放弃了,改成在wine上面执行windows forms(当然效率会因此变差了)。[但是再后来由于system.drawing实现的比较好,因而又基于system.drawing来实现底层的swf,mono 1.2的发布就是等着swf1.0的发布。当然效率肯定比不上windows下的swf。不过mono是推举使用gtk#的]

只有核心部分是ecma的标准,重要的api例如asp.net,和ado.net都不是标准,而是微软私有的财产,可能涉及法律问题。mono另外推出gtk#这套gui的api(将gtk+包装起来)。

技术人员没有跟上新技术:.net经过了5年的发展,最新到来的2.0版本和1.x版本相比较,修改、增加了许多api增加了许多新东西,程序设计的思维也发生了重大的变化。如果开发人员未能随时补充新知识,仍用旧的方法开发系统,就会横生困扰。这其实是很严重的问题,ms 的webcast做的非常好,在帮助技术人员跟上新技术方面ms做的比sun要好许多。

目前微软有提供一套开放原始码的.net vm,名为share source common language infrastructure,简称sscli,代称rotor。sscli仅供爱好者研究使用,不做商业发行(微软商业版的.net vm是.net clr)。sscli可以在freebsd、windows、mac os x等平台上执行。

为了让.net能够摆脱微软的控制,除了由novell/ximian资助的mono计划之外(mono是西班牙文“猴子”的意思), gnu(自由软件基金会),也有一个dotgnu portable.net的类似计划。如果mono和dotgnu portable.net等计划能成功,那么.net的跨平台才能显露曙光,现在有许多的linux发行版本都内置了mono平台,如 novell suse linux系列操作系统。

.net以后是一定会流行的,至少会在windows和linux上成为主流。linux和mono得到novell公司的大力支持,相信在不久的将来.net将在linux平台称为开发的平台。为了让java能够跨进.net的世界,有人设计了.net vm上的java vm,“ikvm.net”正是这样的一套java vm。仗着java vm和.net vm有许多相似之处,ikvm.net在设计上就可以取巧,许多机制(例如垃圾收集)直接利用底下的.net vm,不需要自己完成。有了像ikvm.net这样的vm,java就可以跨到.net平台上,不失为一个扩展势力的好方法。

为了抢夺市场,java和.net阵营均使出浑身解数。java阵营近来的脚步似乎加快了,这是好现象。而.net阵营更是使出许多绝招,提供下面的工具:

visual j#:如果是1.1.4或更早以前的java程序,可以直接利用visual j#,来将java的原始码编译成.net的msil。这样的编译,成功率可以达到近100%。

程序转换工具:如果你的java程序并非1.1.4以前的古董,而是用到java 2的许多新特色,那么你可以利用微软提供的程序转换工具(例如jlca),来帮助将java程序转成.net程序,达到鲸吞的效果。这些工具通常可以将八九成的程序代码转换成功,但是许多地方仍须手动调整。我们可以期待,未来版本的此类工具会更强大,转换的成功率会更高。

程序合作工具:既有的java程序不可能一朝一夕改写成.net,而转换工具也不是100%成功,那么如果能让既有的java程序继续运作,而鼓励大家新的程序改用.net平台,并慢慢换掉旧的java程序,达到蚕食的效果。这个时候,程序代码合作工具就很重要,负责架起java旧系统和.net新系统之间的沟通桥梁。例如:microsoft .net and j2ee interoperability toolkit,就是这样的工具。

相关文章:

跨平台的客场交锋:.net vs. java on linux

跨平台的安全web services

大话 .net/mono 跨平台应用


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/