Tcl的历史(2009)

2021-01-15 20:05:30

人们经常问我,Tcl的想法是怎么产生的,为什么会变成Tcl 流行。在此页面中,我试图重新构造思想 导致Tcl和Tk并追踪Tcl和Tk演变的过程 从1987年的第一个构想到伯克利的发展, Sun和Scriptics于2000年组建Tcl核心团队。 Tcl的起步非常温和;的 该系统的成功令我感到非常惊讶,而且仅在 回顾我已经开始了解Tcl的原因 人气。

Tcl脚本语言源于我在设计工具方面的工作, 加州大学伯克利分校的集成电路 1980年代初期。我和我的学生写了几个互动工具 用于IC设计,例如Magic和Crystal。每个工具都需要有一个 命令语言(在那时,人们倾向于通过 键入命令;图形用户界面尚未广泛使用 采用)。但是,我们的主要兴趣在于工具,而不是工具 命令语言。因此,我们并没有在命令上投入很多精力 语言和语言最终变得虚弱而古怪。 此外,无法将一种工具的语言沿用到 接下来,每个工具最终都会使用不同的错误命令语言。 一段时间后,这变得令人厌烦和尴尬。

1987年秋天,在DEC的Western Research放假期间 实验室,我想到了建立嵌入式命令的想法 语言。这个想法是花额外的精力去创造一个好的 解释语言,并进一步将其构建为库包 可以在许多不同的应用程序中重复使用。语言 解释器将提供一组相对通用的工具,例如 作为变量,控制结构和过程。每个应用 使用该语言的语言会将其自身的功能添加到该语言中 扩展名,以便可以使用该语言来控制 应用。从中派生的名称Tcl(工具命令语言) 预期用途。

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

语言必须是可扩展的: 每个应用程序都将自己的功能添加到 语言,并且特定于应用程序的功能应自然出现, 好像它们从一开始就被设计成语言一样。 该语言必须非常简单且通用,这样它才能起作用 可以轻松地使用许多不同的应用程序,因此不会 限制应用程序可以提供的功能。 由于大多数有趣的功能将来自 应用程序,该语言的主要目的是集成或 "粘在一起"扩展名。因此,语言必须具有良好的 集成设施。

我从假期放假回来时就开始从事Tcl的工作。 1988年,我开始在图形文本中使用Tcl的第一个版本 1988年春季担任编辑。此时,我已经不再从事 我研究中的IC设计工具,因此使用Tcl进行的实验是 大多是学术性的:我不认为除了我自己以外的任何人都会 对嵌入式命令语言感兴趣。

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

我得出结论,我们唯一的希望就是减少资源 通过使用可重用组件构建大型系统来满足需求。如果 系统的大部分复杂性在于组件,如果我们 可以将组件从一个系统带到另一个系统,也许我们 可以与小型团队一起构建大型强大的系统。这需要 开发组件的工作量很大,但是可以做到这一点 随着时间的流逝,也许由几个较小的小组逐渐开展 一起。

我还认为基于组件的设计将无法正常工作,除非 有一个强大而灵活的机制可以整合 组件。这些想法是在我开始后不久发生的 考虑到Tcl,我想到一个可嵌入的命令 Tcl之类的语言也可能用作以下语言的脚本语言: 集成组件。我决定通过创建一个 一组GUI组件作为Tcl扩展,并使用Tcl组装 组件插入图形用户界面。此扩展名成为Tk。

我于1988年底开始从事Tk的工作,但这是一个兼职项目,因此 大约两年后,Tk才具备足够的功能 有用。

我不记得是什么时候开始将Tcl赠送给其他人的 人。到1989年,我在几个项目中都使用了Tcl, 相信我在伯克利工业大学期间就Tcl进行了演讲 联络会议,来自业界的数百人参加 伯克利了解我们部门的研究情况。我相信 这导致了邀请Tcl进行一些有兴趣的演讲 公司,那些会谈的人问他们是否 可能有Tcl的副本。无论如何,我都赠送了一些 Tcl于1989年采用。

1990年1月,我在USENIX上发表了有关Tcl的论文 会议。数百人参加了演讲, 引起了足够的兴趣,许多人开始向我索要副本 Tcl。大约在这个时候,我决定自由制作Tcl源代码 可在伯克利的FTP网站上找到。一旦发生这种情况,Tcl的用法 开始在互联网上口口相传。

