Tcl/Tk 烹调书 - 家务


目的

本节带给你一些信息,从那里得到 Tcl/Tk、它们的扩展、本书中的例子的源代码和我们认为在动手编译和安装 Tcl/Tk 时值得注意的一些其他信息。
 

译者按:

本书发布之后,相关网站有所变动。当前的 Tcl/Tk 主站点是:

Tcl Developer Site http://tcl.activestate.com/ (以前是 http://dev.scriptics.com/)。

 

从那里获得 Tcl,Tk 和扩展

Tcl 和 Tk 发布的主要站点是

ftp://ftp.cs.berkeley.edu/ucb/tcl

但是连同许多扩展的发布要从镜像站点获取

ftp://ftp.src.doc.ic.ac.uk/packages/tcl/ and ftp://ftp.funet.fi/pub/languages/tcl/
 

[我们发现后面的站点更加新近一些]。

上面的形式是统一资源定位(URL),可以在 WWW 浏览器象 mosaic 或 netscape 中使用。将出现一个目录列表,接着你就可以取回文件了。

你也可以使用 FTP (File Transfer Protocol),并匿名登录到 "ftp://"后面的名字的主机(例如 ftp.funet.fi),给出你的电子邮件地址作为口令,接着从各自主机名后面的路径名指出的目录中取回文件(例如 /pub/languages/tcl)。

你可以使用 archie 服务来得到一系列其他匿名 FTP 服务。向 archie@archie.sura.net 发送 Help  消息来得到任何使用这项服务的信息。

如果你没有直接的 FTP 访问,请向 ftpmail@decwrl.dec.com 发送 Help 消息来获得指导。

在 WWW 上的 Tcl 和 Tk

本书的读者可能有兴趣访问 http://www.geog.le.ac.uk/argus/ 和 http://web.cs.ualberta.ca/~wade/Auto/Tcl.html。

HTML & Latex 文档

Tcl/Tk 的 HTML 格式的手册页的压缩的 tar 文件可从 ftp://ftp.funet.fi/pub/languages/tcl/contrib/docs 获得。Tcl/Tk 参考指南(latex 文档)可从相同地方取回。
 

新闻组

comp.lang.tcl 是交换 Tcl/Tk 信息的活跃的论坛。这里定期发布关于 Tcl/Tk 和其他的扩展的公告。
 

扩展和捐献的软件

注意: 请参照发布软件中随同的 README 文档来得到原创作者和版权的信息。致谢也在那里。 

有很多有用的并有良好的文档的 Tcl/Tk 扩展,在这里列举出它们是不实际的(不干涉使用它们)。象 XF 这样的有内在的危险性,它们中的一些可能出于各种原因而未被维护。许多捐献的模块以不同的途径致力于相同的要点(例如 hush、itcl、object-tcl 都提供 C++ 绑定)。在象这样的短期项目中这是很难处理的,正如游戏的名字,是在投入之前等待和观望。为此,我们选择了 BLT-1.9, Expect-5.19, itcl2.0 作为本书使用的三个 Tcl/Tk 扩展(除了一个前些时候的 fileselectionbox),用来向用户展示如何使用他们。

 
译者按:当前的版本是 BLT 2.4u、Expect 5.32、itcl 3.2。

BLT 是 Tk 的一个扩展库,包括增补的象多功能的 blt-graph 这样的组件,和象 drag-and-drop 这样的命令。Expect 是一个基于 Tcl 的应用,用于自动的例行管理任务,并且 itcl2.0 为 Tcl/Tk 提供一个 C++ 绑定,就象一套组件一样。

TclX (扩展的 Tcl)、Tcl-DP (分布式 Tcl 编程) 和 Tix (一套 mega 组件) 也是流行的。基于 Blt 的应用 xelem (一个关于周期表的交互应用) 是有趣的。

