为什么tclOO存在?

Don*_*ton -1 tcl itcl

我们已经使用 Itcl 多年了。我已经好几年没有用 tcl 编写任何代码了。我最近意识到 tcl 中添加了一个新的面向对象系统 - tclOO!这到底是什么以及它为何存在?它应该取代 Itcl 吗?

Don*_*ows 7

我写了TclOO。我写它是因为我想要一个当时还不存在的 OO 系统,而 TclOO 非常接近我想要的。不少人同意我的观点;他们中的许多人帮助我进行了设计(其中最值得赞扬的是《Snit》的作者 Will Duquette;他对现有设计问题的分析至关重要)。

当时我们不喜欢 Incr Tcl 的一个大问题是类创建后很难修改。这不是 C++ 的运行方式,因此它从来都不是 Incr Tcl 设计目标的一部分。

我们不喜欢 XOTcl(我们详细研究的另一个对象系统)的一个重要原因是它的配置风格与可变数量的参数交互得很差。事实证明,这是对象系统工作原理的基础功能之一,就像一根线,当你拉动它时,整件衣服就会散开。

我们对如何管理堆栈上的必要信息有一些新的想法,这些想法使 TclOO 比任何一个都更容易使用,但代价是使方法绝对不是 Tcl 命令(它们的 C 签名有一个额外的结构引用到当前的调用上下文;它们确实不同)。我们使用这些技巧来制作定义脚本系统,该系统旨在赋予 XOTcl 的强大功能和 Incr Tcl 的大部分感觉。

我还努力让 TclOO 变得非常快。这主要是由于非常积极的缓存和对关键路径上出现的内存分配数量的仔细控制。