技术开发 频道

Java会死掉吗?5年后或10年后

   Java与Ruby、Python、Perl对比分析

   Java已经有十二年的历史,而当前Java面临的挑战主要来自动态语言,比如说Ruby、Python、Perl。为什么会有这样的挑战?李涛做了一个简单的例子如下(D12.JAVA):“S1,就是一个1的组成,N2是一个数字,它有一个数值是2。然后做一个新的字符串是S1和N2通过简单的组合,再做一个N3,就是1和2的相加,答案是3,所以新的字符串是1、2,N3值是3。大家看怎么做,定一个S1,然后N2,N3就是加一下。

D12.java class D12 { public static void main(String args[]) { String s1 = "1"; int n2 = 2; String s12 = s1 + Integer.toString(n2); int n3 = Integer.parseInt(s1) + n2; System.out.println("s12: " + s12 + ", n3: " + n3); } }

   如果你用Perl用,字符串加起来就是点,然后做组合计算。

D12.pl $s1 = '1'; $n2 = 2; $s12 = $s1 . $n2; $n3 = $s1 + $n2; print "s12: $s12, n3: $n3\n";

   Python跟Perl差不多,就是调用PRINT的方法,S1换成数字用IN的方法。

D12.py s1 = '1' n2 = 2 s12 = s1 + str(n2) n3 = int(s1) + n2 print "s12: " + s12 + ", n3:", n3

   最后你发现对比起来,Java做这一件同样的事用了11行的代码,240个字符,Perl是5行,85个字符。Python也是5行,80个字符。”

   通过上面这个简单的例子可以很容易看出动态语言的特点。
   第一,可以用很短的字符编程,开发速度很快。
   第二,编程的时候,要用一个变量的时候不需要静态的提出来,用之前不需要定义,就把一个变量拿过来直接用,具体什么类型,定义的时候不用管它,只是在运行的时候,运行机制自动的找到它是什么类型来做。
   第三,可以用动态语言编程。

   在业界有很多人不喜欢动态的脚本语言,李涛归纳主要有以下两个因素:
   第一个,没有Static Typing容易出BUG,不容易调整。
   第二个,不容易在虚拟机上运行,灵活性差一些。

   “实际上Static Typing的观点有点夸大了,它是有维护困难的问题。但是它维护困难以什么方式实现呢?就是以敏捷开发的方式实现的,所以业界老大SEAN McGrath,说它是一个双刃剑,你定义的时候必须提前告诉它”李涛说道。

   Java保存的时候有很多的信息,Java5比Java4性能有一个很大的提高。Java4的时候保存性是不存在的,在运行的时候,是看谁来运行,然后再来运行。Java5里面就改变了编译的过程,在编译文件里面存了一些安全信息。所以运行的时候,就会很快。因为它把安全信息已经做完了,存储起来了。李涛有点感慨道“编译可以说是Java的缺点,也可以说Java的优点,因为它在你以后运行的时候一些好处的。”

   既然动态脚本语言也有很多的优点,开发起来快,Java也有优势,那到底用什么呢?李涛说“这个没有最好的,只有最合适的。比如你有一个项目,你会Java,你就Java开发,因为你学一个新的语言,也不现实。如果一个语言不是很复杂,用动态脚本来做,的确使你的开发效率大大提高。这是对的。如果你做一个银行的项目,做一个保险的,非常大的项目,代码不是几行,几十行,而是几百万行了。所以选择编程语言,还是根据自己的实践,根据自己的具体需要来决定。”

   Java之所以能跨平台,不是因为Java本身,而是JVM,在不同的平台上有相同的JVM,输入不一样,输出是一样的。另外还有API,Java语言,一共是三个部分组成的。

   李涛透露“Java未来,不仅有跨平台的特性,还有跨语言的特性,这是以后的一个发展方向。”

   “JSR-223有一个规范,现在做服务必须有Java,以后就不需要Java,只要你做的Java模型上带一个交换语言的接口,就可以做Service。它带来的优点是可以拿到Java的接口,还可以拿到其他的脚本语言API,而且不需要编译,开发的成本节省了很多。从平台方面来说,Java是会赢的。”李涛自信的说。

0
相关文章