首页 > 游戏攻略 >

间隔27年的大版本更新!脚本语言Tcl (时隔20多年)

发布时间:2024-09-29 08:10:57来源:网络转载

简介

脚本语言 Tcl/Tk 日前正式发布了 9.0 版本,距离上一个大版本 8.0 已经过去了 27 年。Tcl 由 John Ousterhout 于 1980 年代后期创建,旨在提供一个快速的脚本执行环境,用于快速开发简单的命令行指令和脚本。

特性

Tcl/Tk 9.0 版本带来了许多新功能和改进,包括:

  • 64 位容量支持
  • 完整的 Unicode 和编码
  • Zip 文件系统
  • 附加档案
  • 新的通知程序
  • 对操作系统设施的访问
  • 可缩放矢量图形
  • 图像的完全访问
  • 平台功能和约定的多项改进

不兼容性

需要注意的是,Tcl/Tk 9.0 与之前的 8.0 版本存在一些不兼容性,包括:

  • 命名空间 varname 解析
  • I/O malencoding
  • 路径名中的波浪号 (~) 不再解释为主目录
  • tcl_precision 不再对数字格式有影响

Tk

Tk 是 Tcl 中使用最广泛的扩展,它提供了各种平台下的图形用户界面 (GUI)。值得注意的是,连 Python 也不单独提供自己的 GUI,而是提供接口适配到 Tk 上。

总结

Tcl/Tk 9.0 的发布是该语言的重大更新,带来了许多新功能和改进。虽然它与旧版本存在一些不兼容性,但对于希望使用 Tcl/Tk 构建现代应用程序的开发者来说,它仍然是一个强大的工具。


IC设计,学习哪一个脚本语言比较好

一般来讲,作为一个IC前端设计的工程师,了解公司已有的Perl和Python工具即可。 Perl: 有同事熟悉Perl,用Perl编写脚本在目录里搜索含固定字符串的文件。 然后所有AHB Backbone RTL代码都是用Perl脚本自动生成的。 Python: 有同事喜欢Python。 用Python解析XML,利用预定义模版生成UPF文件。 Tcl/tk: 有一个同事喜欢用Tcl。 他觉得clearcase原生命令不够人性,用Tcl按照自己的习惯重新写了一些命令。 现在大家都在用。 每个大模块的DfT设定非常相似,所以所有DfT有关的代码我们都用Tcl来生成,脚本也是这个同事写的。 tk是Tcl的图形化界面。 理论上你可以用它开发EDA工具。 tcl一般是工具语言,EDA工具都按这种格式下约束,tcl本身就是为了配合工具使用的,没有太大的独立价值。 perl一般是黑科技,公司自己内部开发脚本,用来做一些极其强大的文字处理,减少重复性工作。 比如修ECO,将小design整合成大design,自动跑各种随机化的仿真,极其有用。 tcl没什么语法,谈不上掌握。 perl需要认真学,越精通越好。

TCL语言具体例子

TCL,一种强大的脚本语言,常与Tk库结合使用,以简化图形用户界面的创建。下面是一些TCL程序的实例:

首先,我们来看一个简单的shell脚本,它通过`#!/bin/sh`来启动TCL解释器:

#!/bin/shexec tclsh ${1+$@}这行代码的作用是,如果提供了参数,就使用`tclsh`来重启脚本,支持多连接的服务器处理。

接下来是一个名为`newConnection`的处理客户端连接的进程:

proc newConnection {sock addr port } {...}

它设置了非阻塞和行缓冲模式,当socket可读时调用`handleData`处理数据。 如果接收到EOF(文件结束),会关闭连接。

另一个例子来自一个简单的A/D时钟程序,使用了定时器功能:

proc every {ms body} {...} -textvar timeevery 1000 {set ::time [clock format [clock sec] -format %H:%M:%S]}

这个过程`every`每1000毫秒更新一次`time`变量,显示当前时间。

TCL的一大特性是其扩展性,如果需要非标准功能,可以编写C语言扩展TCL命令,并轻松整合。 这使得TCL拥有丰富的扩展包,方便用户使用。 与C等编译语言不同,TCL是一种解释型语言,通过一系列命令逐行执行,这种解释执行方式允许程序在运行时自我生成TCL脚本,灵活性极高。

扩展资料

Tcl (最早称为“工具命令语言”Tool Command Language, 但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种 脚本语言。 由John Ousterhout创建。 TCL很好学,功能很强大。 TCL经常被用于 快速原型开发,脚本编程, GUI和测试等方面。

有关Tcl脚本语言编程的问题

set srcfile dstfile {[catch {open $srcfile r} res]} { puts Failed to open the source file: $srcfile; $res return 0}set hSrc $resif {[catch {open $dstfile w+} res]} { puts Failed to open the destination file: $dstfile; $res return 0}set hDst $resforeach line [split [read $hSrc] \n] { if {[regexp {rdly=(.*)targ=(.*)trig=(.*)} $line match sub1]} {puts $hDst Rise Delay is $sub1 } if {[regexp {fdly=(.*)targ=(.*)trig=(.*)} $line match sub1]} {puts $hDst Fall Delay is $sub1 }}close $hSrcclose $hDst

本文链接:http://www.tiefuzhen.com/game/202409/135282.html

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。