問題篇
寫這篇文章的初衷源自2003年12月11日在玉笛書生兄所建C++Builder的QQ群中,與書生、令狐蟲、ccrun等幾位BCB版的老朋友的一次聊天(聊天記錄見《一次關(guān)于C++BuilderX的討論》)。主要就是聊了一下BCB/BCBX的現(xiàn)狀以未來可能的發(fā)展方向,因?yàn)橛X得對(duì)各位用BCB的朋友也許有幫助,故在令狐兄的支持下,整理成文。本文的內(nèi)容如題目所言,先說說BCBX現(xiàn)在的問題(包括Borland在此次產(chǎn)品轉(zhuǎn)型中的一些不太合適的做法),然后就我們幾個(gè)的個(gè)人觀點(diǎn)來談?wù)剬?duì)它的展望雖然說是BCBX的展望,當(dāng)然這些都是我們的一些一孔之見,Borland未來會(huì)怎么做,那是由不得我們的。
兩年多以前我曾經(jīng)設(shè)想Borland會(huì)推出一個(gè)高度集成的開發(fā)工具,我當(dāng)時(shí)稱之為Borland Studio(參見拙作《Borland Studio?》),后來又聽李維說,Borland正在研發(fā)的代號(hào)為Galileo的開發(fā)工具將是一個(gè)比我設(shè)想的Borland Studio更為強(qiáng)大的東東。然而很不幸,所謂計(jì)劃沒有變化快。時(shí)至今日,這些東東終成泡影,不知道什么時(shí)候Borland才能給我們這樣的驚喜。(補(bǔ)充:現(xiàn)在看來似乎又有一點(diǎn)希望,C#Builder是BDS1,Delphi8是BDS2,這個(gè)BDS據(jù)說便是Borland Develop Studio,也許BDS3會(huì)給我們一個(gè)驚喜吧)
就現(xiàn)在的情況來看,Microsoft已經(jīng)是鐵了心要把Windows操作系統(tǒng)向.net上轉(zhuǎn)移,未來的Windows操作系統(tǒng)將不再提供新的Win32API,而會(huì)以.net的方式提供。原來的Win32API也只是為了兼容性而保留。這很像當(dāng)年從MS SQL 6.5向MS SQL 7.0遷移的情況,在MS SQL 7.0中的DBLIB只提供與6.5兼容的部分,新增功能都是以O(shè)LE-DB方式提供,而到了MS SQL 2000時(shí),DBLIB幾乎已經(jīng)不能用了。MS SQL的這次轉(zhuǎn)移成功地實(shí)現(xiàn)了一次飛躍,并完全擺脫了Sybase的陰影,所以Microsoft在.net中應(yīng)該還是會(huì)故伎重演的。
在這種情況下, Windows平臺(tái)下的原生開發(fā)工具日漸式微,這對(duì)于Borland來說,無疑是要作出重大的抉擇。所以Borland在今年(2003年)先后推出了四個(gè)主要產(chǎn)品:C#Builder(Sidewinder),C++BuilderX(Tomahawk),JBuilderX(Reveille)以及剛剛在BorCon2003上發(fā)布的Delphi8(Octane)。從表面上看,除了C#Builder是全新推出的與Microsoft的Visual Studio.net 2003競(jìng)爭(zhēng)的產(chǎn)品以外,其它的似乎都是原有產(chǎn)品的延續(xù),特別是Delphi 8延用了Delphi的產(chǎn)品名稱,而繼JBuilder9之后推出的JBuilderX的那個(gè)X也很容易被理解為羅馬數(shù)字的“10”,那么C++BuilderX是否會(huì)是C++Builder 7呢?為什么不叫C++Builder 7或C++BuilderVII而要叫C++BuilderX?會(huì)不會(huì)是傳說中的Borland Studio甚至是Galileo的原型呢?
所謂希望越大,失望也越大。當(dāng)C++BuilderX還在測(cè)試版階段時(shí),許多C++Builder用戶都迫不及待地下載了Tomahawk來先睹為快,我也一樣,但結(jié)果卻令人大失所望。這在BCB用戶群中造成了極大的反響,其中比較有名的就有如CSDN BCB版的Aweay兄的文章《Borland聽我對(duì)你說》等。
雖然Borland中國的左輕侯很快就撰文為BCBX作了一番辯解,但還是難以令人接受。BTW:按左兄的說法,Galileo已經(jīng)成了Borland在.net平臺(tái)下的開發(fā)工具(C#Builder和Delphi8)所用的統(tǒng)一的IDE的名稱,看來是不用對(duì)Borland Studio抱什么希望了。
不可否認(rèn)Borland在C++開發(fā)工具中的這次轉(zhuǎn)型從未來發(fā)展的角度上說是必要的,也是正確的做法,具體請(qǐng)參見左兄的文章(《關(guān)于Borland C++BuilderX的一些問題的回答》或《程序員》2003年第十二期)。但還是要指出Borland在此次轉(zhuǎn)型中的錯(cuò)誤做法及可以改進(jìn)的方面。我們幾個(gè)雖然不能說代表Borland的用戶,但至少也算是Borland的鐵桿用戶,我們的意見應(yīng)該來說還是比較有代表性的,可以毫不夸張地說:如果Borland不能在未來作相應(yīng)的改進(jìn),恐怕是難有機(jī)會(huì)在C++領(lǐng)域里再翻身了。
首先說說BCBX推出的方式是非常不合適的。最主要的就是沒有提供一個(gè)從BCB到BCBX的平滑過渡。Borland一向標(biāo)榜自己的特色是:為客戶帶來新技術(shù),創(chuàng)造新價(jià)值,同時(shí)保護(hù)客戶已有投資。過去她也一向是這么做的,然而這一次卻沒有做到。這是一個(gè)非常嚴(yán)重的錯(cuò)誤。
從歷史上說(參見李維的《Borland傳奇》一書),這種錯(cuò)誤Borland曾經(jīng)犯過多次,每一次都是造成用戶的大量流失。以C++開發(fā)工具為例,第一次發(fā)生在BC4的OWL2與BC31的OWL1不兼容,加之BC4本身品質(zhì)不佳,造成Borland用戶的第一次大規(guī)模流失,這次事件最終使Borland從一流的軟件公司墮落成為二流的軟件公司。雖然后來推出了相當(dāng)不錯(cuò)的BC451,然而已經(jīng)為時(shí)太晚,回天乏力。直到BCB的出現(xiàn),作為第一個(gè)RAD C++工具搶回了一部分用戶,然而由于種種原因(其中一個(gè)當(dāng)然是因?yàn)锽CB使用的VCL讓它始終籠罩在DELPHI的陰影之下),已經(jīng)無法重現(xiàn)當(dāng)年BC31的輝煌了。
讓人無法想象的是Borland在花了這么大的代價(jià)買來的教訓(xùn),卻還不知吸取,才過了不到十年,再次犯同樣的錯(cuò)誤。當(dāng)我第一次看到BCBX時(shí)的感覺就像若干年前第一次看到BC4或BCB1一樣:起初是新鮮,大喜,接著就是失望(完全是中看不中用),然后開始盼望下個(gè)版本能解決(當(dāng)然這兩次都盼到了,一個(gè)是BC451—可惜來得太晚了,另一個(gè)是BCB3—這個(gè)比較好玩的就是,當(dāng)時(shí)我們都在盼望的是BCB2,結(jié)果卻盼到了BCB3,大概是Borland為了和Delphi的版本號(hào)一致,跳過了BCB2)。
其實(shí)Borland要避免這種窘境并不困難。有兩個(gè)方法:一個(gè)是在BCBX中暫時(shí)嵌入一個(gè)BCB的IDE的簡(jiǎn)化版,讓它能繼續(xù)支持VCL的RAD開發(fā),因?yàn)閷?duì)C++開發(fā)工具來說,即使在開始時(shí)犧牲少量的跨平臺(tái)特性(BCB是不能跨平臺(tái)的),問題并不大,因?yàn)檫@部分特性本來就是為了繼承Windows平臺(tái)下的東西,更何況像Jbuilder這樣對(duì)跨平臺(tái)要求很高的產(chǎn)品,在早期版本里一樣不是純JAVA的;另一個(gè)方法就是像DELPHI那樣,提供一個(gè)BCB7作為過渡。因?yàn)閺哪撤N角度上說,Delphi7對(duì)Delphi6的改進(jìn),實(shí)在是非常之少,所以有人戲稱Delphi7其實(shí)是Delphi6.5。就現(xiàn)在的情況來看,Delphi的轉(zhuǎn)型無疑要比BCB成功得多,Delphi8提供了.net開發(fā)和兼容VCL開發(fā)(通過VCL.net)。而從BCB的情況來看,唯一的解釋就是Borland對(duì)BCB不夠重視。其實(shí)在這兩個(gè)方法中,個(gè)人認(rèn)為后面一個(gè)方法更好一些。因?yàn)殡m然現(xiàn)在.net大行其道,但可以肯定是的Windows下的原生開發(fā)還要持續(xù)幾年,在這段時(shí)間里讓BCB7和BCBX并行(因?yàn)樵诖蠖鄶?shù)情況下,二者的沖突不是很大)對(duì)Borland占領(lǐng)C++開發(fā)工具領(lǐng)域非常有利,而且有一個(gè)BCB7這樣一個(gè)填補(bǔ)這個(gè)空白的產(chǎn)品(因?yàn)槟菚r(shí)大多數(shù)開發(fā)工具都到.net下了)還能帶來一定的收益。
雖然說Borland作為一個(gè)不能算太大的公司,沒有足夠的資源維持一條過長(zhǎng)的產(chǎn)品線,如果要在BCBX中加入BCB或同時(shí)開發(fā)BCBX和BCB7,會(huì)有困難。但作為一個(gè)全新領(lǐng)域的產(chǎn)品(在平臺(tái)中立的C++開發(fā)工具中,暫時(shí)還沒有像BCBX這樣的產(chǎn)品,即使是傳說中的Eclipse+CDT,也暫時(shí)不能成什么氣候),略為延后一些發(fā)表并不會(huì)造成太大的影響,反而是推出不夠成熟的產(chǎn)品會(huì)造成嚴(yán)重的反面后果,在這點(diǎn)是Borland也是吃過大苦頭的,最典型的莫過于Delphi4。而且如果有BCB7作為緩沖的話,BCBX的延后發(fā)表,對(duì)市場(chǎng)來說也不會(huì)有太大的影響。
但是現(xiàn)在Borland已經(jīng)這么做了,要想挽回的話,只有在產(chǎn)品上作文章了,這樣反而把Borland自己逼上了一條無法回頭的路了—必須盡快推出一個(gè)“可用”的BCBX。而這個(gè)“可用”的要求就要比通過BCB7緩沖后要高得多了。
然后來具體說一下BCBX這個(gè)產(chǎn)品。
它不能說沒有優(yōu)點(diǎn),先從IDE說起吧。BCBX采用了一個(gè)全新的IDE—PrimeTime,這個(gè)IDE來自于JBuilder,而且后來的JBuilderX也是采用這個(gè)IDE(只是在JBuilderX中用的新版本PrimeTime具有更多的優(yōu)點(diǎn),如代碼折疊等)。這個(gè)JAVA寫的IDE可以跨平臺(tái),看上去也很美,使用上雖然與BCB/DELPHI不太一樣,但至少還是保持了Borland的一貫風(fēng)格,特別是對(duì)JBuilder用戶來說會(huì)很自然。
這個(gè)IDE除了具有BCB原有的一些特性,如Code Template等功能以外,特別值得一提的是,它還具有原來在BCB上沒有的版本控制功能(見Editor的History頁面),這個(gè)功能我前兩年就在JBuilder上看到了,眼饞的不行,現(xiàn)在終于也可以在C++中享受到了。此外它還可以像JBuilder一樣集成多種源碼版本控制工具(CVS,ClearCase,VSS)。
對(duì)于編輯器,BCBX還有一個(gè)很好用的功能就是Sync Edit,通過選擇一段文本,可以方便地修改其中相同的標(biāo)識(shí)符等,在進(jìn)行代碼重構(gòu)時(shí)非常有用。
還有就是提供了一個(gè)類似Class Explorer的Structure View功能,可以在這里立即跳轉(zhuǎn)到各個(gè)類/函數(shù)的定義或?qū)崿F(xiàn)處。另外它的Editor支持嵌入源碼的ToDo Item功能,并且能在Structure View中立即顯示出來,而且也可以從Structure View中跳轉(zhuǎn),比BCB中的ToDo List功能要強(qiáng)大。
另外,對(duì)Project的管理功能也略有加強(qiáng),可以定義和調(diào)整Project Group中的編譯順序(相當(dāng)于一種Project依賴關(guān)系)。這一點(diǎn)也是BCB曾經(jīng)被人垢病的一個(gè)方面。
BCBX還有一個(gè)特性是與BCB一樣的:支持基于VisiBroker的CORBA應(yīng)用開發(fā)。特別是它比BCB有一個(gè)很大的改進(jìn),在BCB中用CORBA向?qū)J(rèn)生成的CORBA應(yīng)用是使用BOA的,而這是早在五年前就被CORBA2.2規(guī)范制定的POA所代替了(當(dāng)然BOA也可以用,但基于移植性考慮,OMG建議使用POA),在BCBX中終于用POA代替了(而且好像不能再用BOA了)。
至于很多人認(rèn)為BCBX這個(gè)用JAVA寫的IDE速度太慢,我倒不覺得,只是啟動(dòng)速度略有些慢,不過BCB的啟動(dòng)也不能算很快,比起VS.net來說慢太多了。也許是因?yàn)槲业臋C(jī)器內(nèi)存比較大的緣故,雖然是PIII-733的CPU,但有512M內(nèi)存。看來要跑BCBX要先準(zhǔn)備好內(nèi)存了。
BCBX除了這些IDE方面的好處外,還有一個(gè)好處就是帶有dbExpress這個(gè)跨平臺(tái)的通用數(shù)據(jù)庫訪問技術(shù),所以用BCBX做跨平臺(tái)數(shù)據(jù)庫應(yīng)用會(huì)比較方便,并且目前dbExpress支持的數(shù)據(jù)庫種類還是比較多的。
雖然BCBX有上述的優(yōu)點(diǎn),但也不能改變它是一件“粗糙”的產(chǎn)品的本質(zhì),簡(jiǎn)直就和當(dāng)年的BCB1如出一轍。
首先最大的敗筆莫過于不支持VCL了。據(jù)說不支持VCL還有理由了:因?yàn)樗哪繕?biāo)用戶不是BCB用戶,而是更為廣大的非VCL的C++用戶,如其它平臺(tái)的C++用戶及VC的用戶等,VCL是BCBX2的目標(biāo)。而且不支持VCL就算,也沒有提供一個(gè)別的GUI開發(fā)的Framework,比如傳說中的wxWindows(據(jù)說要在BCBX2里提供)。
其次來說這個(gè)IDE,作為IDE技術(shù)的發(fā)明者,Borland應(yīng)該很了解開發(fā)人員要的是一個(gè)什么樣的IDE,它應(yīng)該能夠在其中很方便地完成大部分的開發(fā)工作,但BCBX明顯達(dá)不到要求。雖然它帶有很多BCB不支持的功能,但同樣的,有很BCB中具備的功能,在BCBX中還沒有提供。特別是非常重要的Code Insight功能居然都沒有,而且它的Structure View,雖然在某些方面比Class Explorer強(qiáng)大(如ToDo),但它的功能還是太弱,比如不能在Structure View里創(chuàng)建類成員等。還有BCBX的Editor中不支持跳轉(zhuǎn)到定義的功能,不支持Open file at cursor等。而且個(gè)人認(rèn)為BCB6中將只將單元放在Editor上面的Tab中,而將CPP文件和H文件放在下面的Tab中是一個(gè)好辦法,但BCBX卻還是像BCB5一樣都放在上面,這樣文件一多就要卷來卷去。
還有一個(gè)足以說明它“粗糙”的理由是:BUG。我曾經(jīng)試過在一個(gè)很簡(jiǎn)單的應(yīng)用里只是更換了一下編譯器,正要保存設(shè)置時(shí),IDE無響應(yīng),CPU占用100%。
其實(shí)Borland提出BCBX這個(gè)策略是沒有錯(cuò)的,只是策略的實(shí)施上有些問題。
BCBX的產(chǎn)品定位是定位于非VCL的C++用戶。在這點(diǎn)上,就會(huì)讓Borland目前的C++產(chǎn)品用戶,基于VCL的BCB用戶非常不滿,特別是沒有提供像BCB7這樣的過渡產(chǎn)品,可能導(dǎo)致用戶流失。其次,對(duì)于非VCL的C++用戶來說,也未必吸引人。這部分C++用戶主要有兩派:一派是用VC的用戶,一派是用GNU C++的用戶。對(duì)VC用戶來說,跨平臺(tái)特性對(duì)他們完全沒有吸引力,而在Windows平臺(tái)下,VS.net還是非常好用的,并且他們可以很方便地進(jìn)行.net應(yīng)用開發(fā),BCBX提供的多編譯器支持對(duì)他們來說也是沒用的功能,所以在這里BCBX基本上沒有什么市場(chǎng)。
估計(jì)BCBX更主要的目標(biāo)市場(chǎng)在GNU C++。用GNU C++的用戶中,很大一部分是開源社團(tuán),而對(duì)他們來說,根本不屑于使用像BCBX這樣的東東,特別是自從Danny.Thorpe當(dāng)年因?yàn)殚_發(fā)Kylix,與Linux社團(tuán)有一次大的沖突,Borland在開源社團(tuán)的影響并不好。而且就BCBX本身來說,它雖然說支持ACE、Boost、Loki這些庫,但是事實(shí)上這些庫本來就是通用庫,支持很多的編譯器,其中也包括BCB,所以這根本不能算什么特性。而且雖然BCBX對(duì)Project管理功能有所增強(qiáng),但比VS.net還有差距,更別提跟開源社團(tuán)習(xí)慣使用的Make文件相比了(雖然Make文件用起來比較復(fù)雜,但對(duì)于大項(xiàng)目來說,它是最好的解決方案,即使是項(xiàng)目管理功能好如VS.net,跟Make文件相比還是差得太多了)。
縱觀整個(gè)BCBX,其中提供的有價(jià)值的東西非常有限:一個(gè)是還不能算是很完善的IDE,另一個(gè)可能就算是dbExpress了。至于像CORBA向?qū)е惖牟⒉凰愫芴貏e,用命令行編譯IDL一樣可以實(shí)現(xiàn)它的功能,雖然沒有向?qū)敲捶奖悖幼杂桑挥檬苤朴赩isiBroker,可以選擇各種ORB產(chǎn)品。版本控制也可以用CVS等專門的軟件,只是要多一些手工操作,沒有集成起來這么方便而已。其它像編譯器一類的更沒什么好說的,BCBX還是用的BCB6的編譯器:BCC5.6。BCBX集成了Together(據(jù)說,我用的Enterprise版是沒有的)卻沒有提供相應(yīng)的企業(yè)應(yīng)用開發(fā)的Framework,,如C#Builder/DELPHI8中的ECO,或是像BCB/DELPHI那樣的MIDAS/DataSnap。
當(dāng)年Kylix 1.0甫一堆出,就有人評(píng)論它是一個(gè)“玩具”,直到Kylix 3才基本有了一個(gè)產(chǎn)品的樣子(可惜看樣子它注定是要夭折的了)。然而今天的BCBX卻連當(dāng)年的Kylix 1都不如。
按Borland在中國一向的產(chǎn)品定價(jià),一般開發(fā)工具的企業(yè)版都是定在29950元人民幣的天價(jià)(相對(duì)于MS來說完全可以說是天價(jià),因?yàn)槿f多元定一年的MSDN宇宙版,可以得到MS的所有產(chǎn)品),BCBX應(yīng)該也不會(huì)例外,說句不客氣的話,這樣乏善可陳的產(chǎn)品定這樣一個(gè)價(jià)格真是與搶錢無異。
展望篇
說了BCBX這么多的問題,該來談?wù)勎覀兊恼雇恕?/P>
首先從產(chǎn)品定位說起。大家都知道,每種語言都有其適用的領(lǐng)域,沒有什么語言能通吃所有的開發(fā)工作,C++也一樣,雖然從某種程度上說,C++可算是目前開發(fā)領(lǐng)域最廣的語言,幾乎可以用于絕大多數(shù)的應(yīng)用或系統(tǒng)的開發(fā),但在不少情況下,它僅僅是“可以”而已。比如在企業(yè)應(yīng)用開發(fā)領(lǐng)域,C++并不是一個(gè)很好的選擇(雖然借助于VCL,BCB基本上做到了),但通常選擇Java或.net可以更快更好地解決問題。
就目前情況來說,C++最常用的開發(fā)領(lǐng)域有兩個(gè)大的方面,一個(gè)是系統(tǒng)級(jí)應(yīng)用開發(fā),如操作系統(tǒng),驅(qū)動(dòng)程序(這兩種應(yīng)用更主要的是用C和匯編,但也有部分可以用C++),編譯器,虛擬機(jī),工業(yè)數(shù)據(jù)采集,通信,系統(tǒng)服務(wù)等;另一個(gè)是一般應(yīng)用開發(fā),主要是指非企業(yè)應(yīng)用或者說是非數(shù)據(jù)庫應(yīng)用方面,如一般GUI應(yīng)用程序,工具軟件,圖像處理,多媒體等(雖然這些應(yīng)用有些也可以用.net等虛擬機(jī)技術(shù)開發(fā),但是在一些關(guān)鍵性部分基于性能上的要求,還是需要C++等原生開發(fā)語言的)。
基于這些原因,作為定位于通用C++開發(fā)工具的BCBX要想在C++開發(fā)工具領(lǐng)域占有一席之地(暫且先不說它是不是有希望重振當(dāng)年BC31的聲威),就應(yīng)該結(jié)合C++語言的實(shí)際情況,這兩方面的應(yīng)用開發(fā)上有獨(dú)到之處。。
首先說系統(tǒng)級(jí)應(yīng)用開發(fā)。對(duì)于系統(tǒng)級(jí)應(yīng)用開發(fā)來說,GUI通常不是很重要的方面,它對(duì)開發(fā)工具的要求更側(cè)重于性能和調(diào)試等方面。即要求編譯器能生成高度優(yōu)化的代碼,并且目標(biāo)程序要很穩(wěn)定,要提供方便的底層調(diào)試功能。而且一般這樣的軟件都相對(duì)比較龐大,對(duì)項(xiàng)目管理的要求比較高。
對(duì)應(yīng)這些要求,未來的BCBX應(yīng)該加強(qiáng)在編譯器,調(diào)試器及項(xiàng)目管理方面的功能。比如在編譯器方面,現(xiàn)在BCBX用的BCC5.6是肯定不能滿足要求的,雖然BCBX支持使用其它的編譯器,但作為一個(gè)完整的開發(fā)工具而不僅僅是一個(gè)IDE,BCBX中不能沒有Borland自己的編譯器。不過據(jù)說Borland正在開發(fā)一個(gè)全新的跨平臺(tái)C++編譯器—BCCX,讓人拭目以待;在調(diào)試器方面,這曾經(jīng)是Borland的強(qiáng)項(xiàng)之一,現(xiàn)在已經(jīng)沒落了,不過也可以考慮跟別的公司合作或通過集成第三方產(chǎn)品來實(shí)現(xiàn);至于項(xiàng)目管理一直是Borland的弱項(xiàng)之一,而且對(duì)這樣的復(fù)雜項(xiàng)目來說,即使實(shí)現(xiàn)了像VS.net那樣的管理還是不夠的,這個(gè)可以考慮提供一個(gè)MakeFile管理工具來實(shí)現(xiàn),畢竟這方面的應(yīng)用還是MakeFile最好,但它的編寫維護(hù)都是比較麻煩的,如果能提供一個(gè)能生成MakeFile的向?qū)Ъ耙粋(gè)能方便地管理MakeFile的工具,也是相當(dāng)不錯(cuò)的。
再來看一般應(yīng)用開發(fā)。對(duì)于這方面的應(yīng)用開發(fā)來說,一個(gè)好的GUI開發(fā)工具是非常重要的,此外對(duì)編譯器,調(diào)試器,項(xiàng)目管理同樣也有一定的要求。因?yàn)檫@類應(yīng)用的最終用戶通常都是一般電腦用戶,不同于系統(tǒng)應(yīng)用面對(duì)的都是專業(yè)用戶,所以對(duì)界面要求通常都很高,不但要通做出標(biāo)準(zhǔn)的GUI界面,常常還需要能實(shí)現(xiàn)一些花哨的界面功能。這就對(duì)GUI Framework提出了較高的要求:它不但要好用,簡(jiǎn)單,還要能很方便地?cái)U(kuò)充。VCL就是一個(gè)很好地實(shí)現(xiàn)了這個(gè)要求的GUI Framework,但是很遺憾的是,它不是跨平臺(tái)的,雖然后來Borland又推出了跨平臺(tái)的CLX,但是它用基于QT庫的,而QT庫的License對(duì)商業(yè)應(yīng)用不是免費(fèi)的,這又限制了CLX的應(yīng)用,特別是現(xiàn)在Borland已經(jīng)暫停(也許是停止)了Kylix這條產(chǎn)品線,對(duì)CLX來說無異于雪上加霜。
既然VCL和CLX兩條路都走不通,BCBX未來唯一的出路就是采用一個(gè)新的GUI Framework,目前看來Borland是會(huì)選擇wxWindows。但這帶來了一個(gè)問題:因?yàn)锽CB的產(chǎn)品線已經(jīng)停掉了,BCBX未來必須接下BCB的用戶,而如何從VCL向wxWindows過渡是未來BCBX面臨的一大問題。不過有消息說Borland已經(jīng)提供了解決方案,在新的BCBX中將采用一個(gè)開放的GUI Desgner,支持多種GUI Framework,已知的就有wxWindows和JavaBean,而對(duì)于非跨平臺(tái)的VCL,在新的BCBX中將通過一個(gè)被稱為“VCL Bridge”的東西實(shí)現(xiàn)。這樣看來,在未來的BCBX中將能比較完美地實(shí)現(xiàn)這一功能。
再來看企業(yè)應(yīng)用開發(fā)。雖然就目前的情況看,基于虛擬機(jī)平臺(tái)的開發(fā)技術(shù)(JAVA或.net)已經(jīng)成為企業(yè)應(yīng)用開發(fā)的主流,而C++不是一種適用于虛擬機(jī)的語言(雖然MS將所謂的Managed C++加入.net,但情況不并好,不過C++適用于開發(fā)虛擬機(jī)倒是真的),無論在開發(fā)效率和產(chǎn)品品質(zhì)方面,用C++做這方面的應(yīng)用都是不合算的,即使是在產(chǎn)品性能方面,C++所能取得的優(yōu)勢(shì)也日趨減少。
但是這個(gè)市場(chǎng)仍然存在。首先,在一些情況下,企業(yè)應(yīng)用系統(tǒng)還是需要和一些底層應(yīng)用(如硬件驅(qū)動(dòng)或其它原生代碼程序等)進(jìn)行交互,這時(shí)用基于虛擬機(jī)的技術(shù)并不方便(.net相對(duì)做得較好);另一方面,則是在一些對(duì)性能有較苛刻要求的應(yīng)用中,用基于虛擬機(jī)的技術(shù)可能不能滿足要求。這也就是為什么像BEA的TUXEDO這樣的原生代碼應(yīng)用中間件仍然有相當(dāng)大的市場(chǎng)的原因所在。
在較好的實(shí)現(xiàn)了滿足前面兩種應(yīng)用的開發(fā)要求后,BCBX也完全可以進(jìn)軍這一領(lǐng)域。對(duì)于BCBX這樣一個(gè)跨平臺(tái)開發(fā)工具來說,所用的中間件技術(shù)當(dāng)然也必須是跨平臺(tái)的,MIDAS/DataSnap所支持的COM技術(shù)是肯定不行的,而只能用JAVA開發(fā)的EJB當(dāng)然也不行,唯一剩下的就是CORBA。雖然現(xiàn)在BCBX提供了VisiBroker的CORBA應(yīng)用向?qū)В鄬?duì)于MIDAS/DataSnap來說,功能還是太弱。即使加上Together,BCBX距離一個(gè)像樣的企業(yè)應(yīng)用開發(fā)工具還是比較遠(yuǎn)的。還有一個(gè)問題是:雖然Borland的VisiBroker(現(xiàn)在已經(jīng)改名叫Borland Enterprise Server—BES之VisiBroker版了)曾經(jīng)是全球市場(chǎng)占有率排名第一的CORBA產(chǎn)品,即使現(xiàn)在它也是數(shù)一數(shù)二的,然而畢竟還有很多其它的CORBA產(chǎn)品可以選擇,比如現(xiàn)在占有率第一的IONA的Orbix以及Open Source的ACE/TAO和MICO等(只考慮支持C++的)。如果BCBX不能以一種開放的姿態(tài)來接受它們,依然很難在CORBA領(lǐng)域取得大的成就。
在這一點(diǎn)上,Borland應(yīng)該是有經(jīng)驗(yàn)的,當(dāng)年JBuilder正是因?yàn)槟芘cBEA的WebLogic很好地結(jié)合起來,才得以取得如今的勝利。逼得IBM不得不放棄Visual Age for JAVA(就是后來成為Open Source的Eclipse),雖然在一些方面,VAJ還是比JBuilder有優(yōu)勢(shì)的,并且IBM的WebSphere在各方面的表現(xiàn)也不比WebLogic差,然而Borland和BEA的強(qiáng)強(qiáng)聯(lián)手實(shí)在太強(qiáng)大了。如果當(dāng)年JBuilder只抱著IAS(Inprise Application Server即現(xiàn)在BES的前身)不放的話,實(shí)在很難能在JAVA開發(fā)工具領(lǐng)域有什么大的作為,因?yàn)樵赪ebLogic和WebSphere面前,IAS還差得太遠(yuǎn)了。所以現(xiàn)在JBuilder支持的EJB Container是越來越多了,除了前面說的這些商用產(chǎn)品外,Open Source的JBoss也同樣在支持之列。
BCBX完全可以借鑒JBuilder的這一經(jīng)驗(yàn),支持集成包括IONA Orbix,ACE/TAO等多種CORBA產(chǎn)品開發(fā),相對(duì)來說,這一點(diǎn)比集成不同的GUI Framework要容易很多,因?yàn)镃ORBA規(guī)范是由OMG定義的標(biāo)準(zhǔn),不同產(chǎn)品之間的差異相對(duì)較小。所以問題的關(guān)鍵就在于Borland是否愿意這么做了,畢竟這可能影響到BES這條產(chǎn)品線的市場(chǎng)。老實(shí)說,Borland在企業(yè)中間件市場(chǎng)中一直是很失敗的,從早年通過收購OEC取得Entera,卻很快因?yàn)镃OM和CORBA的崛起而被迫放棄;通過收購VisiGenic取得了VisiBroker后,雖然在跟Netscape的合作中曾取得一定的成功,但隨著NetScape的沒落,VisiBroker的領(lǐng)先地位也很快被IONA的Orbix所取代;后來從IAS開始做JAVA中間件,也一直是只能在沒有WebLogic和WebSphere的市場(chǎng)角落里分一點(diǎn)殘羹而已。與其讓BCBX的企業(yè)開發(fā)與BES一起沒落,還不如像JBuiler一樣犧牲BES換來BCBX的成功,畢竟對(duì)Borland來說,開發(fā)工具才是真正的主營(yíng)業(yè)務(wù)。
當(dāng)然,光有對(duì)CORBA的支持還是不夠的,畢竟企業(yè)應(yīng)用開發(fā)是一個(gè)大問題,需要的支持還是很多的。雖然現(xiàn)在BCBX有DBX這個(gè)方便的數(shù)據(jù)庫訪問技術(shù),但是還缺乏一個(gè)系統(tǒng)的Framework,一個(gè)類似于MIDAS/DataSnap的東西。另外要結(jié)合Together的MDA開發(fā),還必須有一個(gè)類似于ECO的數(shù)據(jù)持久化技術(shù)。
還有對(duì)SOAP/WebService的支持是不能少的。雖然它并不是一個(gè)像MS所吹噓的那樣,是一個(gè)萬能的技術(shù),但還是有很多地方需要它的。特別是當(dāng)需要與其它應(yīng)用溝通時(shí),雖然與JAVA應(yīng)用溝通可以通過RMI over IIOP,但要與.net應(yīng)用或其它的應(yīng)用溝通,SOAP還是一個(gè)比較好的解決方案。
有了這樣一個(gè)強(qiáng)大的企業(yè)開發(fā)環(huán)境,就像我前一段向朋友“太可怕”(CSDNID:comanche)推薦ACE/TAO時(shí)說的:“這個(gè)世界沒有MS,沒有SUN,一樣可以很美好。”
正如我前面所說,現(xiàn)在的BCBX是乏善可陳的,然而如果未來的BCBX真的可以加入我前面所說的這些Feature,包括一個(gè)完善的IDE,一個(gè)優(yōu)秀的編譯器,一個(gè)方便高效的GUI開發(fā)環(huán)境,以及一個(gè)功能強(qiáng)大的企業(yè)開發(fā)Framework等,那么BCBX才真正像一個(gè)Powerful的C++開發(fā)工具(讓我想起B(yǎng)orland當(dāng)年拍的BC31廣告片^_^),重拾BC31當(dāng)年的風(fēng)光也不是不可能的。
本來寫到這里就差不多完了,不過Borland大概是為了安撫用戶對(duì)BCBX的不滿情緒,最近推出了一個(gè)BCBX Preview包(在Borland網(wǎng)站有提供下載),通過將這個(gè)包安裝到BCBX中,可以大致了解一下未來版本的BCBX會(huì)是什么樣子。我簡(jiǎn)單地試用了一下,所以在最后要補(bǔ)充一些對(duì)這個(gè)Preview的看法。
這個(gè)Preview包括兩個(gè)部分:一個(gè)是集成了wxWindow的GUI開發(fā)環(huán)境,另一個(gè)是全新的C++編譯器BCCX的預(yù)覽版。下面分別作一個(gè)說明:
首先來看這個(gè)GUI Designer。在IDE的New wizard里增加了兩頁,其中一頁就是wx framework(另一頁是preview),里面有兩項(xiàng):New wx framework project和New wx framework form。用前者創(chuàng)建一個(gè)新的wx應(yīng)用,可以看到它生成的代碼中包括一個(gè)XRC文件,這是一個(gè)XML風(fēng)格的界面資源文件,類似于DFM/XFM。在頁面下部有一個(gè)Design的Tab,點(diǎn)擊即可打開GUI Designer。
這個(gè)GUI Designer和以前的BCB的GUI Designer還是很相似的,包括控件欄,設(shè)計(jì)區(qū)和Object Inspector三個(gè)部分。其中控件欄也是在頁面上方,只是控件少得多了,只有三頁共18個(gè)控件。設(shè)計(jì)區(qū)和BCB不同,不再是獨(dú)立的Form Design,而是像Visual Studio/Galileo那樣嵌在頁面里,而且控件的定位也不是用以前的八點(diǎn)框,而是一個(gè)藍(lán)色的粗框,也沒有Grid定位。Object Inspector也有不同,首先是位置改在頁面右邊,跟JBuilder一貫的風(fēng)格相同,當(dāng)然內(nèi)容就更不同了,畢竟現(xiàn)在的Framework是wxWindow而不是VCL了。
再來看BCCX編譯器。同樣是在IDE的New wizard里有一頁P(yáng)reivew,其中包括三個(gè)項(xiàng)目,其實(shí)這里生成的代碼與Project頁中的相應(yīng)項(xiàng)目并無太大不同,只是所用的Include目錄(Preview帶有一套新的Include文件和啟動(dòng)代碼)和編譯器設(shè)置略有不同而已。另外,在IDE的編譯選項(xiàng)中也增加了一項(xiàng):“Borland® C++ Compiler Preview for Windows (IA-32) Tools”。看BCCX命令行提示可以看到,它的版本信息為:Borland C++ Compiler 6.0 Preview。可見這是Borland的一個(gè)全新版本的C++編譯器,同樣還有與之配套的Incremental Link,也是6.0版的。
不知道是不是因?yàn)樾碌木幾g器配置有所不同,我只在IDE中編譯通過很簡(jiǎn)單的程序,還未能成功編譯過wxWindow應(yīng)用,看來還需要再研究研究。
當(dāng)然這個(gè)畢竟只是Preview,問題還是有的。除了上面說的編譯器的問題外,GUI Designer也是有問題的,最大的問題就是速度慢。在我的512M的機(jī)器上,BCBX跑起來也只占到300多M的內(nèi)存,還未將物理內(nèi)存用盡,但做GUI Design時(shí)的速度卻比用JBuilder做GUI還要慢上許多,這實(shí)在讓人難以忍受。其次一個(gè)問題是它不支持中文,在控件的屬性中輸入中文會(huì)變成亂碼,估計(jì)跟XRC文件使用UTF-8編碼時(shí)對(duì)中文(應(yīng)該其它DBCS也有同樣的問題)沒有能夠正確處理有關(guān)。
這篇文章斷斷續(xù)續(xù)寫了一個(gè)多月,終于可以告一個(gè)段落了。最后還是要給Borland提點(diǎn)意見:Borland在2003年里出的幾個(gè)產(chǎn)品,完成度都不算高,其中除了JBuilderX我不是太了解以外,C#Builder、C++BuilderX和Delphi8我都試用過,基本上都未達(dá)到可用的程度。希望今年Borland能夠吸取教訓(xùn),推出一個(gè)令人比較滿意的BCBX新版本。