2001 年軟體界的巨星 - Kylix
什麼是Kylix?如果你還不知道的話,那麼你可能已經很久沒有注意軟體界的大事了。Kylix是Borland公司以Windows中最受歡迎的RAD工具-Delphi為基礎,特別為Linux作業系統打造的視覺化RAD工具,簡單的說Kylix就是Delphi For Linux。
為什麼Kylix這麼今人興奮呢?這是因為Linux雖然是一個現在非常流行的作業系統,但是在Linux上要開發應用程式程式師大都使用GNU的GCC編譯器。雖然 gcc 是一個非常穩定編譯器,但是Linux上的程式師必須一行一行的撰寫程式碼,同時必須對於Linux作業系統非常的瞭解。如果還想開發X Window的應用程式,那麼程式師還必須學習X Window API或是Linux上最流行的的兩個圖形使用者介面套件GNOME/KDE的API。由於這個門檻相當的高,因此只有少數的人能夠在Linux上開發應用程式,開發的時程也非常的漫長,也造成了Linux上應用程式的數量一直無法追上Window上的應用程式。但是Kylix的推出將會改變這個情形,因為Kylix就像是Window平台的Delphi或是Visual Basic一樣,它提供了視覺化的整合發展環境,也提供了拖曳元件來設計圖形使用者介面以及應用程式的能力。不但可以立刻讓熟悉Windows開發環境的程式師在Linux上開發應用程式,也能夠讓現有的Linux立刻的增加數倍的生產力。
Kylix不但提供了高生產力,視覺化的整合發展環境,更結合了Delphi有名的閃電般的編譯器,讓程式師在Kylix中開發Linux應用程式有如沐浴在春風中一樣,今人非常的舒服。雖然Kylix現在只是第一版,但是它提供的整合發展環境卻比Window上的Delphi 5.0還先進,可以說Kylix的開發環境大概是Delphi 5.5的水準。從這一點就可以看出Borland對於Kylix的重視。
Kylix 1.0提供了非常豐富的開發功能,能夠讓程式師開發各類的Linux應用程式。基本上Kylix提供了超過了150個的元件讓程式師使用,而Kylix 1.0本身則是由4大核心功能打造而成,它們分別是:
提供視覺化圖形使用者介面功能的CLX元件組
包含了按鈕,串列盒,Grid,圖形元件等先進的視覺化元件。CLX元件不但可以節省程式師大量的開發時間,能夠同時開發執行在KDE/GNOME圖形套件中的Linux應用程式,更是一套跨平台的Framework。由CLX開發出來的應用程式也能夠藉由Delphi 6編譯之後在Window平台執行,反之亦可。當然Borland也延續了Delphi的VCL優良傳統,提供了幾乎所有視覺化CLX元件的原始程式,允許程式師根據自己的需求來修改。
提供Socket和Internet/Intranet程式能力的NetCLX
這組元件允許程式師開發Linux上的Socket應用程式。讓程式師能夠結合CLX和NetCLX開發出圖形使用者介面的通訊應用程式。此外Borland也把Delphi的WebBroker功能移植到Kylix之中,讓Linux的程式師可以快速的開發執行在Apache中的Internet/Intranet應用系統。這對於Linux上的程式師是一個非常棒的訊息,因為藉由Kylix,Linux上的程式師終於可以快速的開發各種Web應用程式,如果再結合稍後介紹存取資料庫的DataCLX,那麼Linux程式師可以開發出極為複雜,先進的Linux Web應用系統。同樣的,Borland也將在Delphi 6中支援Apache的功能。
高速的資料存取引擎DBExpress
要如何在Linux平台中存取資料相信是許多Linux程式師的夢魘,因此大部份的Linux應用程式都是以系統程式,公用程式或是其他周邊小程式為主。但是不否否認的,要讓Linux作業系統能夠成為大眾接受的平台,那麼Linux就必須擁有能夠處理資料的應用系統。在Kylix沒有出現之前,Linux的程式師只能使用JDBC/ODBC存取資料庫。但是Borland為了在Linux和Window平台中建立新一代的跨平台資料存取引擎,特別集中的資源開發出了所謂的DBExpress資料存取引擎。DBExpress資料存取引擎能夠提供最有效率的資料存取速度,讓Linux和Window平台的程式師能夠使用一組相同的元件來存取各種關連資料庫。讓存取資料不再是Linux程式師的最痛,在稍後的章節中將會詳細的介紹DBExpress。
視覺化存取資料的DataCLX元件組
一旦Linux應用程式藉由DBExpress取得了資料之後,DataCLX這組視覺化的元件能夠以各種先進的圖形使用者介面控制元件來呈現資料。這些元件包含了按鈕,串列盒,下拉盒,甚至是複雜的Grid元件。讓展示資料不再是Linux程式師最不願意做的事情。DataCLX元件組將會快速的讓Linux的商業軟體出現在市場之中。
下圖便是Kylix 1.0的核心功能架構圖。
Kylix的4大核心功能
在下面的的內容中,將會進一步的詳細介紹Kylix提供的強大功能,讓各位能夠更瞭解Kylix的極致性能以及它的致命吸引力。
最具生產力的整合發展環境
在Linux平台中開發應用程式最不方便的地方是什麼?那就是Linux程式師缺乏像Window平台下高生產力的開發環境。雖然Linux提供了一些編輯器,如vi,或是一些圖形化的編輯器能夠讓程式師敲打程式。但是這畢竟不方便,此外程式師在打完程式碼之後還得回到命令列下編譯程式,在數個不同的環境中開發應用程式,相當的不方便。因此Kylix的第一個目標便是提供Linux平台下的程式師一個擁有最高生產力的開發環境。在這個開發環境中程式師可以進行所有開發應用系統的工作,從敲打程式碼,編譯程式,連結程式,到執行和除錯程式都能夠一氣喝成。此外這個開發環境必須提供視覺化程式設計的功能,以及拖曳元件,設計表單的工作。簡單的說Kylix要提供比類似Window平台下的Delphi開發環境。 雖然不簡單,但是Borland再次的突破了技術瓶頸,在Linux作業系統下提供了比Window平台下Delphi 5更為先進的整合發展環境。下圖便是Kylix的整合發展環境,從圖中各位可以看到,畫面上方便是有名的元件盤,允許程式師以拖曳元件的方式設計視覺化的表單,左邊是物件檢視器可以讓程式師以動態的修改表單中的元件。這整個整合發展環境是執行在KDE的圖形使用者介面套件之中。
終於展露神秘面紗的Kylix整合發展環境
此外Kylix的編輯器提供了強大的功能讓Linux程式師能夠快速的開發應用程式。這些強大的功能包含了以不同顏色顯示語法的能力,Code Complete和Code Insight等。例如下圖便是Kylix的編輯器,請注意當我在編輯器中輸入了一個物件變數StatusBar1之後,編輯器便會在一個視窗中自動顯示這個元件所有可以呼叫的方法以及能夠存取的特性。此外這個視窗還能夠以不同的顏色來區分function,procedure, constructor,destructor和property等,讓程式師能夠一目瞭然,非常的方便。在這裡也偷偷的告訴各位,下圖中的Code Insight是Delphi 5的Code Insight的改善版,Delphi 6也是使用這個Code Insight,而Kylix則搶先一步提供了這個更先進的Code Insight。
Kylix的Code Insight功能
當然Kylix的整合發展環境也允許客製化開發環境,從編輯器的功能,字形的顏色,大小,到Code Insight的反應速度,整合發展環境的提示功能等,程式師都可以客製化,以打造一個自己喜歡的工作環境。例如下面的兩個圖形即顯示了我在Kylix整合發展環境中自訂我自己喜歡的工作環境。
Kylix允許程式師完全的控制整合發展環境
Kylix允許程式師任意調整工作使用的編輯器
除此之外,除錯能力相信是許多程式師非常重視的開發功能,畢竟程式師有許多的時間是花在除錯應用程式之上。Kylix提供了全方位的除錯能力,不但能夠讓程式師設定中斷點,也能夠檢查任何的變數和物件的狀態。提供了程式師一個高效率的測試和除錯環境。例如下圖便是我在Kylix整合發展環境中執行並且除錯應用程式。從下圖中也可以看出Kylix提供的豐富圖形使用者介面功能,以及處理中文的能力。
程式師可以在Kylix整合發展環境中執行和除錯應用程式
當然由Kylix編譯出來的應用程式是原生的Linux應用程式,程式師可以立刻的在Linux圖形使用者介面中執行。例如下圖便是我使用Kylix建立的一個範例應用程式,並且獨立的執行在KDE環境之中。看到這一幕真是今人感動不已。藉由Kylix,Borland終於可以讓許多的程式師得以美夢成真。那就是Linux的程式師終於可以在Linux作業系統中舒服,而且有效率的開發應用系統了。
Kylix建立的Linux應用程式執行在KDE之中
CLX視覺化元件
在Linux 中最流行的的圖形使用者介面套件便屬KDE和GNOME了,許多的Linux程式師都渴望能夠撰寫一些能夠執行在這兩個圖形套件之中的應用程式,但是這可不是一件容易的事情。Linux的程式師必須先學習圖形套件的API,再撰寫數百行的程式碼,才能夠開發完成一個小小的圖形應用程式,就像數年前使用Window API撰寫Window應用程式一樣。不過除非你對於撰寫圖形套件API有特別的喜好,否則這種苦日子在Kylix出來之後就終於可以結束了。Kylix不但提供了上百個視覺化元件讓程式師可以使用拖曳的方式立刻開發圖形套件的應用程式,而且許多這些視覺化元件都提供了高等的功能和複雜的視覺化效果,讓Linux的程式師可以快速的便開發出可以應用於複雜的情形的圖形使用者介面應用程式,再也不用花上數天,甚至是數個禮拜的時間。下面的圖形就是Kylix提供的視覺化元件。舉凡一般的功能表,按鈕,串列盒元件,到圖形圖形,LED元件,計時元件,再到複雜的Tab控制元件和影像串列盒等元件,Kylix都提供給了程式師。比起Window平台上提供的視覺化功能實在是不遑多讓。有了這些元件之後,Linux程式師可以立刻以數倍的效率開發KDE/GNOME圖形套件下的應用程式。
Kylix提供了上百個視覺化的元件讓程式師開發圖形使用者介面應用程式
除了視覺化元件之外,Borland也花費了許多的苦心讓Linux平台的Kylix和Window平台的Delphi儘量提供一致的架構,以便讓程式師能夠在兩個不同的平台中都使用一樣的技術來開發應用系統。下圖便是Kylix和Delphi的架構比較圖,從圖中我們可以看到Kylix和Delphi的整合發展環境和應用程式在架構上幾乎是一樣的。除了編譯之後產生的機器碼平台不一樣,以及使用的圖形使用者介面層不一樣之外,Kylix和Delphi幾乎擁有相同的架構,以及技術。在這裡也先透露給各位,Delphi 6也將可以使用和Kylix一樣的CLX元件來開發圖形使用者應用程式,讓不同平台的圖形使用者應用程式能夠立刻的移植到另外一個平台。
Window平台的Delphi和Linux平台的Kylix
WebBroker開發Internet/Intranet的功能
要如何在Linux平台中開發Internet/Intranet應用系統?相信許多人使用的方法是純手工打造,直接使用Apache伺服器或是使用PHP開發Web應用程式。Kylix也允許Linux程式師使用純手工打造的方式來開發Web應用系統,不過Kylix提供了更為先進的視覺化元件允許程式師使用視覺化的方式來快速開發Web應用程式。此外這些Web應用程式完全可以使用Kylix的Object Pascal或是稍後推出的C/C++語言,而不需要使用其他的語言。Kylix把Delphi的WebBroker技術移植到Linux平台中,並且繼續的強化WebBroker技術,下圖便是Kylix提供的開發Web應用方案的視覺化元件。
Kylix提供了視覺化元件開發Internet/Intranet應用程式
WebBroker技術允許程式師使用一種技術(即WebBroker)就可以開發CGI/Apache DSO/ISAPI/NSAPI各種不同型態的Internet/Intranet應用程式。在Kylix中WebBroker允許程式師建立CGI和Apache DSO型態的應用程式,例如下圖便是Kylix Web精靈提供的功能。
Kylix可以幫助程式師建立CGI或是Apache DSO型態的Internet/Intranet應用程式
Kylix的WebBroker技術不但可以讓程式師建立一般的Web應用程式,程式師更可以結合稍後介紹的DBExpress元件來存取資料庫中的資料,再把資料和網頁內容結合以建立更為複雜的Internet/Intranet應用系統。這種開發方式不但比Linux中其他語言來得快速,而且Kylix藉由元件化的設計觀念因此可以讓程式師開發出更穩定的Internet/Intranet應用系統。下圖便是使用Kylix的WebBroker技術開發出來的Internet/Intranet應用程式,從圖中我們可以看到WebBroker果然可以開發出實際的Internet/Intranet應用程式。
由Kylix開發出來的Internet/Intranet應用程式
除了WebBroker技術之外,Borland更計劃在未來繼續為Kylix加入即將出現在Delphi 6的SiteExpress技術,讓程式師能夠更進一步的開發功能強勁的Web應用系統,並且將藉由SiteExpress逐步提供程式師一個開發Internet/Intranet應用系統First-Class的工作環境。
高效率的DBExpress元件
要如何在Linux中存取資料庫之中的資料並且能夠讓使用者處理這些資料呢?這相信是許多Linux程式師最感痛苦的地方。由於Linux並沒有一個標準的資料存取引擎,因此Linux程式師以往就只能夠使用ODBC API,或是使用Java藉由JDBC來存取資料。不過不管是使用ODBC或是JDBC API,這都是非常辛苦,也非常沒有生產力的工作。Borland在開發Kylix時,為了提供程式師一個Linux上高效率的資料存取方式,因此決定開發一套標準資料存取引擎,並且公佈這個引擎的介面,讓所有有興趣的程式師都能夠藉由這個標準來存取各式不同的資料。此外這個引擎也必須能夠跨平台,以便Linux和Window的程式師都能夠使用相同的技術來存取資料,這個開發出來的引擎便是DBExpress
DBExpress引擎的觀念是提供一層非常簡單,有效率的資料存取介面和資料來源引擎。藉由這個介面,程式師能夠存取各種不同的資料來源,卻只需要瞭解一個相同的介面即可,而在這個介面之後則是實作存取各種實際資料來源的引擎。Kylix的DataCLX元件組便藉由封裝這個介面的DBExpress元件組來存取並且展示各種資料來源。在Kylix 1.0版中,Borland提供了四個不同資料來源的引擎,這些引擎是存取MySQL,InterBase,DB2以及Oracle資料庫的引擎。此外Kylix也封裝了存取引擎介面的元件,藉由這些DBExpress元件,程式師可以使用視覺化的方式藉由特定的的DBExpress引擎存取到各種資料來源。下圖便是這組DBExpress元件,藉由這些DBExpress元件,程式師可以立刻的連結到MySQL,InterBase,DB2以及Oracle資料庫並且開始存取資料。
DBExpress元件組提供存取資料來源的能力
例如下圖便是啟動TSQLConnection元件,並且指定要連結到特定的InterBase資料庫,並且設定使用者名稱,密碼等必要的連結資訊。程式師只需要使用點選的方式,便可以以視覺化的方式存取資料來源,再也不用寫數百行的程式碼來做到相同的事情,大幅的提升生產力。
DBExpress的TSQLConnection元件允許程式師指定要連結的資料來源
DBExpress引擎為了提供最有效率的資料存取模式,因此使用了名稱Firehose的資料存取能力。這種方式的資料存取方式提供只單向的cursor能力,並且不提供任何緩衝區的機制,這和BDE/IDAPI提供大量緩衝區的機制非常的不一樣。由於Firehose只提供單向的cursor並且沒有提供緩衝區能力,因此一次只能提供一筆資料,而且不能向後存取資料,因此這種模型是存取資料速度最快的模型,沒有任何的負荷。不過一般的資料庫應用程式都必須來回的處理資料,那麼Firehose如何滿足這種需求?答案是Firehose無法滿足這種需求,不過Delphi的MIDAS卻是一個提供雙向cursor並且提供緩衝區能力的資料存取引擎。因此Kylix的DBExpress元件組便可以結合Firehose和MIDAS,這樣不但可以提供Firehose最快速存取資料的好處,也能夠讓程式師充分使用MIDAS提供的所有資料處理能力,因此可以讓程式師魚與熊掌兼而得之。事實上Delphi 6也將使用相同的架構提供Window程式師存取資料的能力。下圖便是DBExpress結合Firehose和MIDAS的功能示意圖。
DBExpress的核心是數個簡潔的介面(Interface)組成的,這些介面定義了如何跟特定的資料庫廠商介面溝通的ISQLDriver,如何連結資料庫的ISQLConnection,如何對資料來源下達命令的ISQLCommand,如何控制Cursor的ISQLCursor,以及存取資料庫MetaData的ISQLMetaData。這些介面定義的目標就是簡易,有效率,它們和Java的JDBC有非常類似的觀念,但是Borland又提供了MIDAS來巧妙的結合這些介面,因此提供了比JDBC高上數倍的生產力。
雖然DBExpress在Kylix中是第一個版本,但是DBExpress的執行速度卻已經和開發多年的BDE/IDAPI有著幾乎一樣的表現,絲毫不遜色,甚至有一些項目還比BDE/IDAPI表現得更好。例如下圖是DBExpress和BDE/IDAPI在連結InterBase的表現,從下面的資料中可以看出DBExpress還略勝一籌。
開啟資料庫
BDE
dbExpress
時間
1.832
1.467
此外我還寫了一些測試程式,讓DBExpress和BDE/IDAPI隨機產生資料,並且異動到資料庫之中。下面便是執行測試的結果,從這些數據中我們可以看出DBExpress和BDE/IDAPI幾乎是不分上下的。
新增資料筆數
DBExpress
BDE
10
0.052
0.036
100
0.334
0.342
1000
3.186
3.421
2000
6.514
6.732
10000
37.992
36.109
不過DBExpress更吸引人的地方是如果程式師知道如何微調它的話,那麼它幾乎可以使用閃電般的速度處理資料。例如下面的資料便是經過我調整之後的DBExpress和BDE/IDAPI比較處理資料的結果。從這些數據中我們可以看到調整之後的DBExpress幾乎以不先3倍的速度在處理資料,把BDE/IDAPI遠遠的拋在後面。看到這樣的結果,真不禁今人佩服Borland開發DBExpress的功力。
新增資料筆數
DBExpress
BDE
改良的DBExpress
10
0.052
0.036
0.047
100
0.334
0.342
0.206
1000
3.186
3.421
1.19
2000
6.514
6.732
2.686
10000
37.992
36.109
17.472
DBExpress不但提供了Linux平台上存取資料的標準,更提供了快速的處理能力,和跨平台的功能。光憑這幾點便足以讓DBExpress吸引程式師的目光。雖然在Kylix 1.0中只提供了存取MySQL,InterBase,DB2以及Oracle資料庫,但是Borland已經宣告在隨後會接著推出更多資料庫的引擎,例如Sybase,Informix等。而且這些引擎會在準備好之後立刻的提供Linux以及Window的程式師使用,而不需要再等待到下一個Kylix的版本。DBExpress的出現在Linux造成了非常有趣的現象,那就是由於在Linux上還沒有一套標準的資料存取引擎,因此Borland目前獨自開發的DBExpress引擎有可能憑藉其強大的功能和生產力,再搭配Kylix,有可能讓DBExpress成為Linux平台上的標準,事實上我感覺Borland正在Linux平台上盡其所長的在定義標準。除了資料存取引擎之外,Borland也正在和Third-Party定義類似Window平台上應用程式互相溝通的標準架構,再加入Borland有VisiBroker和EJB這兩套元件模型產品,Borland極有可能在Linux平台上重現其數年前是Window平台開發工具霸主的地位。DBExpress是如此的強大以及有趣,如果日後有的話,當然會為各位再進一步的介紹DBExpress各種的功能。
當然Kylix提供的功能絕不是短短的一篇文章能夠詳細說明的。Kylix提供的功能遠超過本文章到目前為止討論的。此外如果你是一個行家的話,那就更不能不知道Borland在Kylix背後付出的苦心。那就是Kylix的執行時期函式館 - RTL(Run Time Library)。
Kylix的執行時期函式館
為了在Linux作業系統中提供一個RAD工具,Borland的RTL在背後進做了許多的事情,同時也撰寫來數以千計的函式讓程式師呼叫使用之。更難得可貴的是,為了提供跨Linux和Window平台的能力。Kylix的RTL以及即將推出的Delphi 6 RTL更經過了大幅度的重新改寫,以便讓幾乎相同RTL能夠同時的執行在Linux和Window之中。這其中Borland付出的巨大資源可能會被許多程式師所忽略,不過行家才會瞭解RTL才是真正的幕後英雄。
結論
Kylix的推出不但再次的各世人證明Borland是全世界最頂尖的獨立工具開發廠商之外,也代表了Linux上的應用軟體也將會快速的篷勃發展起來。2001年第一季的Object Pascal版本的Kylix的主要目標市場是Linux上的應用程式開發工具市場,但是隨後準備推出的C/C++版本的Kylix則將會對Linux上的系統程式產生巨大的影響,因為連整個Linux的核心都將可以使用Kylix來建立。
Kylix雖然是一個RAD工具,但是它能夠涵蓋應用程式開發,系統程式開發,甚至是Linux作業系統核心開發的能力讓它足以成為Linux上的殺手級的軟體。因此如果各位讀者對於開發Linux應用程式有興趣,或是Linux上的玩家,都不能夠錯過Kylix。稍待日後Kylix再加入完整的元件開發模型,例如開發CORBA,或是藉由SOAP和EJB以及COM+整合,那麼Kylix將會是Linux打上打遍天下