参加USENIX演讲的人之一是 美国国家标准技术研究所。唐一直想要 需要一段时间来构建一个程序来自动化交互式Unix 应用程序,但该项目因需要一个良好的环境而停顿了 命令语言,而Don没有时间来构建一种。后 听完我的讲话,唐赶紧回家,下载了Tcl,构建了一个很棒的 名为Expect的应用程序,并及时为该应用程序撰写了一篇论文 下次USENIX大会的提交截止日期。这整个 整个过程只花了三个星期。 Don在之后免费提供了Expect 在1990年夏天展示他的论文,这很快就变成了 受到系统管理员的欢迎。期望不仅是第一个广泛 分布式Tcl应用程序,但多年来一直是最多的 流行。许多早期的Tcl用户通过使用了解了它 期望。

Tk的基本功能在1990年后期开始可用,我提出了一个 在USENIX会议和X会议上在Tk上发表的论文 1991年1月。在这些会议的几周内,我做了 Tk的第一个Internet版本。 Tk的第一个版本缺少几个 重要的小部件(例如,它没有多行文本小部件),但是 1992年夏天,我同时添加了文本小部件和功能强大的画布 小部件。此时,Tk的使用开始急剧增加。

Tcl和Tk的使用量每年以大约一个数量级的速度增长 1990年代初期,从1989年的几个用户到数万个 1993年。增长的两个主要原因。

Tcl / Tk使用量增长的第一个原因是它提供了 在Unix下创建图形用户界面的最简单方法(在 那时,Tcl仅在Unix系统上运行)。 Tk的GUI设施是 既非常简单又非常强大;有趣的应用可能是 完全用Tcl编写,完全不编写任何C代码。基于C Motif工具包之类的替代方案要复杂得多,但是 提供较少的功能。很快就知道GUI可以 与Motif相比,创建Tcl所需的精力少5-10倍。它也变成了 导致很多行业人士和我一样关心 开发交互式应用程序的高成本。

Tcl受欢迎的第二个原因是其可嵌入的特性。 当我开始使用Tcl时,我以为没有人会关心 关于一种可嵌入的命令语言,但是我错了。很多人, 包括Don Libes和其他人在内,都希望构建 可脚本化和可扩展,但没有时间来构建语言 自己的。因为它是可嵌入的,所以Tcl提供了一个完美的 这些人的解决方案。结果,Tcl最终被用于 应用范围从股票交易到科学可视化再到 制造自动化。

在这种使用上的二分法中,引起了每次讨论都反复出现的讨论。 Tcl用户社区中的第1-2年。许多Tcl用户断言Tk 这是他们使用Tcl的唯一原因。其中一些甚至不喜欢Tcl 语言,并希望Tk可以与其他脚本配合使用 语言(实际上,这已经发生了好几次,包括TkPerl 和Python)。一个不同的小组认为,Tcl是他们所关心的全部 关于;他们将其用作嵌入式脚本语言,通常没有 Tk,并为此喜欢语言的属性。在某种意义上 两组都是正确的。

随着1990年代初期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和Larry Rowe撰写了TclDP,其中 提供套接字访问和其他分布式编程功能。 还有其他的。向许多有价值的贡献者致歉 我没认识的人。

同期还发展了其他形式的社区。我最初 创建了一个邮件列表,用于在Tcl用户之间进行通信,但在 几年,它变得如此庞大以至于笨拙。在 TCL社区comp.lang.tcl新闻组已创建为替代 用于邮件列表;它为 交流信息并讨论新的Tcl功能。

1993年,拉里·罗威(Larry Rowe)意识到社区中的人们需要 亲自见面,所以他在伯克利组织了第一次Tcl研讨会 那年夏天。大约有60人参加了研讨会, 成功地成为一年一度的盛会。 1995年的USENIX 协会提供了帮助举办研讨会的活动,它为几个 年份;车间很快 演变成拥有数百名与会者的正式会议 以及丰富的论文,教程和其他活动计划。 Tcl 会议也成为世界上最重要的上半身赛事之一 穿着:看到5-10种不同的T恤设计并不少见 每年都去认识各种扩展,事件等。

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

与其他开源项目相比,Tcl受到更严格的控制 比大多数。我想保持两种架构的清洁度 和Tcl的实现,所以我对哪些扩展很挑剔 我包含在核心中,并且倾向于对贡献的内容进行大量重写 代码发布到内核中。不幸的是,这放慢了速度 Tcl中功能的增加:人们总是可以单独分发扩展,但是其他人很难使用这样的扩展 扩展名,但没有正式的批准印章。在 回想起来,我本来应该对捆绑更加混杂 东西放到核心版本中,即使它违反了我的 清洁原则。

