TCL 语言的历史

人们经常问我,我是如何想到 Tcl 的,为什么它变得如此受欢迎。在这一页中,我试图重构导致 Tcl 和 Tk 的思维过程,并追溯 Tcl 和 Tk 在过去十年中的演变以及我从 Berkeley 到 Sun 再到 Scriptics 的道路。正如您将看到的,Tcl 的起步非常简陋。该系统的成功让我感到非常惊讶,只有回想起来,我才开始了解 Tcl 受欢迎的原因。

Tcl的诞生

Tcl 脚本语言源于我在 1980 年代初期在加州大学伯克利分校的集成电路设计工具方面的工作。我和我的学生已经为 IC 设计编写了几个交互式工具,例如 Magic 和 Crystal。每个工具都需要有一种命令语言(当时人们倾向于通过键入命令来调用工具;图形用户界面还没有广泛使用)。然而,我们的主要兴趣在于工具,而不是它们的命令语言。因此,我们没有在命令语言上投入太多精力,这些语言最终变得脆弱而古怪。此外,一个工具的语言无法转移到下一个工具,因此每个工具最终都会使用不同的错误命令语言。过了一会儿,这变得相当尴尬。

1987 年秋天,在 DEC 的西方研究实验室休假期间,我萌生了构建可嵌入命令语言的想法。这个想法是花费额外的精力来创建一个好的解释语言,并且进一步将它构建为一个可以在许多不同的应用程序中重用的库包。语言解释器将提供一组相对通用的工具,例如变量、控制结构和过程。每个使用该语言的应用程序都会将自己的功能作为扩展添加到该语言中,以便可以使用该语言来控制该应用程序。名称 Tcl(工具命令语言)源于此预期用途。

可嵌入性的概念是 Tcl 最独特的方面之一,它使我为该语言制定了以下三个总体目标:

  • 语言必须是可扩展的:每个应用程序必须很容易将自己的特性添加到语言的基本特性中,并且应用程序特定的特性应该看起来很自然,就好像它们从一开始就被设计到语言中一样。
  • 该语言必须非常简单和通用,以便它可以轻松地与许多不同的应用程序一起工作,并且不会限制应用程序可以提供的功能。
  • 由于大多数有趣的功能将来自应用程序,因此该语言的主要目的是将扩展集成或“粘合在一起”。因此,该语言必须具有良好的集成功能。

我在 1988 年初休假回来后开始研究 Tcl,并于 1988 年春天开始在图形文本编辑器中使用 Tcl 的第一个版本。此时我已经停止研究 IC 设计工具,所以 Tcl 的实验大多是学术性的:我不认为除了我自己之外的任何人都会对嵌入式命令语言感兴趣。

Tk的诞生

当时我的其他兴趣之一是图形用户界面。随着 GUI 在 1980 年代变得越来越流行,我注意到交互式软件的复杂性正在迅速上升。最有趣的新发展似乎需要大量投资的大型项目。作为一个资源有限的教授,这让我很担心:像我的研究小组这样的小团队就不可能构建创新的交互系统吗?

我得出的结论是,我们唯一的希望是通过使用可重用组件构建大型系统来减少资源需求。如果系统的大部分复杂性都在组件中,并且如果我们可以将组件从一个系统带到另一个系统,那么也许我们可以用小团队构建强大的大型系统。开发这些组件需要做很多工作,但这可以随着时间的推移逐渐完成,也许由几个较小的小组一起工作。

我还推断,除非有一种强大而灵活的机制来集成组件,否则基于组件的设计是行不通的。这些想法是在我开始考虑 Tcl 后不久产生的,我突然想到,像 Tcl 这样的可嵌入命令语言也可以用作集成组件的脚本语言。我决定通过创建一组 GUI 组件作为 Tcl 扩展并使用 Tcl 将组件组装成图形用户界面来测试这个理论。这个扩展变成了 Tk。

我在 1988 年底开始从事 Tk 的工作,但这是一个兼职项目,所以大约花了两年的时间才让 Tk 的功能足够有用。

早期分布

