TCL vs Lua - 编写 MMO 服务器的脚本语言比较

我有一个 C++ 服务器端项目,需要嵌入某种脚本。它是在线 MMO 服务器的一部分。我有很多使用 TCL 的经验,看起来这是个自然的选择。在我的游戏开发日子里,我也做过一些 Lua,我想知道这是否是更好的嵌入式脚本语言。也很好学习一个新语言。TCL 和 Lua 的相对优势和劣势是什么?谢谢!

原文链接 https://stackoverflow.com/questions/1406836

点赞
stackoverflow用户26816
stackoverflow用户26816

老实说,它们俩都非常适合这个任务。两者都容易嵌入应用程序并且具有相对简单的语法。我知道在 Tcl 中添加新命令 (与应用程序交互) 非常简单,而我听说 Lua 在这方面也非常擅长。

我的建议是先尝试一段时间的 Lua,看看你是否喜欢它 (因为你已经了解了 Tcl)……然后选择最舒适的那个。如果你要写大量的代码,你最终会不停地使用它,所以你需要一个你自己能用得舒服的东西。最终,对于你的最终用户来说,这两种语言选择应该都是相当容易脚本化的。

我的个人偏好是 Tcl,因为我不喜欢 Lua (我在 Warcraft 的插件中已经做了相当多的编程),并且我喜欢 Tcl (我在职业和私人工作中都做了很多编程)。

编辑: 添加了关于两种语言都容易为最终用户脚本化的备注。我得到了两个反对票,我想不出别的可能性,这可能是因为我没有阐明我陈述中的原因。

2009-09-10 21:14:30
stackoverflow用户68204
stackoverflow用户68204

Lua C API非常易于集成到应用程序中。从C语言中,您可以完全访问Lua状态和其本地数据类型。例如,我建议即使不需要脚本编写,也可以使用Lua获取哈希表实现。

用C语言编写的Lua函数可以作为全局名称注入,收集在可与大多数标准库函数一样的表中,或在DLL中实现并在运行时动态加载。这使应用程序可以提供稳定的API,并支持使用Lua或C编写的插件。

Lua作为一种语言具有令人惊奇的强大功能,支持函数式和面向对象的编程方式。它也特别轻量级:完整的源代码包和完整文档仅占用不到1MB的空间,在Windows上,整个VM、编译器和标准库的DLL只有164KB。

我自版本2以来就没有认真研究TCL了...我不会试图以具体的方式进行比较。我相信它们都是为了适应相同的领域,大约在同一时间发明的。它们肯定都是成熟的语言,拥有热情的用户社区。

2009-09-10 21:32:23
stackoverflow用户34806
stackoverflow用户34806

我认为在使用中,Tcl将会提供更多你可能会发现必要或方便的库。

2009-09-10 21:35:12
stackoverflow用户28875
stackoverflow用户28875

我想我与 RHSeeger 正相反。我曾经在游戏中(恰巧是在线游戏)中使用过 Lua 和 TCL,如果可以选择,我不会再碰 TCL。我的主观看法是 Lua 是一个健全的语言,而 TCL 不是。相对于其他脚本语言选项,TCL 语法对大多数人来说非常晦涩,有所有的 set、expr、美元符号和许多括号等等。它唯一具有的客观优势是容易嵌入 - 但 Lua 在这方面也不会退缩。

如果此脚本接口仅供您使用,那么您最好选择 TCL,因为 Lua 不会为您提供任何新功能(除非面向对象是您的项目)。在熟练用户的手中,TCL 是一个合理的工具。然而,如果您希望不太有经验的用户使用该系统,请选择 Lua - 简单的语法将为他们带来很多生产力。

2009-09-11 09:40:15
stackoverflow用户65696
stackoverflow用户65696

正如其他人所述,这两种语言都可以很好地工作。第三个选择也可能同样适用于 JavaScript,因为它处于大致相同的范畴。我不想让你选择哪一个(因为我非常喜欢这两种语言),而是尝试着关注一些客观的差异,并指出我认为哪一个更优秀的地方。

在游戏服务器中最重要的问题可能是原始性能。这两种语言都是成熟而且优化良好的,但它们也都认识到有些问题最好通过推迟到编译代码的方式来优化。两者使用的基本上是相同的机制。从这两种语言本身的角度来看,看起来 Lua 有点更快。链接

从库的角度来看(这是下一个重要因素),两种语言都不需要使用任何库才能有用;与需要大型运行时库的 Java 等语言相比,这两种语言都非常小巧;这又是它们最初设计要求的结果。两者都有丰富的附加库可供选择,但我至少的印象是 TCL 在这个类别中拥有更多的变化。tcl:( Tcl 扩展档案 / Tcl 扩展库 ) lua: ( LuaForge )

另一个差异在于核心语言本身。两种语言都重视简单而不是风格,但这就是相似之处的尽头。Lua 使用对大多数程序员可能很熟悉的语法,具有非常简单的上下文无关文法。TCL 语法也很简单,但实际上与现有的其他语言没有任何共同之处,虽然它在表面上看起来有些像 Unix shell 语言。Tcl 可能只对非程序员更容易,因为它的基于行的命令语法非常清晰,但在其他语言中有经验的程序员通常会反对它的神秘语法。两者都不是在代码生成方面非常宽容,但它们都拥有强大的元编程工具(可以与 CLISP 宏相媲美,但可能没有那么强大)。

2009-09-16 00:00:56
stackoverflow用户2474792
stackoverflow用户2474792

Lua有一个JIT编译器LuaJIT,可以在紧密循环中达到C语言的速度,它被用于一些性能关键的项目,如Snabb开关(Snabb可以处理数千兆的数据量,全部通过LuaJIT处理)。LuaJIT 中还有一个易于使用的FFI,可以让用户在不编写C存根代码的情况下访问C功能。

PUC-Lua(标准实现)支持从内存不足中恢复。但LuaJIT和TCL都不支持。

```markdown

2016-10-21 13:29:53