西西河

主题:【原创】Java阵营中新添的一位小弟 -- GROOVY -- Highway

共:💬17 🌺1 新:
全看树展主题 · 分页 下页
家园 【原创】Java阵营中新添的一位小弟 -- GROOVY

如果让你用一句话来概括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业界的类似动态,呵呵,我以后只需到河里来一趟就什么都知道了

家园 在我想象中,Java要搞多几种语言应该不难吧

为啥不做呢?丰富一下语言,抢多点市场也好的?

家园 技术上我认为不太难。但问题时Sun现在日子很不好过,

人们对它信心不足啊,Sun自己也力有不逮啊。

再说,一种语言我本人并不认为是Java平台上的一个问题。

家园 你太客气了。大家互相交流,共同进步!
家园 几种语言,其实都没关系

只要在大家认为重要的领域,JAVA够用就好啦,现在JAVA是B/S结构软件的宠儿。

微软那么多语言,也不是一早预谋的,一定程度上.net支持那么多语言是无奈,因为微软不愿意丧失市场,只能花多些功夫让以前Windows平台的程序员更容易转型,是一种商业考虑。其负面作用是.net的体系结构没有J2EE清晰,大杂烩太多,常常被开发人员所诟病。

而JAVA没有这种历史负担,轻装上阵,干净利索,切合开发人员追求完美的倾向。虽然,有时完美并不是事物最好的特性,但追求完美的倾向很难改变。

元宝推荐:Highway,
家园 很少有MM爱在这里发表评论的,加精鼓励!

能不能有空给我们多谈谈你的看法?

Java的美就在于简洁明了(Simple & Clear)。但现在Java迫于.NET的压力,不停的在扩充,要在Feature上和.NET较量。很多人对此提出了批评。因为这样下去,过不了几年,Java就和C++一样复杂而庞大了,那不就从根本上违背了Java的初衷了吗?

.NET有些臃肿。微软也是没有办法啊。因为他们不能丢下COM/COM+这些老东西。人们问.NET的设计师Java比.NET做的出色的地方是什么?他们想了想说“Java发展到现在,还能相对那么紧凑精干,不容易!”

人们反过来又问Java的设计师,.NET有什么地方让他们羡慕?Sun的这些大拿们说“.NET的Webservice和XML部分挺牛!”

家园 我被版主鼓励得不好意思,只好努力,不过睡虫常打瞌睡

可能要劳烦版主多等一阵子哈

还有,我昨天暴露身份,但我还是不好意思看到版主为了鼓励我发言给加精,恳请版主一视同仁,不然这个精我实在受之有愧

家园 哪里。给你加精是因为你有自己的Point。

并且感觉你只露出了冰山一角,大有潜力可挖。

家园 那就弄个原创主题来吧.
家园 “系统处理中,请等待……”

这里等待肯定比稍等恰当,呵呵

家园 天, 学习了!

不敢乱发言,怕被人笑。

家园 俺最近尝试着用.net和JAVA一起干活......

JAVA做Server端的服务,.net做Client端的应用,配合着挺好用的,嘿嘿;

此外,还可以尝试用用Flash这样的客户端,都挺有表现力的呢......

家园 那个Java和.net比较的帖子还在纸上谈兵

老兄这里已经把两个最合用搭配在一起实干啦?厉害厉害。

讲讲你的故事?我估计肯定很有启发

家园 没啥没啥,我干的的确很普通

用标准浏览器写的Web Application,客户总是抱怨界面太死板;

所以就动心去尝试把Windows上的界面用.net或者Flash来实现咯。花花功能多多不说、还能有比较强的Debug功能,只要遵守HTTP Protocal,怎么玩都可以阿......

就是觉得对不起Windows以外的客户端了,嘿嘿

全看树展主题 · 分页 下页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河