除了 expect,这些捐献软件的最新版本在 ftp.funet.fi。在这个 ftp 站点的 expect.readme 给出如何得到 expect 的指示。

译者按:TclPro

TclPro 通过一个代码检查器和一个强力图形调试器增进了 Tcl 编程者的生产率。TclPro 还使打包和发布 Tcl 应用变的容易了,并且它保护源代码不被复制和变更(alteration)。TclPro 组合了一些流行的 Tcl/Tk 的开放源代码的扩展: 面向对象编程的 [incr Tcl];用于重复性任务自动化和扩展遗留的应用的 Expect;增加了强力的实用工具和系统支持的 TclX。

TclPro 开始是 Scriptics 出售的一个商业产品,现在可以自由的获得。你可以下载源代码或给流行平台的可立即安装的二进制版本。

跨越障碍(Jumping the compilation gun)

这个标题下的所有信息可以在相关的 README 文件中找到更详细的描述,也存在于 Ousterhout 和 Welch 的书的后面的章节中。但我们觉得在开始帮助在你的站点上设置 Tcl/Tk 时注意这些是值得的。

要点 1:

如果你计划同一些其他扩展一起编译 Tcl7.4 和 Tk4.0, Tcl/Tk 包括集成扩展的模板,并且提供一个统一的 wish shell,通过它扩展的命令和组件可以同核心的 Tcl/Tk 命令一起被调用,注意到这点将是很有用的。如果你没有一个集成的 wish,那么对于每个你要使用的扩展,你需要调用一个为那个扩展而编译的 wish ,例如,使用基于 blt 的应用调用 blt_wish 或是基于 itcl 的使用 itkwish 。 第 9 章描述如何完成这个集成。
 

要注意的另一点是如果你希望使用 C++ 作为你的应用开发语言,你将要使用 itcl,但可能也要提供  blt、expect,满足那些使用 C 作为他们的应用语言的人。引用 itcl 开发者的话,

“.... Tcl 是过程和全局变量,并且所有这些建造块(building blocks)必须驻留在一个单一的(single)名字空间中。不支持保护或封装。 

[incr Tcl] 介绍了对象的概念。每个对象是一包数据并有一组用来操纵它的过程或 "方法"。 对象被组织成有标识性特征的"类",并且类可以从其他类继承功能。.....

类和/或相关的过程封装在他们自己的"名字空间"中。一个名字空间是一个命令、变量、类和其他从全局作用域分离出来的名字空间的集合...............

在 vanilla(香草) Tcl 中,每个扩展必须把它的命令和变量增加到全局作用域中。鼓励扩展的作者在他的包中的所有名字增加一个唯一的前缀,用以避免命名冲突。扩展就可以处于它们自己的命令和变量的名字空间中,并且敏感的元素(elements)被保护起来免于意外的访问。”

提示 1:

实际上,这将意味者 itcl 要求自己版本的 Tcl/Tk,其支持的名字空间要求使用在 itcl 发布中的 Tcl/Tk 版本。所以如果你想把 itcl 同其他 Tcl/Tk 扩展/应用集成在一起,你必须使用 itcl 版本的 Tcl/Tk 而不是原始的版本作为它们的基础。

要点 2:

Send 是一个强力的 Tk 命令,它允许任何在一个显示器上的 Tk 应用同其他在这个显示器上的应用通信。发送的应用可以要么检索关于目标应用的信息,要么通过调用在目标应用中的一个任意的 Tcl 脚本来改变它的状态。[第 2章提供了使用 send 的例子]

这个机制提供了机会建造强力的协同多媒体超级工具(hypertool)的机会和潜在的安全任务风险。我们推荐读者看 Ousterhoust 教授的书 的第 23 章。万一你还没有访问这本书,这里引用了一些他的关于安全要点的叙述:

" ...任何使用你的显示器的应用可以发送脚本到任何在那个显示器上的 Tk 应用,并且脚本可以使用 Tcl 的全部能力来读写你的文件或调用拥有你帐户的权限的子进程。.....