我不再记得我何时开始将 Tcl 提供给其他人的确切时间。到 1989 年,我在几个项目中使用了 Tcl,我相信我在伯克利工业联络会议上发表了关于 Tcl 的演讲,数百名来自工业界的人来到伯克利听取我们部门的研究。我相信这导致了一些感兴趣的公司邀请他们就 Tcl 进行会谈,并且那些会谈中的一些人询问他们是否可以拥有 Tcl 的副本。无论如何,我在 1989 年向早期采用者赠送了几份 Tcl。

1990 年 1 月,我在 USENIX 会议上发表了一篇关于 Tcl 的论文。数百人参加了这次演讲,引起了足够多的兴趣,许多人开始向我索要 Tcl 的副本。大约在这个时候,我决定在我们位于伯克利的 FTP 站点上免费提供 Tcl 源代码。一旦发生这种情况,Tcl 的使用就开始在 Internet 上通过口耳相传的方式传播。

美国国家标准与技术研究院的 Don Libes 是 USENIX 演讲的参与者之一。一段时间以来,Don 一直想构建一个程序来自动化交互式 Unix 应用程序,但该项目因需要一种好的命令语言而停滞不前,而 Don 没有时间构建一个。听完我的演讲后,Don 赶回家,下载了 Tcl,构建了一个名为 Expect 的精彩应用程序,并在下一次 USENIX 会议的提交截止日期前及时写了一篇论文。整个过程只用了三个星期。在 1990 年夏天发表论文后,Don 使 Expect 成为免费可用的,并立即在系统管理员中引起轰动。Expect 不仅是第一个广泛分布的 Tcl 应用程序,而且多年来它是最受欢迎的。

Tk 的基本特性在 1990 年末开始可用,我在 1991 年 1 月的 USENIX 会议和 X 会议上发表了一篇关于 Tk 的论文。在这些会议的几周内,我发布了 Tk 的第一个 Internet 版本。Tk 的第一个版本缺少几个重要的小部件(例如,它没有多行文本小部件),但到 1992 年夏天,我已经添加了一个文本小部件和一个强大的画布小部件。此时,Tk 的使用量开始急剧增加。

越来越受欢迎

在 1990 年代初期,Tcl 和 Tk 的使用量每年大约增长一个数量级,从 1989 年的少数用户到 1993 年的数万用户。这种增长有两个主要原因。

Tcl/Tk 使用增长的第一个原因是它提供了在 Unix 下创建图形用户界面的最简单方法(当时 Tcl 只在 Unix 系统上运行)。Tk 的 GUI 工具既简单又强大;有趣的应用程序可以完全用 Tcl 编写,根本不需要编写任何 C 代码。诸如 Motif 工具包之类的基于 C 的替代方案要复杂得多,但提供的功能较少。很快就清楚,在 Tcl 中创建 GUI 的工作量比 Motif 少 5-10 倍。事实证明,许多业内人士和我一样担心开发交互式应用程序的高成本。

Tcl 流行的第二个原因是它的可嵌入性。当我开始使用 Tcl 时,我认为除了我自己之外没有人会关心可嵌入的命令语言,但我错了。许多人,包括 Don Libes 和其他人,想要构建可编写脚本和可扩展的应用程序,但没有时间构建自己的语言。因为它是可嵌入的,所以 Tcl 为这些人提供了一个完美的解决方案。结果,Tcl 最终被用于从股票交易到科学可视化再到制造自动化的应用程序。

出于这种使用上的二分法,Tcl 用户社区每年或每两年都会发生一次讨论。许多 Tcl 用户断言 Tk 是他们使用 Tcl 的唯一原因。他们中的一些人甚至不喜欢 Tcl 语言并希望 Tk 可以与不同的脚本语言配合使用(事实上,这种情况已经发生过多次,包括 TkPerl 和 Python)。另一个团体认为 Tcl 是他们所关心的。他们将其用作嵌入式脚本语言,通常不使用 Tk,并且出于此目的喜欢该语言的属性。从某种意义上说,两组都是对的。

Tcl 社区

随着 Tcl 使用在 1990 年代初的增长,围绕该语言形成了一个社区,贡献了许多强大的扩展并为新用户提供支持。最早的两位先驱是 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 和 Larry Rowe 编写了 TclDP,它提供了套接字访问和其他分布式编程特性。还有其他的;向我未能认识的许多有价值的贡献者道歉。

