下面談談VB6的前途。雖然用VB很多年,但是在前輩面前仍然是菜鳥一只,我大膽說兩句,說得不好還請指教。
自從2000年微軟推出.NET計劃以后,VB產品線就徹底停掉了。我說的VB,指的是VB6,不是后面的VB.NET。
VB面臨好多方面的挑戰,最大的是軟件從C/S向B/S的轉型。而在WinForm下,由于微軟的放棄,VB也越來越過時了:
(1)VB本身過于簡單——因此它支持的東西實現起來超乎想象的簡單,他不支持的東西,超乎想象的復雜,他的擴充性不好,因此微軟為VB設定了一些常規開發的任務集就決定了VB能做什么。
VB5的時候,COM/DCOM大行其道,VB立馬跟進,一下子VB開發COM的效率就立刻超過了所有語言。VB6的時候,ADO數據訪問、Office 插件大熱,馬上VB又增加了這些功能。。。坦率地說,IIS應用程序,ActiveX文檔和DHTML在當時有些超前了,后來看看還是很不成熟。總之微軟原生支持的功能,VB的實現都超級簡單,簡單地讓別的開發工具的用戶嫉妒。
但是之后缺乏微軟的支持,讓VB去操縱網絡、存取XML、訪問Web Service、編寫多層應用……你會發現,VB比起Delphi、Java、C#,都沒有任何優勢,反而由于VB對多線程缺乏支持在網絡開發方面步履維艱。
(2)隨著面向對象和組件化開發的深入人心,初級開發者也意識到OO的重要,或者說面向對象不再是大項目才用到的高級技術,尤其是2003年以后,設計模式的火爆。然而VB卻缺乏對面向對象最基本的支持。或者說為了模擬這些VB不具備的特性,用上OO反而得不償失了。
(3)VB定位于原生Win32程序的開發卻并不能支持Windows API的很多特性。比如VB需要聲明API,缺乏API的文檔,在語法上,不能支持SEH,遇到Callback函數,一旦出現錯誤,整個開發環境立刻崩潰。在原生Windows開發已經非常萎靡的情況下,VB又敵不過Delphi和VC的夾擊。
(4)VB缺乏大廠商的支持,自從VB被微軟放棄以后,大廠商對于VB的投入非常謹慎,面向VB的產品越來越有限。很多第三方廠商的SDK,提供VC的頭和庫,提供.NET的文檔,偏偏拋棄了VB。。。就算支持ActiveX接口勉強支持VB,但是明顯轉換到Delphi、C#平臺是更穩妥的辦法。
像報表、圖表、用戶界面等等組件,.NET下有很多選擇,而且價格便宜,不少甚至開源,VB下的選擇就很少了。。。
VB本身在Vista、XP下的支持也不是很好,VB6自繪的控件和XP的主題格格不入,一些COM組件在Windows Vista下運行不了,WinHelp幫助主題更是被Vista拋棄。
(5)VB的程序缺乏效率,由于VB依賴于虛擬機環境,所以運行速度非常緩慢。編譯器本身也不可能再去支持x64、多核心等等新特性。相反的是,原先被罵的Java和.NET由于不斷支持新的技術,現在的性能提高很大。不信大家試下,把VB的程序在.NET重新編譯下,就能快好多倍。
(6)VB的IDE已經很落后了,大家用用Eclipse和Visual Studio 2008/2010就會發現VB的IDE有多差勁。別的不說,VS2005支持智能感知,在一行開始的時候就有提示,而VB的智能感知就局限在自動完成成員,這一點就非常不方便。
最近看到很多高級VB用戶不斷透支VB的功能,比如讓VB支持內嵌匯編、支持Web Service、支持Aero界面、挖掘IE編程……但是都需要用到很多Hack方法。曾經有個ThunderVB計劃,讓VB支持編譯標準dll,內嵌ASM/C++代碼,可謂很牛,不過最后項目還是放棄了,我想最主要的原因是在VB技術落后、市場萎縮的的情況下,開發已經沒有成本的優勢了。技術到最后無論多牛都必須有市場有需求。VB的On Error GoTo這種異常處理機制大家去研究,可是這些在現代的語言里面早就被優雅的結構化異常處理取代。
下一代的編程語言,比如Ruby、C# 4.0、Java 7、F#或者別的,又裹挾了更多新特性來襲,真的不知道VB還能挺住否。
至于VB的另一個用途,就是成為二級考試的語言,和Turbo C、FoxPro那樣。。。但是這些初級開發者到了實際開發的時候還是放棄了VB,這些低水平的重復大量浪費了他們的時間精力和社會資源。我對VB前途非常不看好。