...如果你对你的显示器起用一个基于密钥(key-based)的方案如 xauth ,它生成一个难懂的鉴别串,并告诉服务器除非一个应用出示这个串否则不允许使用显示器,你就可以非常好的保护你自己。典型的,这个串存储在一个对特定用户只读的文件中,所以这个方案限定一个用户使用显示器。如果你要允许其他的用户访问你的显示器,你可以给他一份你的鉴别文件,或者你可以把鉴别文件的上的保护改成同组可读的。

... 许多人使用 xhost 程序,它为服务器指定一组机器名,并且在这些机器上的任何进程可以建立到服务器的连接。在列出的任何机器上的有帐户的任何人可以连接到你的服务器上。为了防止这些人向你的应用发送并滥用你的帐户,Tk 检查是否在这个显示器上使用了 xhost 式样的保护,如果是,Tk 拒绝接受到来的 send 命令。如果你当前使用 xhost 保护,你应当学习 xauth 并尽快转换到它上面。"

提示 2:

即使你正在使用 xhost 保护,如果你要要使用 send 命令,在编译 Tk 之前,通过注释掉 SECURITY_FLAGS = -DTK_NO_SECURITY 行,关闭在 Tk Makefile 文件中的安全检查。 Makefile 将象下面这样
SECURITY_FLAGS =
#SECURITY_FLAGS = -DTK_NO_SECURITY
允许 send 在 xhost 保护下使用。

本书的源代码

本书和相关的例子的源代码保存在本书的目录下的 htmlcode 子目录中。这个版本是完全自包含的(没有到外部页面的超链接)。本书的完整的目录可以以压缩的 tar 文件 cookbook.tar.Z 从 RAL 匿名 ftp 服务器(130.246.72.228)上获得。它在 /pub/cookbook 底下。还可获得 HTML 文档的一个完整的 PostScript 版本 cookbook.ps.Z。

本书的例子是使用 Tcl7.4 和 Tk4.0 创作的。他们在运行 SunOS 5.4,SunOS 5.3,SunOS 4.1.3 的 Sun Microsystems Sparc 工作站上开发和测试。

注意 1: 第 1 章和 6-9 章(包括)的例子要求编译部分例子。每章都提供 Makefile 文件的模板。确信任何你做的定制都被反映在那章中的那些调用被编译的部分的 Tcl 源文件上。

注意 2: 假定在你的站点的 Tcl/Tk 被安装在 /usr/bin 下面。如果不是这种情况,你需要用正确的路径名替换在例子的源代码中的 #!/usr/bin/wish -f 行 {在 Tk 的版本 3.6 之上不要求 "-f" 选项}。如果你需要变更到 wish 二进制文件的路径,注意一些 Unix 系统不能处理第一行超过 32 个字符的脚本文件。要避免如此,可依从 Kevin Kenny 在 comp.lang.tcl 贴出的技巧。用下列两行替换  #!/usr/bin/wish -f 行:

#!/bin/sh
exec /some/very/long/path/to/wish -f "$0" $(1+"$$@"}

注意 3: 第一章 Tcl 基础设置调用 mosaic 浏览器来观看 tcltk-man-html 的 html 文档。你将需要在 ~cookbook/code/BTCL/eb.tcl 的过程 CreateSynWin 中设置两个变量 Hyper(browser) 和 Hyper(html)。

如何象例子那样运行tclsh、 wish 请参照起步章节。

译者按:Tcl/Tk 8.4

Tcl/Tk 8.4 是最新的 Tcl/Tk 发行。这是个针对严肃的(serious)开发者的正在开发中的发行,他们可以容忍偶尔的缺陷并对新特征感兴趣。

Tcl 8.4 与 Tcl 8.3 到 Tcl 8.1 高度兼容。使用这些版本的用户升级没有任何问题。

