1 Tcl/Tk 的起源

Tcl 是「工具控制語言(Tool Control Language)」的縮寫。Tk 是 Tcl「圖形工具箱」的擴展,它提供各種標準的 GUI 介面項,以利於迅速進行高級應用程序開發。
John K. Ousterhout(見圖像)於 1988 年開始開發 Tcl/Tk(讀作「tickle tee-kay」),然後是加州大學伯克利分校(UCB)的一名教授繼續對它進行開發。Tcl 是以可擴展性、短的學習曲線和易於嵌入為特定目標而設計的。Tk 的開發始於 1989 年,第一個版本於 1991 年問世。Ousterhout 博士在他離開 UCB 之後繼續開發 Tcl/Tk,然後由於工作需要,他繼續為 Sun Microsystems 公司工作。現在,也就是在寫本文之時,他在 Scriptics(它開發出 Ajuba Solution,已由 Interwoven 收購)繼續改進該語言,目前的穩定版本是 8.5.13,在寫本文的時候,8.6b3 版本正在開發之中。

2工具和文件

在 Linux 系統上研究 Tcl/Tk,需要有兩個主要程序。它們是 tclshwish。正如可以從其名稱所辨別的那樣,所以前者是 Tcl 外殼,常用於為外殼腳本提供執行環境。Wish 類似於 tclsh,它是針對窗口化的 GUI 環境。
輸入下列命令,檢查這些文件是否存在:
~/tcltk$which tclsh/usr/bin/tclsh~/tcltk$which wish/usr/bin/wish
Tcl
編程范型
多泛型,面向對象,函數式, 過程式, 事件驅動, 命令式
設計者
John Ousterhout
實作者
John Ousterhout, Tcl Core Team
最新發行時間
8.5.11[1] (2011年11月4日;7個月前(2011-11-04))
型態系統
動態類型, everything can be treated as a string
主要實作產品
ActiveTcl
啟發語言
AWK, Lisp
影響語言
PowerShell,Tea
網站
見擴展閱讀
Tcl(最早稱為「工具命令語言」"Tool Command Language",但是目前已經不是這個含義,不過我們仍然稱呼它為TCL)是一種腳本語言。由John Ousterhout創建。TCL很好學,功能很強大。TCL經常被用於快速原型開發,腳本編程,GUI和測試等方面。TCL念作「踢叩」(tickle)。Tcl的特性包括:
任何東西都是一條命令,包括語法結構(for,if等)。
任何事物都可以重新定義和重載。
所有的數據類型都可以看作字元串。
語法規則相當簡單。
提供事件驅動給Socket和文件。基於時間或者用戶定義的事件也可以。
動態的域定義。
很容易用C, C++,或者Java擴展。
解釋語言,代碼能夠動態的改變。
完全的Unicode支持。
平台無關。Win32,UNIX,Mac上都可以跑。
和GUI緊密集成。Tk
代碼緊湊,易於維護。
TCL本身在8.6以後提供面向對象的支持。因為語言本身很容易擴展到支持面向對象,所以在8.6之前存在許多C語言擴展提供面向對象能力,包括XOTcl, Incr Tcl等。另外SNIT擴展本身就是用TCL寫的。
使用最廣泛的TCL擴展是TK。 TK提供了各種OS平台下的圖形用戶界面GUI。Perl、Python等語言都提供介面適配到TK上。另一個流行的擴展包是Expect. Expect提供了通過終端自動執行命令的能力,例如(passwd, ftp, telnet等命令驅動的外殼).

4擴充套件

Tcl支援擴充套件,這些擴充套件提供了額外的功能(像是GUI,自動化,資料庫存取等)。
下面是一些Tcl擴充套件的列表:
tclodbc
mk4tcl
sqlite
Pgtcl, pgintcl
mysqltcl, msqltcl
AdabasTcl
FBSQL
ibtcl
Oratcl
Sybtcl
db2tcl
以及還有更多、更多 - 請參考Tcl/Tk Wiki,特別是Tcl/Tk Wiki Database Category。

5範例

下面是TCL程序的例子:
#!/bin/sh # next line restarts using tclsh in path \ exec tclsh $0 ${1+"$@"} # echo server that can handle multiple # simultaneous connections. proc newConnection { sock addr port } { # client connections will be handled in # line-buffered, non-blocking mode fconfigure $sock -blocking no -buffering line # call handleData when socket is readable fileevent $sock readable [ list handleData $sock ] } proc handleData { sock } { puts $sock [ gets $sock ] if { [ eof $sock ] } { close $sock } } # handle all connections to port given # as argument when server was invoked # by calling newConnection set port [ lindex $argv 0 ] socket -server newConnection $port # enter the event loop by waiting # on a dummy variable that is otherwise # unused. vwait forever 另外一個TK的例子(來自A simple A/D clock)它使用了定時器時間,3行就顯示了一個時鐘。
proc every {ms body} {eval $body; after $ms [info level 0]} pack [label .clock -textvar time] every 1000 {set ::time [clock format [clock sec] -format %H:%M:%S]} ;# RS 解釋:第一行定義了過程every, 每隔ms毫秒,就重新執行body代碼。第二行創建了標籤其內容由time變數決定。第3行中設置定時器,time變數從當前時間中每秒更新一次。
tcl/tk是python等語言默認的圖形界面.

相關評論

同義詞:暫無同義詞