随着时间的流逝,Tcl释放周期倾向于与Tcl一致 会议。新版本通常会在 会议,我会用一届会议来 讨论下一个版本的新功能并获得反馈。我会 经常要求即席表演,以了解观众的感受 关于各种问题,然后尝试对如何 举起了许多手(十,二十,三十... 给我的手)。这些被称为" Ouster-votes"。和他们的 准确性通常是讨论的话题。有些人有 暗示我的计票不完全是客观的....

1994年,我决定离开伯克利去工业。我一直想要 在我的行业中度过了一部分职业,并在学术界工作了14年 时间似乎合适。在考虑了各种可能性之后, 我决定接受Sun Microsystems的报价。埃里克·施密特(Eric Sc​​hmidt), Sun的首席技术官和Bert Sutherland,Sun的董事 Microsystems Laboratories,让我有机会在 Sun Labs将Tcl演变为通用的脚本语言, 互联网。我一直觉得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成为杰出的 跨平台开发环境; Windows很快成为 最常见的平台。雅各布·利维和斯科特·斯坦顿 全面检查了I / O系统并增加了套接字支持,以便Tcl可以 轻松用于各种网络应用程序。布赖恩·刘易斯 为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开发人员; Tcl的比率 Sun FTP站点上的每周下载量从2000起增加 1995年底,到1998年初,每周超过10000。 相信周围有有趣的商机 Tcl。同样很明显,Tcl社区有很多需求, 开源Tcl开发并没有满足。例如, Tcl几乎没有开发工具, 诸如培训和支持之类的服务只是零星的 可用。许多重要的扩展,例如ActiveX和CORBA 支持,仍然需要编写。

同时,很明显,Sun需要集中精力 Java的语言布道,不久之后发布 我到达Sun并大受欢迎。虽然Java和Tcl 是非常不同的语言,用于非常不同的目的, Sun很难向他们两个人传福音 同时。我得出的结论是,总体而言,Java提供了 与Tcl相比,Sun可获得更多收益。

在1997年下半年,我决定对Tcl最好的办法是将 Sun并成立了一家可以完全专注于Tcl的初创公司。在一月 1998年,我与Sarah Daniels创立了Scriptics, 成为市场和销售副总裁。一个月内约有一半 Sun Tcl团队已加入我们,并开始开发TclPro, 开发工具,它将构成我们的首个产品。 TclPro 1.0 1998年9月发货。

脚本还从Sun接管了开发 Tcl核心设施,并且继续免费发布它们 像Sun一样。在1998年,Scriptics为 Tcl 8.0修复错误并添加了一些小的新功能,例如更好的功能 支持[incr Tcl]扩展名。 1999年4月,Scriptics 推出了第一个主要的开源版本Tcl / Tk 8.1。这个版本 添加了Unicode支持(用于国际化),线程安全(用于 多线程服务器应用程序)和全新的正则表达式 Henry Spencer的软件包,其中包括许多新功能以及 Unicode支持。

1998年春天,我了解到Tcl赢得了一个好消息 两个主要奖项。首先是获得ACM软件系统奖 每年都具有持久影响力的软件系统。 该奖项的过往获奖者包括TCP / IP等开创性系统 协议,第一个电子表格,第一个关系数据库, 万维网,Unix,PostScript和Smalltalk。第二个奖项是 每年颁发的USENIX软件工具用户组(STUG)奖 对杰出软件工具的认可。

Scriptics的公司战略分为两个阶段。在第一 该公司将为Tcl创建开发工具。在里面 第二阶段,该公司将开发有趣的应用程序 在Tcl。在1999年,我们决定该应用程序将基于XML 企业对企业服务器(当时是热门区域)。第一个版本 该产品的首批产品于2000年初面市。 很明显,网络泡沫即将结束。此外, 我们的B2B服务器比竞争对手和 B2B市场已开始通过合并合并。到年中,我们决定 最好合并公司(已更名为Ajuba 届时解决方案)合并成更大的公司。 Interwoven收购了 Ajuba解决方案于2000年10月发布。

Interwoven对Tcl不感兴趣(它购买了Ajuba Solutions 其服务器和XML技术以及其工程团队),因此 不再继续支持Tcl的开源版本。 我有 猜想这很可能会发生,因此在 ......