我该如何管理太多的TCL程序?

时间:2016-10-24 00:05:54

标签: tcl code-maintainability

我和我的团队一直在研究多种工具流程。

我们不断在同一个文件中添加新过程或在同一目录中创建新文件。还有很多嵌套程序;一个人叫别人。

程序的数量只会不断增长,流程涉及至少10个喜欢自己做事的人。

我的问题是,我们如何以整洁的方式管理所有这些程序?

2 个答案:

答案 0 :(得分:6)

我们假设您遵循通用软件工程的良好实践(将文件保存在源代码管理中等),而不是那些您无论如何都会被卡住的。

Tcl并不真正支持嵌套proc;你可以从另一个程序中调用proc,但它没有做任何类型的范围。

您应该考虑将代码划分为“连贯的API”。究竟是什么取决于您的应用程序,但它很少只是一个程序;特定的对话框或屏幕是一个更有用的单位。那个可能最终成为一个程序,但它通常是几个相关的程序。

一旦你确定了这些连贯的部分,它们就会形成你放入文件的内容,通常是每个文件一个连贯的部分,但是当你这样做时,使用一组文件时文件相当长相反(可能在他们自己的目录中)很有意义。同时,您可能应该将每个连贯片段定义的变量和命令全部放在Tcl命名空间中,这样可以将片段与世界其他部分隔离开来,主要是为了阻止代码在其他脚本上踩踏代码。

既然您已经完成了这项工作,并且如果您已经获得了您认为稳定的API,那么您可以将该部分制作成Tcl包。这只是通过给它一个更高级别的名称和版本号来完成的;你把它放在连贯文件中的一个文件中:

package provide YourPackageName 1.0

然后(通常在同一目录中)你创建一个包含这样内容的pkgIndex.tcl文件:

package ifneeded YourPackageName 1.0 [list source [file join $dir yourFilename.tcl]]

也就是说,要在Tcl解释器中获取YourPackageName版本1.0,您source文件$dir/yourFilename.tcl; $dir是包索引文件的便利,它引用包含当前包索引文件的目录。然后你的其余代码可以不再考虑“阅读正确的文件”,并开始考虑“使用这个定义的API”。 (如果您选择使用Tcl和C甚至纯C代码的混合开始实现包,那么很好;更改索引文件以使用正确的load其他一切都可能是遗忘的。)通过这样做:

package require YourPackageName
# Give the version if necessary, of course

然后给自己写一些文档(即使它只是将入口点命令列入包中)和测试,并且你已经迁移到了一个非常好的代码片段。

还有一些其他技术可以帮助您在某些情况下制作连贯的作品。特别是,如果您正在使用像TclOO,iTcl或XOTcl这样的OO系统,那么每个类几乎肯定一个候选连贯的片段。此外,有时候将几个相关的连贯片放在一个包装中会更好。但是,对此绝对没有严格的规则。

最后,Tcl使用一堆技术来查找包,但它们主要归结为使用auto_path全局变量进行查找。在您的应用程序主脚本中,最好(如果其余代码主要位于library目录中)使用类似这样的内容作为第一步之一:

lappend auto_path [file join [file dirname [info script]] library]

您还可以在一个地方收集许多pkgIndex.tcl个文件的内容,前提是您考虑了移动内容所需的任何路径名更改。

答案 1 :(得分:1)

关于TCL,您可以查找创建包和命名空间。如果这有用,请告诉我。所以可以提供更多细节