译者按:Tcl/Tk 8.3

Tcl/Tk 8.3 是当前的稳定的 Tcl/Tk 发行。

Tcl/Tk 8.3 中为 Tk 添加了许多新特征,基于 Jan Nijtmans Dash 补丁和 Img 补丁。同样也向 Tcl 添加了一些新特征。详见 8.3 版主页。

Tcl 8.3 Tcl 8.2 Tcl 8.1高度兼容。这些版本的用户升级没有任何问题。

译者按:Tcl/Tk 8.2

Tcl/Tk 8.2 中我们更改了新的 Tcl 扩展体系(TEA) build 过程。这包括在 Windows 平台上使用 cygwin make autoconf 过程,但仍然继续使用 VC++ 编译器。

新的特征主要在支持新扩展的 C 层次的 API 上。最值得注意的是 Tcl_StackChannel API,它使你可以向 Tcl I/O 通道添加压缩和加密处理模块。有用于支持 Expect 的新的正则表达式 C API

对于 Tcl 脚本作者 Tcl 8.2 基本上与 Tcl 8.1 完全一样。Tcl 8.2 显著的增进了 string 命令的性能。排除了一些在 8.1 发行中的小缺陷。

译者按:Tcl/Tk 8.1

Tcl/Tk 8.1 Tcl/Tk 的一个经过大规模的彻底检查了的版本。Tcl/Tk 8.1 的新特征支持 Unicode 和国际化应用。它还为 C 实现增加了线程安全,增加了 Henry Spencer 的一个全新的正则表达式包,它增加了 Perl 5 式的高级正则表达式。

如果你是一个 Tcl 脚本作者,Tcl/Tk 8.1 Tcl 8.0 兼容。如果你是一个 C 扩展的作者,那么你可能要做一些工作来用这个发布中新的 C API 更新你的应用。

因为 8.2 修正了在 8.1 中发现的缺陷,并且对于脚本作者基本上与 8.1 完全一样,建议所有人优先使用 8.2 而不是 8.1

译者按:Tcl/Tk 8.0

Tk 的版本号与 Tcl 合并。Tcl/Tk 8.0 是被广泛的使用的发行。它的最新的补丁发行是 8.0.5,但很多镜象站点仍然发布 8.0.2 (也被称为 8.0p2)Tcl 8.0 增加了一个飞速(on-the-fly)字节码(byte-code)编译器,Tk 8.0 增加了增强的跨平台的感观。Tk 8.0 增加了一个菜单条设施和一个平台中立的字体命名系统。

Tcl7.5a2 和 Tk4.1a2

最新版本的 Tcl 和 Tk 是 7.5a2 和 Tk4.1a2。本书的例子足够简单,在这些最新版本上运行不需要修改。当前的发布的发行包括 Tcl 和 Tk 二者的 Windows 和 Macintosh 环境的移植(ports)。 

注意: 请注意本书中的例子使用了特定于 Unix 的命令 execdate ,还有 Tcl 文件命令只大多数 Unix 工作站上可得到。在 Pc 和 Macintosh 平台上这些需要被替换成可获得的适当的命令, XBM 位图格式也需要变更。

在下次修订时我们希望自动的做这些变更。

Tcl7.3 和 Tk3.6

在以前的发行 Tcl 7.3 和 Tk 3.6 中这些例子也可以运行。

XF 是一个为 Tcl 和 Tk 开发的图形用户界面(GUI),开发者是 Sven Delmas,可在 Tcl7.3 和 Tk3.6 中得到。我们希望包括一个如何使用 XF 的简短的例子,不幸的是 XF 没被移植到以后的 Tcl 和 Tk 发行中。

XF 要求熟悉 Tcl 和 Tk 编程并提供它自己的高层编程接口,这些接口多数是自动的生成的。给出这个 XF 被有效的冻结了,我们不确信这会增加一个附加的学习曲折。