Thinking in XiaoQiang
          世人皆有悲哀,只有你不明白
          posts - 56,comments - 150,trackbacks - 0

              本文來(lái)自straight_talking_java@yahoogroups.com討論組,已經(jīng)是一年多前的文章。Alan WilliamsonJava Developers Journal的編輯,下文來(lái)自他在IBM的一個(gè)消息來(lái)源。SWTSwing的論爭(zhēng)我見(jiàn)過(guò)不少,NetbeansEclipse的也同樣多。譯者翻譯此文并不是要激起什么爭(zhēng)執(zhí),也不是支持哪一方(雖然我的確是站在SWT一邊的),更不是要攻擊Amy。我最重要的理由是,這是一篇有趣的文章。里面有內(nèi)幕、線人、公司政治、壟斷巨頭、美女、商界風(fēng)云……足夠拍一出電影。有趣,這就夠了。不過(guò)此文反映了IBM對(duì)Swing的看法和SWT的由來(lái),還是有一點(diǎn)營(yíng)養(yǎng)的。

           

            要想弄清楚為什么一切都被弄得如此混亂,要從幾年前只存在AWT的時(shí)候說(shuō)起。SUN當(dāng)時(shí)已經(jīng)建立了一套基本的可移植控件類,這些類映射到不同操作系統(tǒng)上的原生窗口組件(native widget),顯然下一步應(yīng)該繼續(xù)增強(qiáng)這套模型,除了初始的CUA 92組件(文字、按鈕等等),再繼續(xù)加上表格、樹(shù)、記事本、滑塊等等……當(dāng)時(shí)的AWT還滿是漏洞,遠(yuǎn)不能稱為可靠,還需要SUNcoder們?nèi)バ扪a(bǔ)。SUNdeveloper們?nèi)?/SPAN>GrahamOtto總是習(xí)慣于公開(kāi)把他們的bug歸咎為操作系統(tǒng)的差異,比如“WindowsOS/2的焦點(diǎn)次序不同”或者“在……之間Ctrl-X的行為不一樣”,以及其他蒼白的托辭,好讓批評(píng)的火力從SUN太早釋出代碼這個(gè)問(wèn)題的真相上移開(kāi)。然后Amy Fowler來(lái)到了SUN。不是我大男子主義,Amy是個(gè)聰明的美女,大多數(shù)呆頭呆腦只懂技術(shù)的開(kāi)發(fā)人員都要被她捏在手里。 Amy來(lái)自一家Smalltalk公司,叫做Objectshare,在那里她負(fù)責(zé)搞UI類庫(kù)。

           

            跟Java相比Smalltalk的歷史有些悲慘,曾幾何時(shí)有3家龐大的Smalltalk公司——IBMParc-PlaceDigitalk。在90年代初期3家公司的市場(chǎng)份額大致相等,生活是美好的。Parc-Place采用仿窗口部件(emulated widgets)的設(shè)計(jì)(即Swing的設(shè)計(jì)),IBMDigitalk則采用原生窗口部件(native widgets)。后來(lái)IBM壓倒了另外兩家,因此他們打算合并成一家,假設(shè)叫做Parc-Place Digitalk。隨后當(dāng)他們?cè)噲D將他們的產(chǎn)品融合到一個(gè)叫做Jigsaw的計(jì)劃中時(shí)爆發(fā)了一場(chǎng)大戰(zhàn),計(jì)劃由于政治原因失敗了(開(kāi)發(fā)人員實(shí)際上已經(jīng)能讓它運(yùn)轉(zhuǎn)起來(lái)),就因?yàn)樵头略靸膳傻乃缿?zhàn)。

           

            Amy贏得了精神上的勝利,不過(guò)在IBM我們贏得了他們所有的生意,因?yàn)檫@兩家公司在一整年里除了吵架什么都沒(méi)做。當(dāng)塵埃落定之后PPDParc-Place Digitalk當(dāng)時(shí)已改名為Objectshare,跟Windscale改名為Sellafield的原因相同——讓人們淡忘之前發(fā)生的災(zāi)難)的股票價(jià)格從60美元掉到了低于1美元1股。他們因?yàn)閭螆?bào)收入被NASDAQ摘牌,從此消失。此時(shí)SUN正走上與PPD類似的技術(shù)方向,于是PDD的技術(shù)人員都把他們的簡(jiǎn)歷投到了SUNAmy被雇傭了,她承諾通過(guò)輕量級(jí)方案解決所有窗口組件的問(wèn)題,因此說(shuō)服SUN管理層讓她當(dāng)了GUI開(kāi)發(fā)部門(mén)的頭頭。她是拿著“這里原來(lái)的人都搞砸了,我是來(lái)解決的”的鑰匙進(jìn)來(lái)的。隨后Amy雇傭了所有她過(guò)去在Parc-Place的舊朋友,讓他們來(lái)開(kāi)發(fā)Swing

           

            顯然Swing應(yīng)該做的是僅僅成為一個(gè)繪制框架,給那些希望創(chuàng)建地圖軟件或者繪圖軟件的人們使用,無(wú)論如何,應(yīng)該圍繞AWT類庫(kù)來(lái)建造它,按鈕之類的東西仍然交給AWT來(lái)管。SUN的人比如PhilipMark已經(jīng)讓AWT能夠處理表格、樹(shù)和記事本(notebook,?),所以Swing的方向應(yīng)該說(shuō)很明顯了。但那些毀了PDD的人不干,他們非要把一切都弄成輕量級(jí)的。由于SUN管理層的無(wú)知,再加上Amy無(wú)情的政治手段,造成了我們今天所見(jiàn)的混亂局面。Amy還使SUN相信Swing是作為Mozilla項(xiàng)目的一部分與Netscape聯(lián)合開(kāi)發(fā)的,事實(shí)上這只是她的宣傳伎倆。

           

            在IBM,我們從第一天起就憎惡Swing。龐大、滿是錯(cuò)誤,而且難看至極。原先我們的工具如VisualAge for Java都是用Smalltalk(用的是原生窗口組件)寫(xiě)的,所以當(dāng)我們將這些工具向Java代碼庫(kù)遷移時(shí),我們需要一套窗口組件。IBM這邊的開(kāi)發(fā)人員都是原來(lái)搞Smalltalk的那一批人,我們對(duì)管理層要求用Swing來(lái)構(gòu)建WebSphere Studio工具都非常不情愿。Swing是個(gè)可怕的充滿缺陷的怪獸。

           

            在WebSphere Studio最初的預(yù)覽中,當(dāng)與Microsoft Visual Studio作對(duì)比演示的時(shí)候,我們所有的客戶都討厭它,就因?yàn)樗耐庥^,而不管它的功能有多強(qiáng)。大多數(shù)消費(fèi)者都不會(huì)買(mǎi)一輛讓人覺(jué)得難看的車,哪怕這車有一臺(tái)出色的引擎。因此我們開(kāi)始了一個(gè)項(xiàng)目,是把我們的Smalltalk原生窗口組件移植到Java上去。這個(gè)項(xiàng)目是加拿大的Object Technology International小組做的。這個(gè)項(xiàng)目獲得了成功,被運(yùn)用在在我們發(fā)布的VisualAge Micro Edition產(chǎn)品中,VisualAge Micro Edition后來(lái)成為J2ME開(kāi)發(fā)方面一個(gè)非常成功的IDE。但是OTI的人發(fā)現(xiàn),Swing在讀取Windows事件方面有極嚴(yán)重的缺陷,我們甚至無(wú)法進(jìn)行SWTS開(kāi)始是Simple的縮寫(xiě),不過(guò)后來(lái)變成了Standard的縮寫(xiě))和Swing間的互操作。他們?cè)谧x事件隊(duì)列的時(shí)候用了一種可能留下內(nèi)存漏洞的方式,所以我們不得不采用我們自己的查詢Windows事件隊(duì)列的循環(huán),以糾正這個(gè)錯(cuò)誤。

           

            我們?cè)嚵艘淮斡忠淮巫?/SPAN>SUN修復(fù)這個(gè)錯(cuò)誤,但Amy就是聽(tīng)不進(jìn)去,所以我們才決定SWTAWT/Swing不能共存。我們甚至在SWT中定義了自己的PointRectangle類——整個(gè)工具包對(duì)AWTSwing都沒(méi)有任何依賴。我們把這個(gè)工具包放到了Eclipse中,這是一個(gè)工具平臺(tái),它的總體設(shè)計(jì)目標(biāo)就是要戰(zhàn)勝MicrsoftVisual StudioEclipse是開(kāi)源的,所以任何人都可以在上面構(gòu)建自己的東西,我們已經(jīng)有像TogetherSoftRational這樣的公司移植到了上面。我們的競(jìng)爭(zhēng)者是Microsoft,所以我們所有努力和注意力都是從正面針對(duì)Microsoft

           

            不管怎么說(shuō)SUN對(duì)此非常不滿。他們的NetbeansEclipse做的是相同的事,因此他們向IBM高層抱怨。他們認(rèn)為SWT是要將你綁到Windows上,這純粹是胡說(shuō),因?yàn)?/SPAN>SWT能通過(guò)GTKMac/Linux上運(yùn)行,以及一大堆嵌入式平臺(tái)。他們拒絕讓Eclipse獲得Java認(rèn)證,因?yàn)槔锩嬗性a,所以Eclipse產(chǎn)品必須很小心地使用單詞“Java”這個(gè)SUN的商標(biāo)。Eclipse甚至不能把自己稱為一個(gè)Java IDESUN已經(jīng)威脅過(guò)要采取法律行動(dòng)來(lái)制止IBM在任何時(shí)候把Eclipse稱作一個(gè)Java IDE。結(jié)果之一就是IBMEclipse上創(chuàng)建的GUI設(shè)計(jì)工具,允許你構(gòu)建Swing/AWT GUI,卻不讓你往里面拖放SWT窗口控件。

           

            將SWTEclipse中分離出來(lái)是完全可能的,只需要把DLL摳出來(lái)放到路徑中,并使用窗口組件工具包來(lái)給你的銀行或者保險(xiǎn)或者其他什么應(yīng)用程序開(kāi)發(fā)GUI。再次說(shuō)明,我們無(wú)法更進(jìn)一步,因?yàn)?/SPAN>SUN把我們的雙手綁上了。雖然作為Eclipse開(kāi)放源碼協(xié)議的一部分,CPL允許我們提供這樣的解決方案,但SUN已經(jīng)很清楚地表明他們不希望我們這樣做。 對(duì)于用戶社區(qū)來(lái)說(shuō),無(wú)論IBMSUN的最終動(dòng)機(jī)是什么,我發(fā)現(xiàn)有一點(diǎn)總是很有趣:喜愛(ài)Swing的人總會(huì)說(shuō)“一旦你花上幾年時(shí)間去掌握它,你就能正確地使用它”,這基本上是他們?cè)谠噲D證明和維護(hù)他們辛苦得來(lái)的用途有限的專門(mén)技術(shù);而SWT的擁護(hù)者們說(shuō)的是“哇,這真快,這跟原生的一樣,還可以用XP皮膚……它還又輕又小”。有一句話是我喜歡的,我們的一個(gè)用戶說(shuō),Swing就像Java決定不通過(guò)操作系統(tǒng)來(lái)實(shí)現(xiàn)原生的IO,而是通過(guò)磁頭馬達(dá)API自己來(lái)讀磁盤(pán)的扇區(qū)。Swing基本上就是這樣的,它拿著個(gè)底層的“paint(Graphics)”方法,自己來(lái)繪制所有的窗口組件。
          posted on 2005-09-29 16:14 小強(qiáng) 閱讀(531) 評(píng)論(0)  編輯  收藏 所屬分類: eclipse plugin

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 台中市| 镇平县| 磐石市| 枣庄市| 西丰县| 沙坪坝区| 田林县| 龙井市| 太保市| 古蔺县| 深水埗区| 富川| 尼玛县| 文昌市| 琼海市| 松江区| 车致| 元氏县| 仁寿县| 唐海县| 资兴市| 凤城市| 阜南县| 青铜峡市| 县级市| 佳木斯市| 东城区| 易门县| 青田县| 天峻县| 浑源县| 泰州市| 台江县| 乳源| 白城市| 金湖县| 双峰县| 桦南县| 牙克石市| 沙河市| 弋阳县|