| Tcl2Html
是本人编写的一个小软件,它能把 Tcl/Tk
的源程序转变成 HTML 文件,便于在网上交流程序。
编程的人可能对 C/C++,Java,C#
等所谓的 System Language 比较熟悉, Tcl/Tk
则属于一类被称为 “Scripting Language” 的 “另类”
语言。其实说 Scripting Language
另类有些冤枉,因为一来 Scripting Language
的历史之悠久并不逊色于 System Language。自二十世纪六十年代以来两者就并存于各操作系统之中。二来
Scripting Language 家族中的 VBScript, Perl
等传播之广并不在 System Language
之下,后起之秀诸如 Python, Ruby
等也为写书人赚了不少银子。不过 Tcl/Tk
对大多数人来说确实算是比较陌生。
Tcl/Tk 由核心语言部分 Tcl
和界面编程部分 Tk
所组成,除此之外还有许多其它的软件包可供下载。与其它
Scripting Language 类似,用 Tcl/Tk 编程远比用 System
Language 方便。以 C 语言为例,据统计每一行 C
程序平均对应于 5 行汇编语言指令,而 Tcl/Tk
的这一数字是 100 到 1000!也就是说一行 Tcl/Tk
程序平均对应于数十行乃至上百行 System Language
程序。别的倒也罢了,在编写用户界面 (GUI)
方面,Tcl/Tk 委实可以让埋首于 MFC,Java
等的人有耳目一新之感。即使考虑到 VC++,Java,C#
等各有大型的 (很不幸也都是昂贵的) 编程环境
(IDE) 的支持, Tcl/Tk
在编程简洁性上依然有其独特的优势。尤其是在必须直接对源程序进行修改的时候,用
IDE 产生的程序往往因为含有冗余 code
而给阅读和修改带来额外的复杂性,这时候逻辑清晰,语法简明的
Tcl/Tk 所具有的优势就更为明显。由于 Tcl/Tk
在界面编程方面的长处,目前流行的几种主要的
Scripting Language,象 Perl 和 Python
在界面编程上都采取了仿照 Tcl/Tk 的方法。由于
Python 是最近才流行的, Perl 也是在较
新的版本中才有了所谓的 Perl-Tk
的,在这些语言还不存在,或还没有与 Tcl/Tk
相似的界面编程功能的时候 Tcl/Tk 的 “大隐于市”
实在是编程界的一种奇怪的现象。或许是因为传统上人们认为
Scripting Language
只是用来处理文本数据的缘故吧。也或许是由于
Scripting Language
运行速度较慢,在计算机硬件不发达的时候往往达不到人们对运行速度的要求。
而今天,硬件的发展使得速度瓶颈对许多软件来说已是昨日黄花,这给
Scripting Language 创造了在更多方面与 System Language
一争雄长的机遇。即使有 Perl 和 Python
等语言的竞争,Tcl/Tk
依然有其便利之处,语言功能的比较或许是各有千秋,但对于业余编程的人来说,
Tcl/Tk
的一个有利之处是它有一些很不错的免费编译器,其中最出色的是
TclPro,它是一个商业软件,但 TclPro 1.4 (含 Tcl/Tk
8.3.2) 可以免费下载,它们可以将 Tcl/Tk
编译成可执行文件。编译器对于象 C++ 这样的“编译型”语言自然不新鲜,但
Scripting Language 通常是由所谓的 Interpreter
来运行的,因而要求用户机器安装相应的 Interpreter,这样的一层额外要求对于软件的传播带有不可忽视的负面影响。因此拥有象
TclPro 这样的编译器,免除用户安装 Tcl/Tk Interpreter
的麻烦是 Tcl/Tk 的一个显著优势。
王婆卖瓜吆喝了半天,除了真心实意要替 Tcl/Tk
呐喊几声外,也是为 Tcl2Html
作点背景介绍。如果你从来没有用过 Tcl/Tk
的话,不妨试着用一下,Tcl/Tk 的 Interpreter
是可以免费下载的。你会发现学习 Tcl/Tk 比 C++,Java,C#
等容易多了,很值得一试。
顺便说一下 Tcl2Html 本身就是用 Tcl/Tk
编写并用 TclPro 编译的,下载文件 tcl2html.zip,解压缩后直接运行
tcl2html.exe 就可以了。
希望这个小软件能对 Tcl/Tk
在网上的传播交流起到一些帮助。
Download
Tcl2Html 1.0 for Windows (1.7MB)
Tcl2Html 1.0 的用户界面:
用 Tcl2Html 1.0 产生的 HTML 文件:
#!/bin/sh
# the next line restarts using wish
exec wish "$0"
"$@"
# timer --
# This script generates a counter
with start and stop buttons.
label .counter -text
0.00 -relief raised -width
10
button .start -text
Start -command {
if
$stopped {
set
stopped 0
tick
}
}
button .stop -text
Stop -command {set
stopped 1}
pack .counter -side
bottom -fill both
pack .start -side
left -fill both -expand
yes
pack .stop -side
right -fill both -expand
yes
set seconds 0
set hundredths 0
set stopped 1
proc tick {}
{
global
seconds hundredths stopped
if
$stopped return
after
50 tick
set
hundredths [expr
$hundredths + 5]
if {$hundredths
>= 100}
{
set
hundredths 0
set
seconds [expr
$seconds + 1]
}
.counter config -text
[format
"%d.%02d" $seconds
$hundredths]
}
bind . <Control-c>
{destroy
.}
bind . <Control-q>
{destroy
.}
focus .
二零零二年三月
|