设为主页 | 加入收藏 | 繁體中文

Java秘史:隐藏在SWT/Swing背后的故事

  译注:本文来自straight_talking_java@yahoogroups.com讨论组,曾经是一年多前的文章。Alan Williamson是Java Developers Journal的编辑,下文来自他在IBM的一个音讯来源。SWT和Swing的论争我见过不少,Netbeans和Eclipse的也同样多。译者翻译此文并不是要激起什么争执,也不是支持哪一方(固然我简直是站在SWT一边的),更不是要打击Amy。我最重要的理由是,这是一篇风趣的文章。里面有内幕、线人、公司政治、把持巨头、玉人、商界风云……足够拍一出电影。风趣,这就够了。不过此文反映了IBM对Swing的见解和SWT的由来,照旧有一点营养的。
  要想弄清楚为什么统统都被弄得云云杂乱,要从几年前只存在AWT的时间说起。SUN当时曾经创建了一套根本的可移植控件类,这些类映射到差别操作系统上的原生窗口组件(native widget),显然下一步应该连续增强这套模型,除了初始的CUA 92组件(文字、按钮等等),再连续加上表格、树、记事本、滑块等等……当时的AWT还满是漏洞,远不克不及称为牢靠,还必要SUN的coder们去修补。SUN的developer们如Graham和Otto总是风俗于公开把他们的bug归咎为操作系统的差异,比如“Windows和OS/2的焦点序次差别”大概“在……之间Ctrl-X的举动不一样”,以及其他苍白的托辞,好让批评的火力从SUN太早释出代码这个问题的真相上移开。然后Amy Fowler来到了SUN。不是我大夫君主义,Amy是个智慧的玉人,大多数目瞪口呆只懂技术的开发职员都要被她捏在手里。 Amy来自一家Smalltalk公司,叫做Objectshare,在那里她负责搞UI类库。
  跟Java相比Smalltalk的汗青有些悲惨,曾多少时有3家巨大的Smalltalk公司——IBM、Parc-Place和Digitalk。在90年代初期3家公司的市场份额大抵相称,生活是美好的。Parc-Place采用仿窗口部件(emulated widgets)的设计(即Swing的设计),IBM和Digitalk则采用原生窗口部件(native widgets)。厥后IBM压倒了另外两家,因此他们筹划合并成一家,假设叫做Parc-Place Digitalk。随后当他们试图将他们的产物融合到一个叫做Jigsaw的筹划中时爆发了一场大战,筹划由于政治原因失败了(开发职员实际上曾经能让它运转起来),就由于原生和仿造两派的死战。
  Amy博得了精神上的成功,不过在IBM我们博得了他们全部的生意,由于这两家公司在一整年里除了打骂什么都没做。当灰尘落定之后PPD(Parc-Place Digitalk当时已改名为Objectshare,跟Windscale改名为Sellafield的原因相同——让人们淡忘之前产生的灾祸)的股票代价从60美元掉到了低于1美元1股。他们由于伪报支出被NASDAQ摘牌,从此消失。此时SUN正走上与PPD雷同的技术偏向,于是PDD的技术职员都把他们的简历投到了SUN。Amy被雇佣了,她承诺经过轻量级方案解决全部窗口组件的问题,因此说服SUN管理层让她当了GUI开发部分的头头。她是拿着“这里原来的人都搞砸了,我是来解决的”的钥匙进来的。随后Amy雇佣了全部她已往在Parc-Place的旧朋侪,让他们来开发Swing。
  显然Swing应该做的是仅仅成为一个绘制框架,给那些盼望创建地图软件大概绘图软件的人们利用,无论如何,应该围绕AWT类库来建造它,按钮之类的工具仍旧交给AWT来管。SUN的人比如Philip和Mark曾经让AWT能够处置惩罚表格、树和记事本(notebook,?),以是Swing的偏向应该说很明显了。但那些毁了PDD的人不干,他们非要把统统都弄成轻量级的。由于SUN管理层的无知,再加上Amy无情的政治本领,形成了我们今天所见的杂乱局面。Amy还使SUN信赖Swing是作为Mozilla项目标一部分与Netscape联合开发的,事实上这只是她的宣传伎俩。
  在IBM,我们从第一天起就讨厌Swing。巨大、满是错误,而且丢脸至极。原先我们的工具如VisualAge for Java都是用Smalltalk(用的是原生窗口组件)写的,以是当我们将这些工具向Java代码库迁移时,我们必要一套窗口组件。IBM这边的开发职员都是原来搞Smalltalk的那一批人,我们对管理层要求用Swing来构建WebSphere Studio工具都十分不情愿。Swing是个可骇的充满缺陷的怪兽。
  在WebSphere Studio最初的预览中,当与Microsoft Visual Studio作比拟演示的时间,我们全部的客户都讨厌它,就由于它的外观,而不管它的功效有多强。大多数消费者都不会买一辆让人以为丢脸的车,哪怕这车有一台出色的引擎。因此我们开端了一个项目,是把我们的Smalltalk原生窗口组件移植到Java上去。这个项目是加拿大的Object Technology International小组做的。这个项目得到了成功,被运用在在我们公布的VisualAge Micro Edition产物中,VisualAge Micro Edition厥后成为J2ME开发方面一个十分成功的IDE。但是OTI的人发明,Swing在读取Windows变乱方面有极紧张的缺陷,我们乃至无法进行SWT(S开端是Simple的缩写,不过厥后酿成了Standard的缩写)和Swing间的互操作。他们在读变乱队列的时间用了一种大概留下内存漏洞的方法,以是我们不得不采用我们自己的盘问Windows变乱队列的循环,以改正这个错误。
  我们试了一次又一次让SUN修复这个错误,但Amy就是听不进去,以是我们才决议SWT和AWT/Swing不克不及共存。我们乃至在SWT中界说了自己的Point和Rectangle类——整个工具包对AWT或Swing都没有任何依赖。我们把这个工具包放到了Eclipse中,这是一个工具平台,它的总体设计目标就是要战胜Micrsoft和Visual Studio。Eclipse是开源的,以是任何人都可以在下面构建自己的工具,我们曾经有像TogetherSoft和Rational如许的公司移植到了下面。我们的竞争者是Microsoft,以是我们全部努力和细致力都是从正面针对Microsoft。
  不管怎样说SUN对此十分不满。他们的Netbeans跟Eclipse做的是相同的事,因此他们向IBM高层诉苦。他们认为SWT是要将你绑到Windows上,这纯粹是胡说,由于SWT能经过GTK在Mac/Linux上运转,以及一大堆嵌入式平台。他们拒绝让Eclipse得到Java认证,由于里面有原生代码,以是Eclipse产物必须很警惕地利用单词“Java”这个SUN的牌号。Eclipse乃至不克不及把自己称为一个Java IDE,SUN曾经威胁过要接纳法律举措来克制IBM在任何时间把Eclipse称作一个Java IDE。效果之一就是IBM在Eclipse上创建的GUI设计工具,容许你构建Swing/AWT GUI,却不让你往里面拖放SWT窗口控件。
  将SWT从Eclipse中分离出来是完全大概的,只必要把DLL抠出来放到途径中,并利用窗口组件工具包来给你的银行大概保险大概其他什么应用程序开发GUI。再次说明,我们无法更进一步,由于SUN把我们的双手绑上了。固然作为Eclipse开放源码协议的一部分,CPL容许我们提供如许的解决方案,但SUN曾经很清楚地评释他们不盼望我们如许做。 对付用户社区来说,无论IBM和SUN的终极动机是什么,我发明有一点总是很风趣:喜爱Swing的人总会说“一旦你花上几年时间去掌握它,你就能正确地利用它”,这根本上是他们在试图证明和维护他们辛苦得来的用处有限的专门技术;而SWT的拥护者们说的是“哇,这真快,这跟原生的一样,还可以用XP皮肤……它还又轻又小”。有一句话是我喜好的,我们的一个用户说,Swing就像Java决议欠亨过操作系统来完成原生的IO,而是经过磁头马达API自己来读磁盘的扇区。Swing根本上就是如许的,它拿着个底层的“paint(Graphics)”要领,自己来绘制全部的窗口组件。
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: