天天看點

Tcl腳本的曆史

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

繼續閱讀