你的IDE运行在什么平台?

昨天和一个好朋友发生了一场争论,争论是因为孟岩的文章谁会买下Delphi?而引起的。与文章后跟贴的众多网友不同,我比较同意孟岩的看法,只有一点我不能接受。如果说JBuilder汇入Eclipse的话是可以接受的,毕竟JBuilder有很多值得Eclipse借鉴的东西,特别是在UI设计上。但是文章说将Delphi汇入Eclipse从而令Eclipse具备同时生成四种平台目标代码的能力:

  • 基于jvm的bytecode
  • 基于win32的native(利用Delphi for win32/VCL)
  • 基于linux的native(利用Kylix/CLX)
  • 基于clr的MSIL(利用Delphi.net/VCL.net)

不管你是否同意,我是绝对反对的。唯一的理由是:eclipse是基于jvm的。我不是歧视jvm,我一向对eclipse很看好。但是eclipse只适合做基于jvm的java应用。当然,java上的企业级应用开发比.net的企业级应用开发领先N年,但这并不表示做其它平台的开发也必须使用jvm。jvm是一个非常好的基础平台,原先我一直认为java会很快被.net打倒,因为CLR的JIT的确比jvm的interceptor执行快。但是现在的jvm已经不是以前的jvm了,一样具有非常快的执行能力,所以我的预期没有实现。但是,并不是说jvm好就必须让你离不开,开发其它平台的应用也必须用这个来垫底。当然,eclipse也是个非常优秀的IDE,其高效并易于扩充的插件机制令其它所有的IDE都黯然失色。但是,但是绝对只限于开发基于jvm的应用。相反,如果要你使用C#Builder来开发基于jvm的应用,你觉得你能够接受吗?
我的朋友给我讲出两个反驳理由:一个是eclipse本来就具有用C++开发应用系统的能力,这个工具叫CDT。非常惭愧,我对Eclipse的了解非常有限,我不知道CDT编译的目标代码是OS依赖的native代码还是基于java的bytecode,所以我无法提供更多的解释来否决他的这个理由。另外一个理由是:VS.net也不一定就是基于.net的吧?KAO,一刀正好捅到了我的痛处,但丝毫不影响我们双方的论点。我相信MS有足够的理由(例如仍然可以使用VS.net用C++开发win32应用)让VS.net基于COM,并且提供了一个CLR的Hosting以便兼容基于CLR的插件。事实上VS.net2003/2005的插件机制的确非常不好使,从这个意义上,C#Builder就漂亮得多,因为C#Builder是完全基于CLR的托管程序,并且其简洁而强大的OpenToolsAPI比VS.net的插件机制更容易让人接受。不过,这与用eclipse开发基于win32/.net的应用完全是风马牛不相及的两件事。 
其实,这与平台之争没有任何关系。坐在八仙桌旁喝南美的咖啡也是可以实现的,但是喝武夷山的云雾茶肯定更好!

posted on 2006-02-22 14:16 双鱼座 阅读(2815) 评论(28)  编辑 收藏

评论

#1楼  2006-02-22 14:33 birdshome      

最后那个比喻不错 :)   回复  引用  查看    

#2楼  2006-02-22 16:55 HD      

不就是一个赚钱的工具嘛,有必要论刀论枪的。   回复  引用  查看    

#3楼  2006-02-22 17:18 Cavingdeep      

你们的理解都不完全正确,实际情况是这样的:

Eclipse不单单适用于做Java的IDE,Eclipse适用于做任何语言以及平台的IDE,实际上,现在已经有很多种语言在Eclipse上有了自己的插件,比如Python有Pydev插件,Antlr、XML、Perl、C、C++等等都有相应的Eclipse插件,数量之大,是你不能够想象的(不过Vim与Emacs支持的才是最多的,说有上百种不夸张吧)。

