Tcl

Tcl
编程范型多泛型面向对象函数式过程式事件驱动指令式
設計者John Ousterhout英语John Ousterhout
實作者John Ousterhout、Tcl核心團隊
发行时间1988年
当前版本
  • 8.7a5 (2021年6月18日;测试版本)[1]
  • 8.6.14 (2024年2月29日;穩定版本)[2]
編輯維基數據鏈接
型態系統动态类型、万物皆可视作字符串
文件扩展名.tcl
網站www.tcl.tk
主要實作產品
ActiveTcl
啟發語言
AWK、Lisp
影響語言
PowerShell[3]Tea英语Tea (programming language)

Tcl(发音tickle)是一种脚本语言。由John Ousterhout英语John Ousterhout创建。TCL经常被用于快速原型开发 RAD、脚本编程、GUI编程和测试等方面。

特性

Tcl 的特性包括:

  • 任何东西都是一条命令,包括语法结构(for、if等),以波兰表示法书写。
  • 命令通常可变。
  • 任何事物都可以重新定义和重载。
  • 所有的数据类型都可以看作字符串,包括源代码。
  • 拥有完全动态、基于类的对象系统 TclOO,支持包括元类、过滤器和mixin在内的高级功能。
  • 提供事件驱动套接字文件。基于时间或者用户定义的事件也可以。
  • 默认的变量作用域是词法作用域,但 uplevel 和 upvar 允许过程与封闭的函数作用域交互。
  • 所有的内置命令会在误用时产生错误消息。
  • 很容易用 C、C++ 或者 Java 扩展。
  • 解释语言,支持字节码
  • 完全的 Unicode (3.1)支持,1999 年首次发布。
  • 跨平台。支持 Win32UNIXLinuxMac 等。
  • 和GUI开发套件 Tk 紧密集成。
  • 代码紧凑,易于维护。
  • 存在多种发行版:
    • Batteries-Included 版本,如 ActiveState ActiveTcl
    • tclkit,一种单文件运行时环境,仅有 1 兆大小
    • starpack,脚本/程序的单文件的可执行文件,派生自 tclkit 技术
    • freewrapTCLSH[4] 将 Tcl 脚本打包为单个可执行二进制文件。
    • BSD licenses,自由可再发行的源代码。

旧版 Tcl 没有内置面向对象功能,因此许多 OO 库以扩展形式涌现出来,如 incr Tcl 和 XOTcl,甚至存在纯脚本编写的 OO 包,如 Snit 和 STOOOP(simple Tcl-only object-oriented programming),8.6 版本在内核中提供了 OO 功能[5]

Safe-Tcl 是功能受限的 Tcl 子集。文件系统访问受限,任意系统命令禁止执行。它使用双解释器模型,在“不可信解释器”中运行不可信脚本中的代码。由 Nathaniel Borenstein 和 Marshall Rose 设计,借以在电子邮件中包含活动信息,当支持 application/safe-tclmultipart-enabled-mail 时,Safe-Tcl 即可包含于电子邮件中。Safe-Tcl 功能已整合在标准 Tcl/Tk 发布中。[6][7]

扩展包

Tcl 支持扩展包,这些扩展包提供了附加功能(像是GUI,终端程序自动化,数据库访问等)。常用的扩展包有:

Tk
Tk 工具包是最流行的 Tcl 扩展,在多种操作系统上提供图形用户界面。每个 GUI 由一个或多个框架(framework)组成,每个框架内含布局管理器。
Expect
Expect是另外一种非常流行的 Tcl 扩展。早期,Expect 对 Tcl 在多种领域的流行居功甚伟,如在测试领域中,时至今日 Expect 依然被大量使用于 telnet、ssh 与串口会话的重复任务自动化,即对仅有终端交互接口的程序进行编程。Tcl 是运行 Expect 的唯一方式,因此 Tcl 在此类工业领域中十分流行。
Tile/Ttk
Tile/Ttk[8] 是风格和主题化控件集,可替代 Tk 中大多数控件,真正调用操作系统API 实现原生界面。这种方式提供的主题包括 Windows XP、Windows Classic、Qt 和 Aqua(Mac OS X)。主题也可使用图片 pixmap 加上一定定义构造,避免调用系统 API。以这种方式创建的主题有 Classic Tk、Step、Alt/Revitalized、Plastik 和 Keramik。Tcl 8.4 中,此包称作 Tile,在 8.5 中以 Ttk 的名字进入 Tk 核心发布。
Tix
Tix(Tk Interface eXtension)是一套开源的、用于扩充 Tcl/Tk 和 Python 应用程序功能的用户界面组件。由 Tix Project Group 维护,以 BSD 风格许可发布。[9]
Itcl/IncrTcl
Itcl 是 Tcl 诸多对象系统中的一种,通常称为 [incr Tcl](递增 Tcl 之意,类似 C++ 之名)。
Tcllib
Tcllib 是一套纯脚本 Tcl 包,无需编译。
TclUDP
TclUDP[10] 提供简捷的方式支持 UDP 套接字。
数据库
Tcl 数据库互联(Tcl Database Connectivity,TDBC)是 Tcl 8.6 的一部分,为 Tcl 脚本提供常用数据库的访问接口,目前驱动器支持 MySQLODBCPostgreSQLSQLite 数据库。更多数据库已经有了计划。同样,也可使用许许多多数据库专用的扩展包访问数据库。[11]

