Tcl/Tk 9.1.0 已经发布。它是通向 9.1 稳定版的开发线,在 9.0 的地基上加新命令和新接口。语言侧新增了一批命令和 C 函数,图形侧补上了屏幕阅读器支持和从右到左的文本排版。对已经跑在 9.0 上的项目来说,最需要注意的是一个破坏性变化,应用程序现在必须显式调用初始化例程。发布说明里的新命令列表不长,逐个看完只要几分钟。多数项目的升级工作量集中在构建脚本上。
语言侧新增的命令
改动很集中。Unicode 归一化有了正式命令,配套的 C 函数一起提供。单调时钟命令以微秒分辨率返回时间,算耗时和做超时都够用。列表筛选命令可以按条件从表里挑元素,省掉自己写循环。子解释器命令用来访问子解释器里的变量,多解释器嵌入会常用。替换命令和开关命令都加了新选项,前者支持反斜杠、命令和变量三种替换,后者支持整数区间匹配。一批 C99 数学函数进了表达式求值,写数值计算不用再自己包扩展。
C 接口的变化
时间 API 换成 long long,原来的时间结构不再使用。列表相关新增了区间、重复和反转三个函数,大列表的内部实现改成更省内存的布局,64 位尺寸支持也扩展了。新增的接口还有判断值是否为空的函数和按用户环境查询编码名的函数。平台差异也要留意。macOS 上文件系统路径改成大小写不敏感,Windows 上可执行文件查找规则重写,脚本库和编码的搜索逻辑同样调整过。这些变化影响嵌入方,纯脚本层的代码多数感觉不到。
破坏性的初始化要求
这一版要求应用程序显式调用初始化例程。两个选项,一个定位可执行文件,一个给 zip 式打包的脚本文件系统装钩子。以前靠隐式初始化的程序在 9.1 上可能直接起不来。升级时的动作是先看启动日志里有没有相关报错,再在 main 函数最早的位置补上调用。嵌入式程序如果自己管理可执行文件路径,这一条要特别确认。
图形侧补的能力
Tk 9.1 的改动集中在无障碍和国际化。屏幕阅读器支持进到核心,视觉障碍用户读界面不再只靠各平台补丁。双向文本和从右到左语言有了初步支持,阿拉伯语和希伯来语界面的排版基础打好了。新增了一个开关部件,做设置项比复选框更贴近现代界面。命令还可以查询部件的可访问属性。列表框选中配色、画布文本信息、标签旋转文本都有改进。消息框和对话框限制在物理屏幕宽度内,超长文案不会超出显示器。Windows XP 的旧外观支持被移除。
要不要升
用 9.0 稳定版的桌面程序,升级前先确认初始化例程的改动和主程序的结构,再看有没有依赖旧时间结构或 Windows XP 外观。嵌入式 C 项目和自定义构建系统建议先在分支上编译,把 API 变化的报错清完再合。脚本层的新命令和 Tk 的改进可以等稳定版发布后一次性跟进。
常见问题
升级后程序启动即退出,大概是什么原因?
先查初始化例程。缺一次调用会让程序在很早的阶段失败,日志里通常有关键字。
纯 Tcl 脚本会受影响吗?
大概率不会。新命令是增加,改动集中在 C 接口、初始化流程和平台路径处理。
开发版能上生产吗?
它明确是通向稳定版的开发线。生产环境建议等稳定版,开发版适合提前验证 API 变化。