Eclipse本身是用Java写的,跑在JVM上没错,但是这并不代表它不能用来编译Windows Native。就好象我用.NET写的程序一样可以生成bytecode同理。事实上Eclipse可以利用任何一个C, C++的compiler来编译C, C++代码,比如可以用VS.NET中的VC编译器(只不过是几个路径设置的问题),也可以用GNU的gcc,如果想生成Windows native的话需要Cygwin(Windows上获得一点Unix超能力的瑰宝)或MinGW的支持。也就是说,你可以用Eclipse+CDT开发任何平台下的C, C++程序,这完全取决于你使用什么编译器,与Eclipse无关。

另外不管是何种IDE(VS.NET, C# Builder, SharpDevelop)最终编译.NET代码都是需要微软提供的编译器(csc, vbc, etc.)或者Mono的编译器(如果基于Mono的话),所以Eclipse就像C# Builder一样,完全可以作出类似并带有Eclipse风格的C#或VB的IDE来。

至于为什么到现在都没有一个很好的.NET IDE插件出现这个问题,我想根本原因在于微软的.NET不适合跨平台开发引发的(大多数做.NET程序的人都是为Windows开发,包括类库在内都很难像其他平台转移),微软的一贯作风就是将自家的产品绑定的很死,让你用了这个就得用那个,没得选择,导致移植性灵活性很低,有很多人不喜欢被一家公司控制,他们希望能够根据自己的意愿自由的选择产品,所以很多人不想花时间花力气做.NET的相关产品,也就片面的导致了微软是自己推出的产品的老大,它说的话用它的产品的人就得遵守这个事实,因为没有其他自由的选择。

BTW, If you choose Eclipse, you can run it on every platform for free for the next 50 years, but if you choose VS.NET then you must pay for your next 50 years like programmer and never escaping from that fate even if you regretted sometime later.   回复  引用  查看    

#4楼  2006-02-22 17:47 petzold [未注册用户]

有一点,VS.NET是不会基于COM的。   回复  引用    

#5楼 [楼主] 2006-02-22 17:51 双鱼座      

@Cavingdeep:
非常感谢你的回复,你让我对eclipse了解了不少。不过我觉得我对eclipse的理解与你的说法并不相左。我确信eclipse能够用于任何语言(包括C#,也许有一天会冒出一个生成jvm bytecode的C#编译器出来也不一定哦),但是我不能接受的是用基于jvm的eclipse开发其它非jvm平台的应用,例如.net应用,虽然也可以实现。事实上,我相信选择eclipse开发非jvm应用的人也不会太多。
  回复  引用  查看    

#6楼  2006-02-22 17:54 treenode [未注册用户]

http://eclipse-plugins.2y.net上面已经有若干用来开发C#的Eclipse插件
Eclipse只是个IDE,编译java程序是调用JDK来完成的,那调用C++ SDK来开发C++程序又有什么不可以?

让Delphi生成Java bytecode,这件事Borland的人早就作过,李维的书里有提到。Borland既然连CBX的IDE都用Java来作,那么Delphi IDE是不是也可以一并纳入,他们应该早就想过了。

  回复  引用    

#7楼 [楼主] 2006-02-22 17:55 双鱼座      

@petzold:
请指教,VS.NET基于什么?
  回复  引用  查看    

#8楼 [楼主] 2006-02-22 18:03 双鱼座      

@treenode:
我想你也误解了我的意思,我当然不会愚蠢到说不能实现,仅仅只是说不合适而已,有点不伦不类。在eclipse上用C#做开发如果生成的是jvm的bytecode,我想也算合理,但用的人绝不会多;如果生成CLR的MSIL,我估计就更不会受大多数人欢迎了。最多用来气气MS。:)当然,我相信有一部分人是基于Mono开发的,这部分人离我太远,就无从知道了。   回复  引用  查看    

#9楼  2006-02-22 18:11 treenode [未注册用户]

我觉得没有什么不伦不类的问题,工具就是工具,只要它能高效的解决手头的问题,用什么都可以。

用Eclipse来做C#的情况我确实有听说过,有的公司要同时支持Java和Net两个平台,核心部分是Java程序,但是也要开放一个接口给C#来用。因为接口的工作比较简单,所以他们不喜欢开Eclipse的同时再来一个Visual Studio.NET,能在一个IDE里完成所有事情确实是很方便的,就算C#插件不算很强,it does work, OK。
  回复  引用    

#10楼  2006-02-22 19:12 FantasySoft      

虽然Eclipse需要JVM才能运行,但不是说Eclipse本身就是一个编译器,所以通过Eclipse进行开发,最后的软件成品跟Java可以没有任何的关系。

归根结底,Eclipse之所以能够流行,是因为它的微内核 + 插件的架构,如果剥掉了Eclipse所有漂亮的外衣,那么它就只是一个开发工具的骨架,并且可以通过插件提供无限的扩展能力,譬如IBM的WSAD,就是一个很好的例子。

通过Eclipse可以轻松地打造属于自己的IDE,我想这是它的魅力所在吧。   回复  引用  查看    

#11楼  2006-02-22 22:49 老翅寒暑      

现在有IKVM,可以把大部分的java应用(含eclipse)运行在.net平台上,而且支持用C#写eclipse的插件。如果用这样的eclipse生成C#应用,楼主满意不?如果再把它用J#编译一下呢?

其实,只是工具而已!像c++builder用delphi VCL这么多年,虽然过分了一点,但是还有人会接受(不包括我),毕竟直接关系到开发和性能的。但是编辑器就不同了。   回复  引用  查看    

#12楼  2006-02-23 08:54 阿本      

武夷山最出名的是大红袍,而云雾茶最受推崇的也是庐山云雾。也许,平台之争也如此,每个人有每个人的想法。   回复  引用  查看    

#13楼  2006-02-23 08:56 阿本      

不过,Borland会不会是在作秀?这次出手很蹊跷。   回复  引用  查看    

#14楼 [楼主] 2006-02-23 09:13 双鱼座      

@treenode:
>>同时支持Java和Net两个平台,核心部分是Java程序,但是也要开放一个接口给C#来用
很新鲜哦,这个C#生成的是基于CLR的代码还是运行在jvm上的bytecode?如果是前者,能用吗?
@FantasySoft:
同意,这一点Cavingdeep已经说得非常清楚了。但是我说的只是eclipse是在jvm上运行,就不适合开发native或者.net应用。
@老翅寒暑:
你说的是另外一个问题了。一般不太可能在PDA上直接开发软件,只能通过PC进行仿真。如果说仿真就与本话题无关吧?
@阿本:
请相信我还不至于不知道武夷山的大红袍和铁观音。武夷山的云雾茶是前几天在《乔家大院》中看来的。同治年的时候整个武夷山只产百十斤云雾茶,全是贡品,显然不是寻常百姓家的庐山云雾茶可比。另外,我也不认为我们的讨论是平台之争。
  回复  引用  查看    

#15楼  2006-02-23 11:31 FantasySoft      

@双鱼座:为什么Eclipse在jvm上运行就不适合开发native或者.NET应用呢? 可以再讲细致一些吗? :)
  回复  引用  查看    

#16楼  2006-02-23 11:43 treenode [未注册用户]

>>这个C#生成的是基于CLR的代码还是运行在jvm上的bytecode?

C#当然是生成CLR代码。
虽然也有人开发工具来把CLR和java bytecode转换,不过真正用的人很少。
他们好像是用一些标准协议实现Java和C#的互通吧,再具体的我也不太清楚,估计应该是Web Service一类的东西。   回复  引用    

#17楼 [楼主] 2006-02-23 12:24 双鱼座      

@treenode:
我知道N年前,borland推出了Janeva方案用于解决jvm与clr间的互联,不过这么多年过去了,也没有成为主流。看来OMG的CORBA还继续属于阳春白雪,难以进入寻常百姓家。如果是WebServices的话,理论上是可行的,不过中间间隔的东西太多,单一IDE使起来一定不是很方便。就是说定义接口的人基本上不太可能是调用接口的人。我有一个同事曾经告诉过我说java和.net间的WebServices不能很好地互通,原因可能是.net的WSDL解析器之类的问题。总之,这些过程如果没有实践过的话都不能肯定会象理论上的那么顺利通畅。
@FantasySoft:
我的文章讲的不就是这回事吗?看起来是我的文章没有写得很清楚:(
再举一个不太恰当的例子:当然,我知道肯定是可以用筷子吃西餐的。可是,在吃西餐的人中到底有多少人会用呢?   回复  引用  查看    

#18楼  2006-02-23 14:23 shengfang [未注册用户]

但是我说的只是eclipse是在jvm上运行,就不适合开发native或者.net应用。

楼主真是太搞笑了,富有女人的直觉。没有理由,就是我觉得。

按照这种说法,只要IDE是native运行,就不适合开发jvm或者.net应用。   回复  引用    

#19楼  2006-02-23 14:37 vender [未注册用户]

@双鱼座:

一点看法,与您商榷

同意“坐在八仙桌旁喝南美的咖啡也是可以实现的,但是喝武夷山的云雾茶肯定更好!”“肯定是可以用筷子吃西餐的。可是,在吃西餐的人中到底有多少人会用呢?”这些看法

但是用这些例子类比“用eclipse开发.net/java/native产品”不是很贴切,如果发生了“千方百计地在jvm上运行编译好的.net目标码或者反之”的荒谬事件,用上面几个例子类比则恰如其分

说得明白些,ide是java平台的不代表只能用于开发java平台的产品,ide不是编译器的代名词,可以说现今的ide侧重方向都不在编译方面,例如eclipse,插件构架,本身不带编译器,要生成java平台的目标必须依赖jdk,要生成native目标必须有相应的编译器

vs和eclipse在debug方式的显著不同容易使人产生一些误解,vs中的调试器是无法从ide分离的,而eclipse本身没有调试器,必须依赖于外部调试器,不管是java还是native

基于这种模式,用eclipse开发非java平台产品,我看也无需坚决反对,呵呵,不过可能不是很方便,例如没有调试器   回复  引用    

#20楼  2006-02-23 15:01 treenode [未注册用户]

>>我有一个同事曾经告诉过我说java和.net间的WebServices不能很好地互通,原因可能是.net的WSDL解析器之类的问题。总之,这些过程如果没有实践过的话都不能肯定会象理论上的那么顺利通畅。



不知道你的朋友是怎么做的。
我自己也作过这样的工作,用Tomcat+Apche Axis生成Web Service,C#去调用,结果非常顺利。一般的数据结构包括数组、列表和结构映射都没有问题。唯一碰到的麻烦是空数组到C#这边会抛异常,也不是什么大问题,代码里判断一下就行了。

和你说的相反,看Web Service书籍的时候我是被一大堆理论和复杂的WSDL内容吓住了,但最后实践起来反而是很简单。当然我没有用到Web Service里面很高端的技术,不过一般的接口又会有多复杂?


Eclipse的设计目标本来就是要不局限为一种语言的,JDT不是Eclipse的核心插件,只是一个plugin而已。只是因为这个插件太常用,所以才提供了All-In-One的安装包。如果你只下载一个单纯的Eclipse Platform,然后不装JDT而装上CDT,那Eclipse就不是Java开发工具而是C++开发工具了。甚至还可以这些都不装而使用其它插件,这样Eclipse就不是开发工具,而是和Word,Foxmail这些软件没什么差别的一般日用工具了。我现在用的RssOwl就是一个用Eclipse核心作的RSS阅读器。

所以我不妨这么说,Eclipse不是像你说的那样是筷子——筷子本身是死的,没有扩展能力的,Eclipse应该是像人的手,握着筷子就可以吃中餐,拿着叉子也可以吃西餐,能做什么完全取决于插件的功能而不是取决于双手本身,不是么?Visual Studio不支持Java开发,这只是因为MS不乐意这么做而已。如果MS愿意的话,它已经能支持J#了,再往前多走一步不就支持Java了么?当年Visual Studio 6还支持VJ++呢。   回复  引用    

#21楼 [楼主] 2006-02-23 15:57 双鱼座      

@treenode:
仔细想想你的话也颇有些道理。我要解释的是:我所指的筷子并不是指eclipse而是指jvm。
不过,我仍然觉得在一个jvm的ide中做.net开发太别扭。这意味着编辑代码时需要一个虚拟机、调试需要另外一个虚拟机。这个和vs6可以开发vj++是完全不同的两回事,因为vs6是native的,可以同时支持native和基于native的jvm。C#Builder(纯CLR)+JDK肯定也可以生成基于jvm的bytecode。但是你还是觉得不别扭吗?C#Builder+JDK->jvm bytecode和eclipse+.net sdk->CLR MSIL在性质上讲是完全一样的,其中的区别就是eclipse用户者众,C#Builder使用者寡。C#Builder的OpenToolsAPI也不一定就比eclipse的可扩展性差(前者我用过,后者我仅仅只是看到一些资料和书籍)。   回复  引用  查看    

#22楼  2006-02-23 17:16 treenode [未注册用户]

别扭不别扭,那就是主观感受的问题了。
不过我是觉得你的思路有点窄,举个例子,拿手机来拍照不别扭么?手机再怎么高档,效果也比不上专业相机吧?可是人家这么做了,还蛮多人喜欢这么干的,说明什么呢?我还是那个意见,工具就是工具,只要用起来顺手,底层是JVM还是CLR是无所谓的。也许你觉得这样不好,OK,不用就是了,但是既然工具本身提供了足够的能力,那么我们没有必要否定这种可能性,也许你觉得不好用的东西在别人那里很顺手呢。
  回复  引用    

#23楼  2006-02-24 08:00 jjx [未注册用户]

如果使用ikvm 运行eclpse ,并将jvm设置为ikvm(目前这是可行的) 那eclipse 是什么?java还是.net ?   回复  引用    

#24楼  2006-02-24 08:30 TomFang [未注册用户]

真是可笑!另外文字能力也太烂了!   回复  引用    

#25楼  2006-02-24 08:45 老翅寒暑      

to 双鱼座:
不明白你怎么跟我说PDA,我只是说IKVM而已,和PDA有关系吗?我从来不用PDA的。
程序员的偏执,其实很多时候不必要有什么门户之见。java社区毕竟有很多东西需要.net社区来学习和参考。NHIBERNATE不就是吗?   回复  引用  查看    

#26楼 [楼主] 2006-02-24 09:08 双鱼座      

@treenode:
当然这的确是一个主观感受的问题,其实我关注的正是你的主观感受而已。我肯定是不会这样用的。我只是怀疑是否别人也不会这么用。
@jjx:
不管你怎么设置,都是基于jvm。其它的都是仿真环境。
@TomFang
愿意笑你就笑,没人管你。希望你的文字能力比我强。:D
@老翅寒暑:
eclipse是基于jvm的,地球人都知道。所有的替换都是一种仿真,是加了一个垫层而已。在PC上仿真PDA都可以做到,用clr仿真jvm当然没有问题。
我承认我有些偏执(我觉得偏执是一个好程序员的优秀品质),但是你从哪里看出我有门户之见?java当然需要.net学习(我文中已经提到在企业级开发中.net落后n年)。不过nhibernate最好就别提了,这个可不是什么好例子。   回复  引用  查看    

#27楼  2006-02-28 09:49 A.Z      

.NET CLR Hosting   回复  引用  查看    

#28楼  2006-09-08 10:35 san      

保持沉默!   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接:
 


导航

<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

与我联系

搜索

 

常用链接

留言簿(30)

我参与的团队

我的标签

随笔档案

文章分类

相册

芸芸众生

最新评论

阅读排行榜

评论排行榜