範例

下面是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变量从当前时间中每秒更新一次。

参考资料

  1. ^ Tcl / Tk 8.7a5 RELEASED. 2021年6月18日 [2021年10月16日] (英語).  引文格式1维护:未识别语文类型 (link)
  2. ^ [TCLCORE] Tcl/Tk 8.6.14 RELEASED. 2024年2月29日 [2024年3月1日]. 
  3. ^ PowerShell and WPF: WTF. [2022-03-06]. (原始内容存档于2008-12-25). 
  4. ^ freewrapTCLSH(页面存档备份,存于互联网档案馆
  5. ^ 8.6 版本在内核中提供了 OO 功能(页面存档备份,存于互联网档案馆
  6. ^ Brown, Lawrie. Mobile Code Security. Terry Bossomaier, Lucy Chubb (编). Proceedings, 2nd Joint Conference, AUUG '96 and Asia-Pacific WWW '96. Melbourne, Australia: 50. September 18–20, 1996 [2011-03-22]. (原始内容存档于2011-05-11). 
  7. ^ Welch, Brent B.; Jones, Ken; Hobbs, Jeffrey. Practical programming in Tcl and Tk 1 4th. Prentice Hall PTR. 2003: 291. ISBN 0-13-038560-3. 
  8. ^ TK Table Sourceforge Project. ActiveTcl. [August 7, 2012]. (原始内容存档于2014-07-13). 
  9. ^ Tix License. Sourceforge. [August 7, 2012]. (原始内容存档于2013-03-22). 
  10. ^ TCL UDP. Tcl'ers Wiki. [August 7, 2012]. (原始内容存档于2015-01-04). 
  11. ^ TDBC. Tcl'ers Wiki. [August 7, 2012]. (原始内容存档于2009-05-29). 

外部链接

維基教科書中的相關電子教程:Tcl 编程
维基共享资源上的相关多媒体资源:Tcl

范型
过程式
面向对象
多范型
函数式
逻辑式
脚本语言
动态语言
Shell语言
ECMA-262
特定平台
.NET
JVM
特定领域
科学计算
GPU计算
  • Cg/HLSL
  • GLSL
  • Brook英语BrookGPU
  • OpenCL
  • CUDA/PTX英语Parallel Thread Execution
  • Futhark
  • SPIR-V英语Standard Portable Intermediate Representation
数据查询
可视化
传媒设计
 
其它
  • 分类 目录
  • 列表级条目 列表
  • 历史
  • 比较英语Comparison of programming languages
  • 时间线英语Timeline of programming languages
常见概念与条目
自由软件及其定義其他称谓英语Alternative terms for free software · 與封閉原始碼的比較英语Comparison of open source and closed source · 开源软件及其开发英语Open-source software development · 自由软件托管服务比较 · 自由软件项目列表英语List of free software project directories软件列表 · “免费”与“自由”的差别英语Gratis versus libre · 長期支援 · 自由软件大纲英语Outline of free software
操作系统(内核)
AROS Research Operating System英语AROS · BSD · Darwin · FreeDOS · GNU Hurd · Haiku · Inferno · Linux · Mach · Minix · OpenSolaris · Plan 9 · ReactOS · Symbian
软件列表
软件开发英语Comparison of open-source programming language licensing · 生物信息学英语List of open-source bioinformatics software · 数学英语List of open-source software for mathematics · 文字处理软件 · 音频英语Comparison of free software for audio · 商业软件英语List of commercial open-source applications and services
歷史与运动
GNU · Haiku · Linux · Mozilla (Application Suite · Firefox · Thunderbird) · 自由软件运动 · 开源软件运动英语Open-source software movement · 大事记英语List of free-software events
组织英语List of free and open-source software organizations社群
許可證
类型与标准
挑戰
FUD · 擁抱、擴充功能再消滅 · 二進制blob · 数字版权管理 · 自由及開放原始碼顯示卡驅動程式英语Free and open-source graphics device driver · 授權擴散英语License proliferation  · Mozilla 软件品牌重塑英语Mozilla Corporation software rebranded by the Debian project · 專有軟體 · SCO-Linux爭議 · 安全性 · 軟體專利 · 硬體限制 · 可信计算 · 对 GPL 的有关批评
其他
Linux發行版 · 分叉 (软件开发) · 微軟開放規範承諾英语Microsoft Open Specification Promise · 共享原始碼 ·操作系统革命
分类 分类 · 共享资源页面 维基共享资源 · 主题 主题
规范控制数据库: 各地 編輯維基數據鏈接
  • 德国
  • 以色列
  • 美国