其他形式的社区也在同一时期发展起来。我最初为 Tcl 用户之间的交流创建了一个邮件列表,但在几年内它变得如此庞大以至于难以处理。在 Tcl 社区的帮助下,创建了 comp.lang.tcl 新闻组作为邮件列表的替代品;从那时起,它为交换信息和讨论新的 Tcl 特性提供了一个极好的论坛。

1993 年,Larry Rowe 认识到社区中的人们需要亲自见面,因此他在那个夏天在伯克利组织了第一次 Tcl 研讨会。大约有 60 人参加,研讨会非常成功,成为一年一度的活动。1995 年,USENIX 协会提出帮助举办研讨会;从那时起,它已经发展成为一个成熟的会议,有数百名与会者和丰富的论文、教程和其他活动。Tcl 大会也是世界上最重要的上身装盛会之一:每年都会赠送 5-10 种不同的 T 恤设计,以表彰各种延伸、活动等。

在此期间,我大约每 6-12 个月发布一次 Tcl 和 Tk 的新版本。大多数新功能都是由 Tcl 社区的人提出的;在某些情况下,用户甚至为我提供了新功能的原型代码,然后我将其集成到核心软件中。通常,每个新的发布周期都会以讨论期开始,在讨论期中,我提出了新功能的候选列表,社区中的每个人都可以投票选出他们认为最重要的那些。我试图优先考虑得票最多的功能。

罢免票

随着时间的推移,Tcl 发布周期趋于与 Tcl 会议保持一致。一个新版本通常会在会议期间发布,我会在会议的一个会议上讨论下一个版本的新功能并获得反馈。我经常会要求即兴举手,看看观众对各种问题的感受,然后尝试粗略计算举了多少手(“十、二十、三十……看起来大约有 35 手对我来说”)。这些被称为“罢免票”,其准确性经常成为讨论的话题。有些人暗示我的计票不够客观......

太阳年

1994 年,我决定离开伯克利从事工业。我一直想把我职业生涯的一部分花在工业上,在学术界工作了 14 年后,时机似乎是正确的。在考虑了各种可能性后,我决定接受 Sun Microsystems 的报价。Sun 的首席技术官 Eric Sc​​hmidt 和 Sun Microsystems Laboratories 的主管 Bert Sutherland 为我提供了在 Sun Labs 建立团队并将 Tcl 发展为 Internet 通用脚本语言的机会。我一直认为,Tcl 最终需要围绕它建立有利可图的业务才能长期生存,而 Sun 的提议是将 Tcl 提升到一个新水平的绝佳机会。

我于 1994 年 5 月加入 Sun,并开始组建一个 Tcl 开发人员团队。在接下来的三年里,Sun Tcl 团队发展到十几个成员。到目前为止,几乎 Tcl 和 Tk 中的每一行代码都是我亲自编写的,但随着时间的推移,越来越多的 Tcl 代码责任转移到了 Sun Tcl 团队的其他成员身上。

Sun 提供的额外资源使我们能够对 Tcl 和 Tk 进行重大改进。Scott Stanton 和 Ray Johnson 将 Tcl 和 Tk 移植到 Windows 和 Macintosh 上,使 Tcl 成为出色的跨平台开发环境;今天,超过三分之二的 Tcl 下载是针对 Windows 的。Jacob Levy 和 Scott Stanton 彻底改造了 I/O 系统并添加了套接字支持,因此 Tcl 可以轻松地用于各种网络应用程序。Brian Lewis 为 Tcl 脚本构建了一个字节码编译器,它提供了高达 10 倍的加速。Jacob Levy 实施了 Safe-Tcl,这是一种强大的安全模型,允许安全地评估不受信任的脚本。Jacob Levy 和 Laurent Demailly 构建了一个 Tcl 插件,以便可以在 Web 浏览器中评估 Tcl 脚本,我们创建了 Jacl 和 TclBlend,这允许 Tcl 和 Java 紧密合作。我们添加了许多其他较小的改进,例如动态加载、命名空间、时间和日期支持、二进制 I/O、附加文件操作命令和改进的字体机制。

