Java将寿终正寝

2 views
Skip to first unread message

bruc...@gmail.com

unread,
Oct 11, 2005, 1:18:15 AM10/11/05
to 星星爱CPP
Java将寿终正寝
(本文一直存于磁盘上未发表,因怕引起口水战,今发表于google
group,不告诉别人,别人也就找不到^_^,发表本文的一个原因就是作为凭证,在日后Java死亡时证明我不是马后炮^_^)

在Java十周年的今天,我清晰看到了Java的末日,就如同三年前VB正红火时我预言VB活不过5年一样。

让我们回忆当初的VB世界,VB兴起的主要原因是简单易用,把大部分应用中可能用到的技术封装起来,几乎什么都有了,COM、数据库访问、office操控,还有各种控件,等等。短时间内这种做法当然可以称得上利器,想象一下,我们当初做应用软件开发的时候,每一个人岂不是也有一个小本本,记录下各种需要用到的代码,在工作中,这就是经验资本,但,5年后,这些代码还有用吗?应用本身总是最易变化的,5年前你使用的那些东西到如今还有几个存在?而VB本身,就可以看成是一个当时应用技术的合集,缺乏技术本身的开发能力,它是一个应用语言,而非开发语言,所以它的优点只存在于当时,因此它的灭亡就是秃子头上的虱子,非常显然。
BTW1:我这里说的是VB,不是BASIC,BASIC的优点是语法简单,而VB的优点是应用简单,BASIC有活下去的理由(虽然没有多少人在用BASIC了),而VB没有。
BTW2:有人认为目前仍然有人在使用VB,因此不算死亡,而我对VB死亡的认证是它的主人---也就是M$---已经不再开发它了。
BTW3:有人认为VB没有死,因为它进化成VB.net了。只有对VB和VB.net一窍不通的人才会这样说,VB和VB.net,除了名字中都有"VB"两个字母,其他已经找不到共同点了。

Java存活和兴起的主要理由是什么呢?主要理由不是内存回收,不是面向对象,不是J2EE这些框架,而是:
1. 打破windows的垄断。
2. 跨平台。
对于第一点,本身就是一个弱智的理想,当初的信仰者怀着的是"理想",现在的信仰者多的是"弱智",Java是依赖操作系统的,不在同一个层次上如何竞争?一个相信蛋黄能比蛋壳还大的家伙可以算着"弱智"。
BTW4:有人会提出直接基于硬件平台的Java,事实上仍然有公司在从事这样的研究,但这种做法本身就是在否定跨平台,在否定Java本身,而且这样的公司越来越少了,再过一两年我想它们会绝迹于尘世。
现在让我们来分析一下"跨平台":
a. 只有跨平台的文档,没有跨平台的程序
首先要明白为什么要有多平台,因为每个平台需要提供的功能不同,unix的处理能力,windows的图形界面,即使这个功能是纯感情的,比如MacOS。
其次要明白平台之间区别的表现,本质上的区别就是上述所说的提供的功能不同,这个本质区别将导致用户接口的不同。
ASCII值0x41解释为'A',在任何平台上都一样,因为它是文档,不是程序,作为解释0x41为'A'的程式代码在每一个平台上都不一样(不排除有雷同的空能,但雷同不是必然的),没有跨平台程式的可能,那么Java是如何欺骗大众跨平台的呢?把Java分成JVM和Java中间码,JVM是Java中间码的解释器,它本身不可以由Java来编写,JVM本身是不可以跨平台的,每一个平台上的JVM都应该不一样。所以
如果Javar口中的Java是JVM+Java中间码,那么因为JVM是不可以跨平台的,所以Java不是一个跨平台的语言;
如果Javar口中的Java仅是Java中间码,不包括JVM,那么Java中间码只能算作文档,不属于程式,因为它不能直接在操作系统上运行。
所以理论上Java不是一个跨平台语言,Java不是,.net也不是,事实上就不可能存在跨平台语言的可能。
b. Java中间码如何跨平台
拿一个最简单最常用的应用来举例,在屏幕上画个点,每个操作系统的GUI都不一样,因此如果Java要想跨10个平台,那么就需要在这个10个平台上,每个平台上都用ASM/C/C++来实现一个画点的功能,然后由Java来调用。尴尬呀,Java每跨前一步,都需要ASM/C/C++先跨前10步。
事实上,还并没有这么简单,正如a中提到的,每个平台提供的功能可能不同,比如linux提供了多进程的能力,而DOS没有,请问Java如何实现跨平台的多进程能力?从理论上讲,能跨平台的功能只有诸平台的功能交集,平台越多,交集越小,所以能跨的越少,这又是一个尴尬。
不仅如此,前面已经讲过"为什么要有多平台",如果只用诸平台的功能交集,那么就否定了多平台存在的意义,如果否定多平台存在的意义,那么天下只有一个平台,还跨个啥?
c. 未来需不需要跨平台
如b所言,未来要么统一平台(理论上不应该出现这种状况),只有一个平台则所有语言都是跨平台的,Java的跨平台也就不是可炫耀的优点;要么各用各的,不去跨平台,因为这就是多平台存在的意义嘛。
然而在平台争竞存在的目前,在部分场合下跨平台是需要的,但却不需要一个类似JVM的适配器来跨平台,比如POSIX,操作系统级上为相同功能提供相同接口岂不是更好,比如gtk,语言库级上为相同功能提供相同接口岂不是更好,无论从任何一个角度看JVM都是丑陋和多余的。所以Java只是一群白痴对白痴技术的失败尝试,目前结果已经显现,Java可以寿终正寝了。我与很多应用软件设计师交流,了解他们的看法,从趋势上来看,对多平台/跨多平台的要求越来越多,但却不是Java的跨平台。

