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有一天能成爲最重要的整合平臺。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章