(原翻譯不詳)
人們常常問我設(shè)計Tcl語言的目的是什么,為什么它會變得這么受歡迎。本文將重溫一下當(dāng)年產(chǎn)生設(shè)計Tcl和Tk的想法,回顧Tcl和Tk在過去十年間發(fā)展的過程,以及我從伯克利到sun到scriptics的人生經(jīng)歷。你將看到,起初Tcl是很簡陋的;這個系統(tǒng)的成功令我很吃驚,其實我也是通過回顧它的歷史才開始明白Tcl流行的原因是什么。
Tcl的誕生
Tcl腳本誕生于80年代初,我在加州大學(xué)伯克利分校的項目“集成電路設(shè)計工具”的研究。那時,我和我的學(xué)生已經(jīng)寫出了許多用于IC設(shè)計的交互工具,如Magic和Crystal。每個工具都需要一個命令語言(在那個年代,人們需要鍵入命令才能使用這些工具;圖形用戶界面還沒有被廣泛的使用)。不過我們的研究重點是工具而不是它們的命令語言,所以我們沒有在命令語言上投入太多的精力,結(jié)果語言方面變得很薄弱。更糟的是,每個工具的語言之間是互不相通的。這樣一來,經(jīng)過一段時間后,就變得相當(dāng)棘手。
1987年秋,在DEC的西部研究所的假期中,我有了設(shè)計一種嵌入式命令語言的想法。這個想法就是花費(fèi)一些精力去創(chuàng)建一種優(yōu)秀的解釋型語言,然后進(jìn)一步把它做成一個能夠在許多不同的應(yīng)用程序中重復(fù)利用的庫包(library package),語言的解釋器要提供一系列相對通用的工具,如變量,控制結(jié)構(gòu),過程。每個使用這個語言的程序都可以以擴(kuò)展的形式把自己的功能加到語言中,達(dá)到用語言來控制程序的目的。Tcl的全稱“工具命令語言”正說明了這一點。
可嵌入性是Tcl的特點之一,為了實現(xiàn)這個想法,我準(zhǔn)備在以下三個方面進(jìn)行著手:
★這個語言必須是可擴(kuò)展的:它應(yīng)該能夠讓每個應(yīng)用程序可以很方便的把自己的功能加到語言的基本功能中,并且程序的特定功能必須使用起來非常自然,就好像一開始就是為這個語言設(shè)計的一樣。
★這個語言必須非常的簡單通用,能很方便的與許多不同的應(yīng)用程序配合工作,而不會限制應(yīng)用程序的功能。
★由于大部分出色的功能都來自于應(yīng)用程序,所以這個語言的首要目的就是將擴(kuò)展部件整合或“膠合”在一起,因此它必須要有很好的整合性能。
1988年初,假期一結(jié)束,我就開始著手設(shè)計Tcl的工作了。1988年春天的時候,我開始在一個圖形化的文本編輯器中使用第一個版本的Tcl。在我停止IC設(shè)計工具的相關(guān)研究之前,Tcl的實驗還大部分停留在理論階段。當(dāng)時我想除了我自己沒有人會對這個嵌入式的語言感興趣。
Tk的誕生
那時,我對圖形用戶界面也很感興趣。80年代圖形用戶界面逐漸流行的時候,我注意到交互式軟件的復(fù)雜性正在迅速的增長,最引人注目的發(fā)展趨勢看起來好像是對巨額投資的龐大項目的需求在不斷增加。作為一名教授,實驗條件不是很充足,這使我開始擔(dān)心像我們這樣類似小團(tuán)隊的研究所是不是就不可能再做出交互式的系統(tǒng)了。
我得出的結(jié)論是,我們的唯一希望就是減少創(chuàng)建大型系統(tǒng)時除可重復(fù)利用的部件以外的部分對資源的需求,如果一個系統(tǒng)最復(fù)雜的地方是用部件來完成的,而且可以把部件從一個系統(tǒng)移植到另一個系統(tǒng),也許我們就可以以小團(tuán)隊的規(guī)模來創(chuàng)建強(qiáng)大的系統(tǒng),這要求花費(fèi)一些精力來開發(fā)這些部件。不過如果有幾個小組協(xié)同工作的話,完成它只是一個時間的問題。
我也在考慮這樣一個問題,要想使基于組建的設(shè)計能夠?qū)崿F(xiàn),需要有一個強(qiáng)大的有彈性的控件整合工具。這些想法在我一開始考慮做Tcl的時候就產(chǎn)生了,我覺得像Tcl這樣的嵌入式命令語言作為腳本語言對整合部件會很有用。我決定創(chuàng)建一些作為Tcl擴(kuò)展的GUI部件并且使用Tcl來把這些部件整合到圖形用戶界面中,借此實踐一下這個理論。這個擴(kuò)展就成為了Tk。
我1988年末開始做Tk。這只是一個兼職的項目,所以用了兩年的時間才使Tk具有了一些實用的功能。
早期的集成套件
我已經(jīng)記不清是什么時候開始讓人們使用Tcl了,我記得我在伯克利“產(chǎn)學(xué)研大會”上作了一個關(guān)于Tcl的演講,來自工業(yè)界的幾百名與會者聽了我們系的這個研究成果。我還被一些對此感興趣的公司邀請去做演講。在這幾次演講期間,一些人向我要Tcl的拷貝,于是在1989年,這一部分人最早接觸到了Tcl。
1990年1月,我在USENIX會議上宣讀了一篇關(guān)于Tcl的論文,聽眾有幾百人。他們對Tcl的興趣越來越濃厚,許多人開始向我要Tcl。大約在那個時候,我決定在伯克利的FTP站點上免費(fèi)發(fā)放Tcl的源代碼。從此,通過因特網(wǎng),Tcl的用戶開始與日俱增。
我在USENIX會議中作演講的聽眾中有一個人叫Don Libes。他來自國家標(biāo)準(zhǔn)和技術(shù)研究院。Don一直想編寫一個程序,這個程序能夠自動的操作交互的UNIX應(yīng)用程序,但這需要一種優(yōu)秀的命令語言,而Don沒有時間自己編寫這樣的一個語言。于是這個項目只能擱置在一邊。聽了我的演講后,Don立即跑回家,下載了Tcl,編寫了一個叫做Expect的非常優(yōu)秀的程序,并且趕在下一次USENIX會議提交論文的最后期限之前完成了一篇關(guān)于它的論文。整個過程只用了三個星期。Don在1990年夏發(fā)表了他的論文之后,把Expect免費(fèi)的提供給人們使用,于是在系統(tǒng)管理員界立即引起了一場不小的震動。Expect不僅是第一個廣泛發(fā)布的Tcl應(yīng)用程序,而且多年來一直也是最流行的。許多早期的Tcl用戶都是通過使用Expect來了解到Tcl的。
在1990年末,Tk的基本功能變得很實用了,1991年1月,我同時在USENIX會議和X應(yīng)用程序開發(fā)者大會上發(fā)表了一篇關(guān)于Tk的論文,這兩次會議期間的幾個星期中,我在因特網(wǎng)上發(fā)布了第一個Tk版本。Tk的第一版缺少許多重要的構(gòu)件(比如,沒有多行文本框構(gòu)件),不過到了1992年夏天的時候,我就把文本框構(gòu)件和一個強(qiáng)大的畫布構(gòu)件加了進(jìn)去。這時Tk的用戶開始迅速增長。
開始變得受歡迎
Tcl/Tk的用戶從1990年初開始每年都在迅速增加。從1989年的幾個使用者到1993年的成百上千的使用者,導(dǎo)致這種迅速增長的原因主要有兩個方面:
Tcl/Tk使用者增加的第一個原因是:它提供了最簡單的在UNIX(那時Tcl只能在UNIX系統(tǒng)下運(yùn)行)下開發(fā)圖形用戶界面的方法。Tk的GUI工具既簡單又強(qiáng)大;所編寫出的出色的應(yīng)用程序可以完全由Tcl編寫而不用寫一句C代碼,換成基于C的工具來開發(fā)比如Motif工具則要變得復(fù)雜得多,而且功能也比較少。人們很快就發(fā)現(xiàn)用Tcl來開發(fā)GUI比起用Motif來可以少投入5到10倍的精力,這也證明了在工業(yè)界有許多人和我一樣很關(guān)心開發(fā)交互式應(yīng)用程序的高開支問題。
Tcl流行的第二個原因是它的可嵌入特性。在我開始做Tcl的時候,我猜想除了我沒有人會想要可嵌入式的命令語言,但是我錯了。包括Don Libes在內(nèi)的許多人都想要編寫腳本式的可擴(kuò)展的應(yīng)用程序,但卻沒有時間自己來創(chuàng)建這么一種語言。正因為可嵌入式的特性,Tcl為他們提供了一個完美的解決方案。結(jié)果Tcl一推出就被廣泛的用于股票交易,科學(xué)觀測,生產(chǎn)自動化等許多領(lǐng)域。
在Tcl用戶之間每一兩年都會有對Tcl和Tk的使用的討論,許多Tcl的使用者認(rèn)為Tk是他們使用Tcl的唯一原因,他們中的一些甚至不喜歡Tcl語言,而希望Tk能夠和其他的腳本語言結(jié)合。(實際上,已經(jīng)有人這么做了,如Tkperl和Python),而另一部分人認(rèn)為Tcl正是他們的需求所在,他們把它作為可嵌入式的腳本語言來使用,而常常不去使用Tk。由于Tcl能夠滿足他們的特殊目的,所以他們很喜歡Tcl,從某種意義上說,這兩部分人都沒錯。
Tcl社區(qū)
90年代初隨著Tcl使用者的增加,人們在網(wǎng)上建立了一個關(guān)于這門語言的社區(qū),目的是讓大家發(fā)布功能強(qiáng)大的擴(kuò)展和為新的用戶提供幫助。Mark Diekhans和Karl Lehenbauer是早期開創(chuàng)者中的兩位,。他們編寫了Tclx,最早可用的Tcl擴(kuò)展之一,Tclx提供了對文件的訪問,時間和日期控制,以及許多其它有用的工具。隨著時間的推移,Tclx的功能被證明是非常重要的,以至于其中的許多功能已經(jīng)被整合到了Tcl的基本功能中。
許多早期的Tcl開創(chuàng)者編寫了大量高質(zhì)量的擴(kuò)展并使這些擴(kuò)展能夠免費(fèi)的使用,比如Michael Mclennan編寫的[incr Tcl],為Tcl提供了面向?qū)ο蟮墓δ?。George Howlett編寫的BLT為Tk加進(jìn)了許多重要的構(gòu)件。Tom Poindexter編寫的Sybtcl和Oratcl,提供了對主流數(shù)據(jù)庫的訪問。Brian Smith和Lary Rowe編寫的TclDP提供了Socket接口及一些有用的編程功能。還有許多貢獻(xiàn)者我已經(jīng)記不太清了,在此我只能表示歉意。
社區(qū)中其他的論壇在這個時期也在發(fā)展。我起初為社區(qū)中的用戶建立了一個郵件列表,但是短短幾年里,這個列表變得相當(dāng)冗長,以至于后來無法控制。在社區(qū)的幫助下,我們建立了comp.lang.tcl新聞組來代替原來的郵件列表,從此,它就成為了交換信息和討論Tcl新功能的絕佳地點。
1993年Larry Rowe意識到社區(qū)中的人們需要面對面的交流。于是他在伯克利組織了第一屆Tcl專題討論會,大約有60人參加。由于這次大會開得非常成功,所以我們決定把它定為一年一屆。1995年,USENIX協(xié)會開始對這個討論會進(jìn)行資助。從此,它就變?yōu)榱艘粋€有幾百人參加的,發(fā)表大量論文、教程,開展眾多活動的全方位的大會。Tcl大會也是世界上最大的參加者上身著裝統(tǒng)一的大會之一,每年要分發(fā)5-10種不同設(shè)計圖案的短袖衫來區(qū)別不同的擴(kuò)展和活動。
在這段時間里,我大約每6到10個月發(fā)布一次Tcl/Tk的新版本。大部分新的功能都是采用的Tcl社區(qū)的建議。有時,使用者甚至直接給我提供新功能的源代碼,然后,我再把它加到軟件的核心代碼中。通常,每次新版本發(fā)布前都有一個討論的過程,我提供一份新功能的候選列表,然后在社區(qū)中由大家投票選出他們認(rèn)為最重要的功能。我盡可能優(yōu)先考慮得票最多的功能。
Ouster的得票
后來Tcl的發(fā)布周期就慢慢趨向于和Tcl大會保持一致。新版本通常在大會期間發(fā)布,這樣我們就可以在大會中拿出一段時間來組織討論下一個版本要加入的新功能,然后得到反饋信息。我經(jīng)常讓與會者即興的舉手表決,統(tǒng)計一下聽眾對一些問題的想法,然后對舉手的人數(shù)做個大概的統(tǒng)計(“10,20,30,…,看起來我大約得了35票”)這些票數(shù)被大家稱之為“ouster的得票”,得票數(shù)也常常被大家當(dāng)作話題來討論。不過一些人開玩笑說我的得票數(shù)一點也不客觀…
在sun公司的日子
1994年我決定離開伯克利投身工業(yè)界。過去我就一只想在工業(yè)界做兼職工作,在學(xué)術(shù)界干了14年,現(xiàn)在我看時機(jī)已經(jīng)成熟了。在考慮了多方面的因素后,我決定接受sun公司的邀請。Eric Schmidt,sun公司的首席技術(shù)官和Bert Sutherland,sun實驗室的領(lǐng)導(dǎo)者,給我提供了一個機(jī)會,在sun實驗室創(chuàng)立一個小組,將Tcl開發(fā)成因特網(wǎng)上通用的腳本語言。
我一直覺得Tcl最終需要進(jìn)行商業(yè)贏利才能在長遠(yuǎn)的開發(fā)中生存下來,sun公司為Tcl向更高性能的發(fā)展提供了很好的機(jī)會。我在1994年5月加入sun公司,然后組建了一個Tcl開發(fā)小組,在以后的3年里,sun的Tcl小組成員發(fā)展到了12人,以前基本上Tcl/tk的每一行代碼都有我親自來編寫,但是從那以后,編寫Tcl代碼的工作就由Tcl小組來完成了。
Sun公司提供的許多幫助使我們對Tcl/Tk的性能進(jìn)行了大規(guī)模的提升。Scott Stanton 和Ray Johnson將Tcl/Tk輸出到了Windows和Macintosh上,于是Tcl就成了一個跨平臺的開發(fā)環(huán)境;當(dāng)前,超過2/3下載Tcl的用戶是用于Windows開發(fā)。Jacob Levy和Scott Stanton仔細(xì)測試了輸入輸出系統(tǒng)并加進(jìn)了對Socket的支持,于是Tcl可以被廣泛的用于網(wǎng)絡(luò)應(yīng)用程序。Brian Lewis為Tcl腳本創(chuàng)建了一個二進(jìn)制編譯器,這使它的運(yùn)行速度提升了10倍。Jacob Levy開發(fā)了Safe-Tcl,一個強(qiáng)大的安全模塊,使非信任的腳本能更安全的執(zhí)行。Jacob Levy和Laurent Demailly創(chuàng)建了一個Tcl插件,使Tcl腳本可以在web瀏覽器中運(yùn)行,我們創(chuàng)建了Jacl和TclBlend,使Tcl和Java可以緊密的工作在一起。我們還進(jìn)行了一些小的改進(jìn),如動態(tài)加載,名稱空間,時間和日期支持,二進(jìn)制I/O,額外的文件操作命令,和一個改進(jìn)的字體機(jī)制。
當(dāng)我加盟sun后,許多人擔(dān)心Tcl是否會變成一個收費(fèi)的語言,當(dāng)時在comp.lang.tcl上出現(xiàn)了許多熱烈的討論。幸運(yùn)的是,sun公司同意在源代碼論壇中繼續(xù)發(fā)放Tcl/Tk的核心代碼庫,并且sun一直信守諾言。隨著性能不斷提升的新版本的出現(xiàn),起初那些擔(dān)心逐漸被開發(fā)新功能的熱情所代替。
在那些年,Tcl的使用者繼續(xù)不斷增長。到1997年已經(jīng)有了成千上萬的Tcl開發(fā)者;sun公司的FTP站點的Tcl下載率由1995年底的2000人每星期上升到1998年初的超過10000人每星期。很明顯,Tcl對我是一個巨大的商業(yè)機(jī)會。開放源代碼的發(fā)展?jié)M足不了Tcl社區(qū)中的許多要求。比如,幾乎沒有開發(fā)Tcl的工具,像培訓(xùn)和技術(shù)支持這樣的專業(yè)服務(wù)也僅僅是零散進(jìn)行的。許多重要的擴(kuò)展,如對ActiveX和CORBA的支持還沒有編寫出來。
Ajuba
1997年底,為了更好的發(fā)展Tcl,我決定離開sun創(chuàng)建一個完全關(guān)注于Tcl的公司。1998年1月,我和Sarah Daniels創(chuàng)建了Scriptics(即今天的 Tcl),由Sarah負(fù)責(zé)市場營銷。一個月內(nèi),sun公司Tcl小組的約一半成員都跳槽加入了我們公司,我們開始開發(fā)TclPro,一套包括我們最初產(chǎn)品的開發(fā)工具。TclPro 1.0 于1998年9月完成。它在市場上的成功為Ajuba的出現(xiàn)提供了強(qiáng)有力的支持。1999年底我們準(zhǔn)備再雇傭50名員工。
Tcl公司已經(jīng)代替了sun公司在開發(fā)Tcl核心工具上的角色,并且它將繼續(xù)像sun公司那樣免費(fèi)的發(fā)布它。1998年,Tcl公司為Tcl8.0做了一些改進(jìn),修復(fù)了一些錯誤并加進(jìn)了一些小的功能,比如可以更好的支持[Incr Tcl]擴(kuò)展。1999年4月,Tcl發(fā)布了第一個最重要的開放源碼的版本,Tcl/Tk8.1,這個版本加進(jìn)了對Unicode的支持(國際化),線性安全機(jī)制(用于多線程服務(wù)程序)和一個由Henry Spencer開發(fā)的全新的規(guī)則表達(dá)式包,還有一些類似對Unicode提供支持這樣優(yōu)秀的新功能。Tcl成為第一個滿足企業(yè)中關(guān)鍵程序各方面要求的腳本語言。
今后,Tcl將會繼續(xù)開發(fā)開放源代碼的和進(jìn)行商業(yè)贏利的兩種產(chǎn)品,在這種理念下,我們會不斷的提升開放源代碼的核心部件的性能,改進(jìn)產(chǎn)品的不足,為免費(fèi)的和商品化的兩種開發(fā)工具提供資金支持,我們要做就要做到最好。Tcl社區(qū)將一如既往的在Tcl的發(fā)展中扮演重要的角色。
ActiveState
這一部分的作者是Jeff Hobbs
Ajuba創(chuàng)建了基于Tcl的企業(yè)版的XML類服務(wù)應(yīng)用程序,后來它被Interwoven于2000年10月收購。不過Interwoven對開放源碼的軟件不感興趣,他們只關(guān)注XML和服務(wù)器的相關(guān)產(chǎn)品。Jeff Hobbs,前Tcl Scriptics/Tcl的代理人,跳槽到Active State(以發(fā)布Perl的產(chǎn)品和開發(fā)工具聞名)來領(lǐng)導(dǎo)他們的Tcl技術(shù)部。
ActiveState現(xiàn)在提供用于Tcl開發(fā)的一系列產(chǎn)品和服務(wù),另外,它也是不斷深入開發(fā)開放源代碼內(nèi)核的非常活躍的參與者。
Tcl:屢獲大獎的軟件
1998年春, 我聽到了幾個令人振奮的消息,Tcl獲得了兩項重要的獎項。一個是ACM軟件系統(tǒng)大獎,獎給每年的“具有長遠(yuǎn)影響的軟件系統(tǒng)”。以往這個獎項的獲得者包括許多重要的系統(tǒng)如TCP/IP協(xié)議,第一個線性表,第一個關(guān)系數(shù)據(jù)庫,因特網(wǎng),Unix系統(tǒng),PostScript,Smalltalk。另一個是USENIX軟件工具用戶組織(STUG)大獎,這個獎項獎給年度優(yōu)秀的軟件工具。
未來的版本
整合性的程序?qū)^續(xù)發(fā)展下去,因為越來越多的企業(yè)發(fā)現(xiàn)他們的競爭力取決于能否使他們的計算機(jī)系統(tǒng)有效的協(xié)同工作。Tcl為建立這些整合程序提供了非常強(qiáng)大的平臺。今后,當(dāng)那些首席技術(shù)官們在設(shè)計他們將來的信息系統(tǒng)結(jié)構(gòu)的時候,我相信對整合性的平臺的重視,就會像現(xiàn)在對操作系統(tǒng)平臺和數(shù)據(jù)庫平臺的重視一樣,會放在首要考慮的位置。我希望Tcl有一天能成為最重要的整合平臺。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1133171