总结:
VB的死因是由于技术的进步,VB是一时的;
Java的死因是由于程序员智识的提升,Java是错误的。

bruc...@gmail.com

unread,
Oct 11, 2005, 1:35:26 AM10/11/05
to 星星爱CPP
考虑到[嗜血]和[玻璃]的理解力和反驳手段,特标注:这个“将”是一个不超过5年时间的形容词。也就是说我推算出Java在5年内灭亡。

菜刀

unread,
Oct 11, 2005, 9:52:20 AM10/11/05
to bruc...@googlegroups.com
从来就巨不喜欢这个东东,
我来作个见证。


On 10/11/05, bruc...@gmail.com <bruc...@gmail.com> wrote:
考虑到[嗜血]和[玻璃]的理解力和反驳手段,特标注:这个"将"是一个不超过5年时间的形容词。也就是说我推算出Java在5年内灭亡。



--
暂不签名

bruc...@gmail.com

unread,
Oct 11, 2005, 10:45:23 PM10/11/05
to 星星爱CPP
对上文“画点”做个补充说明:
画点涉及到操作系统的IO,必然要每个平台都实现一次,但对于纯算法呢,比如DES,Java可不可以实现跨平台梦想?
答案是“可以”但“不理想”,“可以”是肯定的,因为数值计算不涉及到操作系统级,但同时考虑以下两点
a.
Java是解释性语言,解释性语言的运行效率低于原生语言。
b. 算法应当尽可能的保持最高的运行效率。(^_^
运行效率永远是最重要的因素,虽然很多貌似大虾的人不这么认为,而我则以此来区分真正的程序员,原因与主体无关,不在这里阐述)
从以上两点看来,通用算法以Java实现是得不偿失的,目前事实上也是这样,Java中用到的DES算法,都是C/C++编写的。

BTW:其他更高级的一些数值计算,可能会利用到FPU、MMX、3DNow等平台相关的技术,这是绝对不可以跨的。

SevenCat

unread,
Oct 17, 2005, 8:52:26 PM10/17/05
to 星星爱CPP
我认为系统架构是最重要的因素。

bruc...@gmail.com

unread,
Oct 18, 2005, 10:06:40 PM10/18/05
to 星星爱CPP
还有人认为Java的主要优点是简单,但
a. VB够简单吧,它已经死翘翘了
b.
现在的Java简单吗?语法复杂而累赘,像是一个百衲衣,都是因为当初设计时眼光太短浅的缘故。

SevenCat

unread,
Oct 19, 2005, 4:56:53 AM10/19/05
to 星星爱CPP
vb没有完全死,而且他已经完成了很多项目了。
Reply all
Reply to author
Forward
0 new messages