当我搬到 Sun 时,许多人担心 Tcl 会成为一种专有语言,并且在 comp.lang.tcl 新闻组上有几个“热烈的讨论”。幸运的是,作为我提议的一部分,Sun 同意核心 Tcl 和 Tk 库将继续以源代码形式自由分发,Sun 忠实地履行了这一协议。随着具有越来越多改进的新版本的出现,很明显 Sun 对 Tcl 的支持是一件了不起的事情,它使该语言能够以比其他方式更快的发展速度发展。这些担忧逐渐被对所有新功能的热情所取代。

在这些年中,Tcl 的使用量持续爆炸式增长。到 1997 年底,已有数十万 Tcl 开发人员;从 Sun FTP 站点下载 Tcl 的速度从 1995 年底的每周 2000 次增加到 1998 年初的每周 10000 次以上。我很清楚 Tcl 周围有巨大的商机。同样清楚的是,Tcl 社区有许多需求没有被开源 Tcl 开发满足。例如,Tcl 几乎没有开发工具,培训和支持等专业服务也只是零星提供。仍然需要编写许多重要的扩展,例如 ActiveX 和 CORBA 支持。

脚本学

1997 年底,我决定对 Tcl 来说最好的事情是从 Sun 中剥离出来,成立一家可以完全专注于 Tcl 的创业公司。1998 年 1 月,我与成为营销和销售副总裁的 Sarah Daniels 一起创立了 Scriptics。一个月之内,大约一半的 Sun Tcl 团队成员加入了我们并开始开发 TclPro,这是一组开发工具,将构成我们的第一个产品。TclPro 1.0 于 1998 年 9 月发货。它在市场上的成功推动了公司的大幅增长。

Scriptics 也从 Sun 手中接过了开发 Tcl 核心设施的角色,并继续像 Sun 一样自由地发布它们。1998 年,Scriptics 为 Tcl 8.0 发布了几个补丁版本,以修复错误并添加小的新功能,例如更好地支持 [incr Tcl] 扩展。1999 年 4 月,Scriptics 发布了它的第一个主要开源版本 Tcl/Tk 8.1。此版本添加了 Unicode 支持(用于国际化)、线程安全(用于多线程服务器应用程序)和 Henry Spencer 的全新正则表达式包,其中包括许多新功能以及 Unicode 支持。随着 8.1 版本的发布,Tcl 成为第一个拥有任务关键型企业应用程序所需的所有功能的脚本语言。

Tcl:屡获殊荣的软件

1998年春天,我得知Tcl获得两项大奖的好消息。第一个是 ACM 软件系统奖,每年颁发给“具有持久影响力的软件系统”。过去的获奖者包括 TCP/IP 协议、第一个电子表格、第一个关系数据库、万维网、Unix、PostScript 和 Smalltalk 等开创性系统。第二个奖项是 USENIX 软件工具用户组 (STUG) 奖,每年颁发一次,以表彰杰出的软件工具。

Tcl核心团队组建

此部分由 Jeff Hobbs 和其他人添加

Scriptics 于 2000 年 5 月更名为 Ajuba Solutions,这反映了该公司越来越关注一系列基于 Tcl 的 XML 技术。Ajuba 在一定程度上成为了自己成功创建基于 Tcl 的企业级 XML 服务器软件的受害者,并于 2000 年 10 月被 Interwoven 收购。然而,Interwoven 对该公司的开源方面不感兴趣,而是对 XML 和服务器感兴趣技术。

在 2000 年 7 月至 2000 年 10 月期间,建立了机制,以将日益普遍的核心开发的“所有权”从单一组织转变为与任何特定组织无关的更广泛的群体。Tcl核心团队成立,并确立了其基本的操作流程 。

Tcl 当然仍然受益于许多公司的参与。作为一个突出的例子,Jeff Hobbs,曾任 Scriptics/Ajuba 的 Tcl 大使,搬到 ActiveState(已经以其 Perl 产品和开发而闻名)领导他们的 Tcl 技术小组,在开源 Tcl 核心方面工作,以及推进许多在 Scriptics 开始的商业开发工具。

分类: 默认 标签: 应用程序 构建 工具 组件 扩展 语言 功能 发布于: 2022-04-22 10:15:13, 点击数: