我有一个c ++服务器端项目,我需要嵌入某种脚本.它是在线MMO类型服务器的一部分.我有使用TCL的丰富经验,看起来很自然.我在游戏开发日里做了少量的Lua,我想知道这对于嵌入式脚本来说是不是更好的语言.学习一门新语言也很不错.TCL与Lua的相对优势和劣势是什么?谢谢!
老实说,他们都非常适合这项任务.两者都很容易嵌入到应用程序中,并且具有相当简单的语法.我知道在Tcl中添加新命令(与应用程序交互)非常简单,我告诉Lua也非常擅长这种类型的事情.
我的建议是和Lua玩一会儿来看看你喜欢它(因为你已经知道了Tcl)......然后选择一个让你觉得最舒服的那个.如果你正在编写大部分代码,那么你最终会使用它,所以你也需要一些你可以使用的东西.最后,对于最终用户来说,两种语言选择应该相当容易.
我的个人偏好是Tcl,因为我不喜欢Lua(我为魔兽插件做了大量的编程)因为我喜欢Tcl(我已经为它做过很多编程私人工作).
编辑:添加了关于最终用户都很容易的说明.得到了2票,除了没有澄清我的陈述的部分内容之外,我想不出其他任何可能的事情.
我猜我在那里与RHSeeger相反.我已经在游戏中使用了Lua和TCL(在线游戏,偶然),如果我有选择的话,我不会再用10'的bargepole触摸TCL.我非常主观的看法是,Lua是一种理智的语言而TCL则不是.相对于脚本语言的其他选项,TCL语法对于大多数人来说都非常模糊,包括所有set和expr以及美元符号和大量括号等.它唯一的客观好处是易于嵌入 - 但是Lua并不吝啬那部门要么.
如果这个脚本界面纯粹是为了你,那么你也可以选择TCL,因为Lua不会为你提供任何新东西(除非你的对象取向).在技术熟练的用户手中,TCL是一种合理的工具.但是,如果您希望经验较少的用户使用该系统,那么请使用Lua - 更简单的语法将为他们带来很多生产力.
Lua C API非常易于集成到应用程序中.从C,您可以完全访问Lua状态及其本机数据类型.例如,我建议使用Lua来获取哈希表的实现,即使不需要编写脚本.
用C编写的Lua函数可以作为全局名称注入,像大多数标准库函数一样收集在表中,或者在DLL中实现并在运行时动态加载.这允许应用程序提供稳定的API,以及支持用Lua或C编写的插件.
Lua作为一种语言非常强大,支持功能和面向对象的编程风格.它还具有令人惊讶的轻量级:完整的源代码工具包和完整的文档适用于1 MB以下,并且DLL中的整个VM,编译器和标准库在Windows上仅为164KB.
从版本2开始,我没有认真检查TCL ......我不会试图以具体方式对它们进行比较.我相信它们都是为了适应相同的利基而发明的,并且大约在同一时间.它们当然都是具有狂热用户社区的成熟语言.
我怀疑Tcl会有更多的库,你可能会发现这些库是必要的或方便的.
正如其他人所说,两种语言都能很好地运作.第三种选择也可能同样适用于JavaScript,因为它适用于大致相同的利基市场.而不是试图劝你去找其中一个(因为我非常喜欢这两种语言),我会尝试着眼于一些客观的差异,并指出我认为一个领先于另一个的地方.
游戏服务器中最重要的问题可能是原始性能.这两种语言都是成熟且经过优化的,但两者都认识到,通过推迟编译代码可以最好地优化某些问题.两种语言使用基本相同的机制来执行此操作.从语言本身的角度来看,看起来Lua的速度要快一些.链接
从图书馆的角度来看,这是下一个重要因素,两种语言都不需要使用任何图书馆.与Java等需要大型运行时库有用的语言相比,这两种语言都非常紧凑; 同样,这是他们原始设计要求的结果.这两种语言都有丰富的附加库可供选择,但至少我的印象是TCL在这一类别中有更多的变化.tcl :( Tcl扩展存档/Tcl扩展存储库)lua:(LuaForge)
另一个区别在于核心语言本身.两种语言都重视简约而非风格,但这就是相似性结束的地方.Lua使用大多数程序员可能熟悉的语法,使用非常简单的上下文无关语法.TCL语法也很简单,但与其他现有语言没有任何共同之处,尽管它看起来有点像unix shell语言.Tcl可能只对非程序员更容易,因为它的面向行的命令语法非常清楚,但是在其他语言中经验丰富的程序员通常会反对其神秘的语法.在代码生成方面,两者都不是非常宽容,但两者都具有强大的元编程功能(可比,但可能不像CLISP宏那样健壮).