扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
2007充满了激荡人心的事件,动态语言的不断升温,JVM在开源社区不断发展以及Java社区的重要贡献者,Google的崛起等。问题是,这些预示了来年什么呢?安德鲁•格勒弗(Andrew Glover)准备了一些答案给那些打破砂锅问到底的Java开发者――现在,什么在2008接踵而至。
法国诗人保尔•瓦雷里曾经伤心地写下“困扰我们这个时代的是,未来,并不像过去看上去的那样”。然而,对于我们这些生活在Java平台崛起推动的互联网时代的人来说,瓦雷里多年前留下的这些诗句是永恒的。
过去的十多年,我们见证了Java Applet的兴起和没落,见证了EJB头顶上光环的不断暗淡,见证了JSF,Spring和Struts的异军突起(暂且不谈Struts渐渐显露的颓势),见证了Java已经重新定义成为一种语言和一个平台。Java平台已经衍生出三个分支(标准版本,企业版本,微型版本),JDK也开放给了开源社区。Java语言扩充了,包含了注解,范型,枚举类型,高级集合类型,还有更多。它也开始与动态语言,如Groovy,JRuby和Rhino等,共享 Java运行时(JRE)。事实上,如果稍稍留神一下,我们在过去的几年里注视着Java不断地从一种语言演变成为一个真正的平台。
在最近的十年里,我们知道Java已经不仅仅局限于一种语言或者一个平台了:它是一个社区,一个经济生态系统,一个鲜活的实体,而且这个实体已经发展成熟,成为了丰富的应用程序,或大或小公司的真正的生命线。
因此,尽管流言不少,我还是坚持认为Java在2008会持续红火。与其拿起卦子掐算未来,我们不如回顾一下过去的一年的趋势以及发生的重大事件。这些事件汇集起来,它们会告诉我们2008将发生什么。
遍地开花
2007年犹如过山车一样,非常引人注目。人们对动态语言的不断关注, JVM在开源社区不断发展以及Java社区的重要贡献者,Google的崛起。更多的是,单元测试,持续化集成和其他敏捷开发技术得到了更广泛的接受,这些都表面 Java开发者开始认识到我们的技艺是一门有责任要求的行业。我们终于开始重视代码的质量和寿命,将其与推向市场的速度,或者是在企业的即时应用放到同等重要的地位上来。
每个人都说,2007年有一些绝对的胜利,但是同时也有一些失望和争论,这给Java社区产生了超出预期更多的阻碍。留心一下以下这些体现过去一年的重大因素。
动态语言的成熟
随着1.0以及随后的1.5版本的发布,Groovy在2007的发展达到了一个关键的里程碑。走过过去5年或者多年的历程,Groovy没有替代Java,相反定位成了Java运行时(JRE)的补充语言。
Groovy的大卖点是简练的语法,简化了日常的开发工作。例如,打开和读取一个文件在Java语言是典型的冗长结构:
try { BufferedReader in = new BufferedReader( new FileReader(path));
String line; while((line = in.readLine()) != null)
{ System.out.println(line); } in.close(); }catch(IOException e)
{ System.err.println("Exception reading"); }
但是同样的代码,Groovy可以写的更加敏捷:
new File(path).eachLine{ line -> println line }
根本上,Groovy,像其他动态语言一样,可以让你你扔掉异常处理,类型和分号,还可以使得代码更加简练,而代码简练最终使得代码的可读性更强(是的,上面那个File对象是一个Java java.io.File对象)。
把网撒开然而, Groovy并不是2007年动态语言阵营的唯一参与者。2006年发布的Java 6版本引入了一个与动态语言交互的标准API,很多Java开发者在去年临近年底才开始体验。对该API进行旗舰式集成的是Rhino。但是,看起来在 Java7版本发布时还会有更多集成进来。
最早进行集成的语言之一不容置疑是JRuby,1.0版本的发布和令人咋舌的比Ruby本身运行速度还快的实现,使得它备受瞩目。像 Groovy一样,由于可以使用更加宽松的语法,加入了一些特殊机制的JRuby(它可以使 RubyJVM里运行,且与正常的Java对象交互)使Java开发更加简单。例如,使用Ruby可以增强标准的对象,象用Ruby的String操作会更加容易。在标准的Java里,检查一个String实例是否为空值可能要做象如下方法的一样的操作(这是一个Apache commons-lang的 isBlank实现)。
public static boolean isBlank(String str)
{ int strLen; if (str == null || (strLen = str.length()) == 0) { return true; } for (int i = 0; i < strLen; i++) { if ((Character.isWhitespace(str.charAt(i)) == false)) { return false; } } return true; } |
class String def blank? empty? || strip.empty? endend
实际上,Ruby式的动态允许运行时添加额外的行为到核心类库或任意对象(象给String增加一个blank?方法)。更进一步,JRuby可以进行反作用对核心Java对象增加方法。因此,稍一施法就可以给Java String类添加一个blank?方法。
开放Java核心
去年Java的开源意味Java平台的发展不再由Sun核心工程师们说了算了:现在它的前途由我们掌握了。对Java类库,Javac,甚至JVM本身都采取GPL协议,OpenJDK保证将会开创一个创新的周期。实际上,我们已经看到了。
在2007 年十月,一个名为Multi-Language VM的项目在OpenJDK旗下开展了。这个项目旨在通过修改Java的底层架构,实现“以JVM特性为原型,高效支持Java之外的语言”。很明显,这项目结合了去年最令人振奋的两个发展潮流,也就是围绕在动态语言的热衷和OpenJDK,这宣称我们处在了一个Java核心创新的时代。
Sun 的开放当然不是从OpenJDk开始的,而是Glassfish,作为Sun支持的开源应用服务器,它在2007自始至终获得了社区更多的追捧。最近,我们无法忽略Sun对MySQL AB的收购, MySQL背后的公司是MySQL AB,而MySQL似乎是当今最流行的开源数据库。
所有这些发展都表明Java的鼻祖采取了一种受开源软件很大影响的商业模式。这意味我们在2008或者更远将看到Java平台更多的开放。当然,这会对Java生态系统的商业方面产生深远影响。相比最近Oracle以70十亿美金收购BEA,这似乎很绿色,很健康。
Google flexes
移动Java领域曾经变的不景气,但是临近2007年尾时,却因Google的Android平台的发布而重焕青春。Android的目标是为新一代移动设备引入应用软件,且运行在由Google主导的开源操作系统之上。虽然Android是一个完整的平台(很像Java),但是构建Android应用程序的SDK却是建立在Java之上。
此外,Android的Java与J2ME的Java 截然不同。实际上,在JVM层面,Android的JVM就已相当独特了。除了运行专门为Android而设计,高度优化的字节码格式的代码,它不可以运行标准Java字节码。移动设备上运行不同实现的Java意味这我们将可以看到一些有趣的应用程序――当然,这也仅进一步说明了Java的无处不在。
2007 年Google在Java世界移动领域之外也进展的很顺利。但是,备受关注的是Guice的发布,Guice是一个基于Java 5注解和范型的依赖注入开源框架。虽然IOC市场上的佼佼者还是Spring,因其摒弃XML文件,提倡使用注解和Guice本身的Module类型,注定了Guice在公开发布时就是一个先行者。
考虑到Google对第二代IOC框架的影响和Google AdWrods本身的基础架构都是依赖Guice的,Guice在来年很有可能将得到更多的关注。
敏捷成为主流――测试时代到来了如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。