我有一个c++服务器端项目,需要嵌入某种脚本。它是在线MMO服务器的一部分。我在使用TCL方面有丰富的经验,它似乎是自然选择。在我的游戏开发日子里,我做了很少量的Lua,并且我想知道它是否是更适合于嵌入式脚本的语言。学习一门新语言也是不错的事情。TCL和Lua的相对优势和劣势是什么?谢谢!
我想我和RHSeeger的情况恰恰相反。我曾经在游戏中(顺便说一下,是在线游戏)都嵌入了Lua和TCL,如果可以选择,我不会再去碰TCL。我的个人主观看法是Lua是一门合理的语言,而TCL则不是。相对于其他脚本语言选项而言,TCL的语法对大多数人来说非常晦涩,有许多set、expr、美元符号和大量的括号等等。它唯一的客观好处就是易于嵌入 - 但在这方面,Lua也毫不逊色。
如果这个脚本接口仅供您自己使用,那么您可能会选择TCL,因为Lua不会提供任何新东西(除非您喜欢面向对象编程)。在一个熟练的用户手中,TCL是一个合理的工具。然而,如果您期望 less experienced users 使用该系统,则应选择Lua - 简单的语法将为他们带来很多生产力。
从图书馆的角度来看,这是下一个重要因素,两种语言都不需要使用任何库就可以很有用;也就是说,与需要大型运行时库才能发挥作用的语言(如Java)相比,这两种语言非常紧凑。这是由于它们最初设计要求的结果。两种语言都有丰富的附加库可供选择,但我至少的印象是TCL在这个类别中有更多的选择。tcl:(Tcl Extension Archive / Tcl Extension Repository) lua:(LuaForge)
另一个区别在于核心语言本身。两种语言都强调简单而不是风格,但相似之处就到此为止了。Lua使用对大多数程序员可能很熟悉的语法,具有非常简单的上下文无关语法。TCL语法也很简单,但实际上与其他现有语言没有任何共同之处,尽管它看起来表面上有点像Unix shell语言。Tcl可能仅对非程序员更容易,因为其基于行的命令语法非常清晰,但在其他语言中有经验的程序员通常反对其晦涩的语法。两者在代码生成方面都不是很宽容,但都具有强大的元编程功能(与CLISP宏相当,但可能没有那么健壮)。