主题:【文摘】SWT……内幕? -- upson
老文章了,今天突然又找到了,放到河里来。
http://www.javaresearch.org/article/12405.htm
SWT……内幕?
FooSleeper 翻译
原文:
http://groups.yahoo.com/group/straight_talking_java/
http://groups.yahoo.com/group/straight_talking_java/messages/24236
翻译整理:FooSleeper
最后修改:2004-03-03
译注:本文来自[email protected]讨论组,已经是一年多前的文章。Alan Williamson是Java Developers Journal的编辑,下文来自他在IBM的一个消息来源。SWT和Swing的论争我见过不少,Netbeans和Eclipse的也同样多。译者翻译此文并不是要激起什么争执,也不是支持哪一方(虽然我的确是站在SWT一边的),更不是要攻击Amy。我最重要的理由是,这是一篇有趣的文章。里面有内幕、线人、公司政治、垄断巨头、美女、商界风云……足够拍一出电影。有趣,这就够了。不过此文反映了IBM对Swing的看法和SWT的由来,还是有一点营养的。
随着sun对java的彻底开源,希望IBM早日完成包含SWT的JDK。
请按照下面的要求,修改一下帖子。
谢谢。
谢谢提醒,今后注意。
ibm 只所以另外搞swt,并不是因为swt多么nb,或者swing多么滥,最主要还是出于自己的市场利益考虑。ibm做东西,一贯的原则是必须他做主导,而且不能和第三方兼容,以免影响他的整体利益。
随便说一下
1. swt没有任何性能优势,主要性能优势应该是在早期,大概是02,03年左右,那时候sun还没对desktop投入太多的时候。
我们也曾经做过一些相关测试,证明swt确实性能一般。 ibm自己后来都说swt的优势主要在于native的 外观。
2. swing现在也完全可以做出swt的外观效果,可以实现完全native外观效果,有人就用swing完成了一个fake的eclipse,而swt则无法创建swing那样灵活定制的外观效果。 用swing做东西,看你的能力,可以做的非常炫,而swt就那样了。
另外再考虑java 2d 和3d的东西, swt支持还是比较弱的
3. swing目前的第三方组件,支持工具,远远超过swt。而swt现在的主要优势还是基于eclipse平台上做一些扩展的工具开发。
4. 2块我都用来做过完整的项目,最后的结论是,如果是为了项目考虑,swing的选择可能还是更加合理些。尤其是netbean上做开发的话,不会感觉到和visual studio有什么本质的区别。如果是开发工具类的应用, swt才会是我的首选。其实java6已经很不错了,我做出来的东西,客户根本就不相信是pure java做的,呵呵。
5. swt 另外一个主要问题是没有一个能表现复杂布局,又简单使用的layout,而 swing已经解决了这个问题,所以后来除非是做eclipse的插件扩展,我基本不会选择swt, 要简单就干脆用python了。
swing整个框架非常复杂,但是学通了以后很来劲,里面很受smalltalk和dp影响,化几个月时间下来,整个人的层次都有提高。 而swt 更象是微软的东西,结构相对比较简单,有些方面还真不好说,wicket项目当年曾经向swt学习,使用它那种风格,最后发现问题多多,现在又退回去了,搞的我晕菜。而且swt因为缺少一个重量级别的ui设计工具,在易用性上始终达不到他期盼的高度。
以上言论基于06年下半年前我的认识。现在情况不清楚。不过我觉得这类讨论比较detail,又容易有争议,不适合在cchere发吧。现在真无聊,发帖子打法时间。
http://www.swt-designer.com/
这么说吧,一直到netbean的某个版本,java的ui开发工具才真正达到,甚至超过vs studio的水准。
你说的那个,还有wsad,都用过,但是运行速度和稳定性,非常头痛,大点的东西,让人想砸电脑,最后还是手工调。另外在layout上,swt还是老脑子,不象java5以后重新设计了一个比较好用的layout。sun的一个设计师当时承认,以前的路子走错了,layout可以做的尽量复杂,但是不应该让用户来学习这种复杂的使用,而应该通过工具来屏蔽这点,这样可以做到简单、方便的设计又能充分利用layout 的auto size特性实现跨平台和多分辨率的支持。
其实eclipse从2开始,就再也没快过,完全没有1.0时候给我那种惊艳的感觉。ibm就是个流氓公司,他出的东西,核心思想就一个,通过复杂,运行缓慢的应用和乱七八糟的捆绑关联,实现ibm 产品和服务销售的利益最大化。都是做j2ee,就他的破烂根本没法在别人家的jdk上跑,而为了打击竞争对手,某些机器的jdk,他们也要拖个几年才出,前几年使劲鼓吹jsf,后来拿不到控制权,现在又要全面放弃jsf,转向支持wicket, ibm推swt,绝不是因为swing不好,没有改进余地,而是因为他拿不到控制权,无法满足他的商业利益。
当年某个项目,ibm甚至动用了中国研究院的相关开发人员承诺为我们定制开发,目的就是为了说服我们全面使用他们的桌面应用方案。经过多次讨论以后,发现可用的东西太少,而且核心部分还存在一个授权费用问题,还是放弃了。
感觉似乎 Netbeans/Swing 方面会占优一些,风北客怎么看?另外下文里说到 UI 达到或超过 VS Studio 大概是在哪个版本啊,花谢!
目前开发工具上看,ec的优点是编辑器和各种扩展,这毕竟是做了n年才达到的。 netbean胜在整合性,看最近的5.5,集成了rave以后,和vs 差别已经不大了。
我的感觉是老鸟可能更喜欢ec一些,另外因为时间的关系,bea,oracle ,borland等巨头都投了很多心血在这个平台上,整体上ec还是会领先的。 但是对于新手来说, netbean的高度集成性,尤其在ui设计方面和vs的近似性,是非常适合新手入门使用的。在rcp这块, netbean和 java社区也在发力,未来全面赶上和超过eclipse应该不是问题。刚才看了一下6版本的预览,ui方面连databinding都已经实现了,如果运行速度上再有提高,整体上已经有很高的水准了。另外netbean在设计上更加开放,比如不是用自己的metadata,使用ant,提供对其他ide的转换和项目导入等等,对于新团队来说,是个不错的选择,至少为了转换ide不是大问题。
另外两个选择是jdeveloper 和idea。 jd是together被流氓收购以后最接近together思想的开发工具,不过因为有些依赖oracle的缘故,很难成为主流, idea则是因为很多更贴近程序员的设计被人喜爱,这也决定了他无法成为主流。当然,这两款都是要钱的。
不过说到底,together6以后再也没出现让人激动的ide了,现在大家水平都差不多,各有侧重,或者说都缺乏重量级的特色,一团乱战。
netbean如果在集成度上进一步提高,加强对uml和文档生成方面的处理,嗯,还可以考虑加入协作wiki,彻底解决设计文档的问题,我还是比较喜欢的。另外按现在的路子,加强对动态脚本语言的集成,groovy和ruby,甚至python,吸引更多的人使用。
eclipse现在越做越慢,几年了,没有什么本质提高,而高端的集成又因为开发商各怀鬼胎,全部开源的可能性近期不大。
netbean的优势就应该是集成,目标就应该朝第二个together这么做,全面超过ec和vs。
我到始终觉得当初sun要自己搞netbean的思路是对了,和eclipse搅和在一起,肯定成天吵架。eclipse如果没有大的变化,2,3年之内应该就不行了。 独裁就是比民主高效,何况民主阵营里面还有个整天谋划搞点个人利益的老流氓ibm。sun比ibm的优势是,他不需要考虑出售自己的软件和服务,这样没有本质的利益冲突,作为追赶者,更有可能在开源的前提下做出一流的东西,而ibm不行,好的东西人家要卖钱,开源只是他寻找创新的一个幌子。
另外linux桌面应用的推广会对netbean有一定帮助。netbean团队不需要象ec一样,化更多的精力解决一些基础的问题。
学习dp, swing是个不错的教材
苹果也有类似的东西,用Objective-C,但是好像争议挺大的。一些老鸟基本上认为苹果把个好概念给弄砸了。如果做一些简单的,基本静态的东西,用binding可以节省很多时间。但是如果user experience的需求复杂一些,bindings就有点力不从心了。
对于大点的,复杂一点的项目,简单的绑定肯定不行,不过就目前来看,netbean 6的数据绑定已经超过了vs 2003的水平。
实现还相当复杂,有兴趣可以去找一个 flash的demo来看。我还没研究实现细节,如果绑定实现比较松散,倒是个好东西,
不过至少目前来说,做小项目和骗菜鸟,还是很好的。
我觉得这是一个好事,这至少说明sun放下架子向ms学习,java一直以来让人头痛的地方就是入门的堪相对比较高,所以.net一出,借着ide的优势,一堆人都跑到对面阵营去了,连我也跑过去晃悠了一阵子,后来也发现也不过尔尔么,而且背后的东西要学精了,比java还复杂。sun如果在降低门槛方面下点狠功夫,再借助java本身在语言工业化方面的先天优势和这15年的技术积累,再混个10来年也不是不行。