複製鏈接
請複製以下鏈接發送給好友

Tcl/Tk

鎖定
Tcl 是“工具控制語言(Tool Command Language)”的縮寫,其面向對象為otcl語言。Tk 是 Tcl“圖形工具箱”的擴展,它提供各種標準的 GUI 接口項,以利於迅速進行高級應用程序開發。
中文名
工具控制語言
外文名
Tcl/Tk
屬    性
計算機語言
開發時間
1989 年
問世時間
1991年

Tcl/Tk起源

Tcl 是“工具控制語言(Tool Command 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 Solutions,已由 Interwoven 收購)繼續改進該語言,穩定版本是 8.5.13,在寫本文的時候,8.6b3 版本正在開發之中。

Tcl/Tk工具和文件

在 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
啓發語言
影響語言
網站
見擴展閲讀
Tcl(最早稱為“工具命令語言”"Tool Command Language",但是已經不是這個含義,不過我們仍然稱呼它為TCL)是一種腳本語言。由John Ousterhout創建。TCL很好學,功能很強大。TCL經常被用於快速原型開發,腳本編程,GUI和測試等方面。TCL唸作“踢叩”(tickle)。Tcl的特性包括:
任何東西都是一條命令,包括語法結構(for,if等)。
任何事物都可以重新定義和重載。
所有的數據類型都可以看作字符串。
語法規則相當簡單。
提供事件驅動給Socket和文件。基於時間或者用户定義的事件也可以。
動態的域定義。
很容易用C, C++,或者Java擴展
解釋語言,代碼能夠動態的改變。
完全的Unicode支持。
平台無關。Win32UNIX,Mac上都可以跑。
和GUI緊密集成。Tk
代碼緊湊,易於維護。
TCL本身在8.6以後提供面向對象的支持。因為語言本身很容易擴展到支持面向對象,所以在8.6之前存在許多C語言擴展提供面向對象能力,包括XOTcl, Incr Tcl等。另外SNIT擴展本身就是用TCL寫的。
使用最廣泛的TCL擴展是TK。 TK提供了各種OS平台下的圖形用户界面GUI。PerlPython等語言都提供接口適配到TK上。另一個流行的擴展包是Expect. Expect提供了通過終端自動執行命令的能力,例如(passwd, ftp, telnet等命令驅動的外殼).

Tcl/Tk擴充套件

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

Tcl/Tk範例

下面是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等語言默認的圖形界面.