Tcl/Tk Insight: 发展历史

风行水上 @ 2009-07-04 11:03:15
标签:
    «目录»

    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的支持还没有编写出来。
    [编辑]

    Scriptics

    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有一天能成为最重要的整合平台。

    原文作者:John K. Ousterhout 中文译者:sunny_ring

    参考资料

    标签:

      分享到:
      comments powered by Disqus

      42/51ms