主题:【原创】Java阵营中新添的一位小弟 -- GROOVY -- Highway
如果让你用一句话来概括Java和微软.NET之间的异同,你会怎么说呢?
Java是一种语言多个平台,.NET是多种语言一个平台。 -- 我觉得这句话就概括的很不错。
以前人们总爱拿Java和微软的COM技术来比较,说实在的,这两种东西很难比较,即使比较了,那也不是apple-to-apple的比较。自从微软推出了.NET,爱比较的人们可算找到目标了,一时间Java和.NET孰优孰劣的文章满世界都是。
从本质上看,Java和.NET是非常相似的。它们都是将程序员编写的程序先编译成“半机器语言”。(准确地说是Java byte code和微软Intermedia Language)。这些“半机器语言”是一些抽象的计算机指令,并不具体到在一给定平台上如何执行。在运行的时候,虚拟机将这些抽象的指令变成具体的计算机可以执行的机器语言,然后交给计算机来完成。
Java和.NET不同的是它们由不同的公司实现和推出,在技术手段上以及市场理念上有很多不同。
Java追求的是Write once, run anywhere。为了实现这一承诺,Sun要拿出在各个平台上运行的虚拟机(Java Virtual Machine)。也就是说你在下载Java的时候,要选择是什么平台上的Java。Windows, Linux还是Unix。实际上,推出多个平台上的虚拟机不是件容易做到的事情。因为各种平台,各种操作系统差别很大,尤其是涉及到GUI,Thread这些东西,很难整齐划一的。而Java虚拟机要完成的就是“瞒天过海”的任务,将各种平台的差异掩盖起来,让那些“半机器语言”始终感觉到宾至如归,不觉察到还有“platform”这么个东西。就现实情况来看,Java基本做到了这一点。
.NET追求的是Pick whatever language you like, we support them all。当然微软有点小秘密没有告诉你,那就是“On Windows Only”。理论上虽然有个Mono project,可以在Linux上运行开发C#,运行基本的.NET程序,但那不过是个点缀罢了,只是想说明微软的.NET也可以支持多个平台。你可别把它当回事儿的。到现在为止,微软宣称.NET支持的语言多达20多种,几乎你听说过的都支持。不过呢,这件事听起来很悬,但实际上微软费的力气并不是很大。微软自己只提供了四种语言(C#, C++, VB.NET,J#),剩下的都是别的软件公司完成的。让.NET支持一种语言并不是件很难的事(对专业人员而言了),要做的事就是开发一个“翻译官”(术语是Compiler,编译器),将你的程序翻译成微软的Intermedia Language半机器语言,此后微软的虚拟机(叫做CLR)就会全部接管了。微软把自己的Intermedia Language规范写的很清楚,为的就是让其他软件公司可以容易的加入到.NET阵营中来。
看到这里你大概应该开明白了,Java和.NET这两个东西都是“两节”的,即
第一节:源程序到半机器语言的翻译
第二节:半机器语言在虚拟机环境中的执行
Java在第一节没有给我们选择的余地,我们只能将Java源程序翻译成Java byte code。而在第二部分,Java提供的选择是丰富的,我们可以将编译好的Java byte code拿到各种平台上的Java虚拟机中去运行。
微软的.NET正好相反,在第一节给了我们无穷多的选则(至少理论上这样),然而在第二部分,我们别无选择,只能是在Windows上执行那些半机器语言。
好了,背景交代清楚了,我们的主角可以出场了。好,现在就有请GROOVY小姐/小弟 (哗哗哗,掌声...)
GROOVY的任务就是丰富一下Java阵营,在源程序到半机器语言的翻译步骤给我们多一个选择。
当然了,为了避免和Java语言直接碰撞,GROOVY选择了自己的突破口。那就是“小巧精干”。按照GROOVY自己的说法,那就是在一个Java的前提下,给用户一个简单易用的环境,来完成简单到中等难度的任务。在语法上,GROOVY尽量贴近Script语言,比如说Python。这样用户可以很快上手,不需要很多的学习。
从感觉上看,GROOVY的程序就像Shell script一样(记得DOS下的那些BAT文件吗?),不需要编译就可以直接运行。不过你可别被这些假象蒙蔽了。在背后它还是先江这些程序翻译成标准的Java byte code,然后交给Java虚拟机去完成。
怎么样,想试试看吗?你可以到GROOVY的网站下载一份,然后你就可以try out了
哦,最后在交代一下,GROOVY是什么意思呢?这个词意思不少,比如说“沟的,槽的;常规的,千篇一律的;(歌曲等)流行的”。但我觉得可能是“最佳状态的,(美俚)绝妙的。”。或者干脆译做“好爽”
本帖一共被 1 帖 引用 (帖内工具实现)
希望高速公路兄能多多介绍一下IT业界的类似动态,呵呵,我以后只需到河里来一趟就什么都知道了
为啥不做呢?丰富一下语言,抢多点市场也好的?
人们对它信心不足啊,Sun自己也力有不逮啊。
再说,一种语言我本人并不认为是Java平台上的一个问题。
只要在大家认为重要的领域,JAVA够用就好啦,现在JAVA是B/S结构软件的宠儿。
微软那么多语言,也不是一早预谋的,一定程度上.net支持那么多语言是无奈,因为微软不愿意丧失市场,只能花多些功夫让以前Windows平台的程序员更容易转型,是一种商业考虑。其负面作用是.net的体系结构没有J2EE清晰,大杂烩太多,常常被开发人员所诟病。
而JAVA没有这种历史负担,轻装上阵,干净利索,切合开发人员追求完美的倾向。虽然,有时完美并不是事物最好的特性,但追求完美的倾向很难改变。
能不能有空给我们多谈谈你的看法?
Java的美就在于简洁明了(Simple & Clear)。但现在Java迫于.NET的压力,不停的在扩充,要在Feature上和.NET较量。很多人对此提出了批评。因为这样下去,过不了几年,Java就和C++一样复杂而庞大了,那不就从根本上违背了Java的初衷了吗?
.NET有些臃肿。微软也是没有办法啊。因为他们不能丢下COM/COM+这些老东西。人们问.NET的设计师Java比.NET做的出色的地方是什么?他们想了想说“Java发展到现在,还能相对那么紧凑精干,不容易!”
人们反过来又问Java的设计师,.NET有什么地方让他们羡慕?Sun的这些大拿们说“.NET的Webservice和XML部分挺牛!”
可能要劳烦版主多等一阵子哈
还有,我昨天暴露身份,但我还是不好意思看到版主为了鼓励我发言给加精,恳请版主一视同仁,不然这个精我实在受之有愧
并且感觉你只露出了冰山一角,大有潜力可挖。
这里等待肯定比稍等恰当,呵呵
不敢乱发言,怕被人笑。
JAVA做Server端的服务,.net做Client端的应用,配合着挺好用的,嘿嘿;
此外,还可以尝试用用Flash这样的客户端,都挺有表现力的呢......
老兄这里已经把两个最合用搭配在一起实干啦?厉害厉害。
讲讲你的故事?我估计肯定很有启发
用标准浏览器写的Web Application,客户总是抱怨界面太死板;
所以就动心去尝试把Windows上的界面用.net或者Flash来实现咯。花花功能多多不说、还能有比较强的Debug功能,只要遵守HTTP Protocal,怎么玩都可以阿......
就是觉得对不起Windows以外的客户端了,嘿嘿