TCL vs Lua - 编写 MMO 服务器的脚本语言比较
我有一个 C++ 服务器端项目,需要嵌入某种脚本。它是在线 MMO 服务器的一部分。我有很多使用 TCL 的经验,看起来这是个自然的选择。在我的游戏开发日子里,我也做过一些 Lua,我想知道这是否是更好的嵌入式脚本语言。也很好学习一个新语言。TCL 和 Lua 的相对优势和劣势是什么?谢谢!
原文链接 https://stackoverflow.com/questions/1406836
Lua C API非常易于集成到应用程序中。从C语言中,您可以完全访问Lua状态和其本地数据类型。例如,我建议即使不需要脚本编写,也可以使用Lua获取哈希表实现。
用C语言编写的Lua函数可以作为全局名称注入,收集在可与大多数标准库函数一样的表中,或在DLL中实现并在运行时动态加载。这使应用程序可以提供稳定的API,并支持使用Lua或C编写的插件。
Lua作为一种语言具有令人惊奇的强大功能,支持函数式和面向对象的编程方式。它也特别轻量级:完整的源代码包和完整文档仅占用不到1MB的空间,在Windows上,整个VM、编译器和标准库的DLL只有164KB。
我自版本2以来就没有认真研究TCL了...我不会试图以具体的方式进行比较。我相信它们都是为了适应相同的领域,大约在同一时间发明的。它们肯定都是成熟的语言,拥有热情的用户社区。
我认为在使用中,Tcl将会提供更多你可能会发现必要或方便的库。
我想我与 RHSeeger 正相反。我曾经在游戏中(恰巧是在线游戏)中使用过 Lua 和 TCL,如果可以选择,我不会再碰 TCL。我的主观看法是 Lua 是一个健全的语言,而 TCL 不是。相对于其他脚本语言选项,TCL 语法对大多数人来说非常晦涩,有所有的 set、expr、美元符号和许多括号等等。它唯一具有的客观优势是容易嵌入 - 但 Lua 在这方面也不会退缩。
如果此脚本接口仅供您使用,那么您最好选择 TCL,因为 Lua 不会为您提供任何新功能(除非面向对象是您的项目)。在熟练用户的手中,TCL 是一个合理的工具。然而,如果您希望不太有经验的用户使用该系统,请选择 Lua - 简单的语法将为他们带来很多生产力。
正如其他人所述,这两种语言都可以很好地工作。第三个选择也可能同样适用于 JavaScript,因为它处于大致相同的范畴。我不想让你选择哪一个(因为我非常喜欢这两种语言),而是尝试着关注一些客观的差异,并指出我认为哪一个更优秀的地方。
在游戏服务器中最重要的问题可能是原始性能。这两种语言都是成熟而且优化良好的,但它们也都认识到有些问题最好通过推迟到编译代码的方式来优化。两者使用的基本上是相同的机制。从这两种语言本身的角度来看,看起来 Lua 有点更快。链接
从库的角度来看(这是下一个重要因素),两种语言都不需要使用任何库才能有用;与需要大型运行时库的 Java 等语言相比,这两种语言都非常小巧;这又是它们最初设计要求的结果。两者都有丰富的附加库可供选择,但我至少的印象是 TCL 在这个类别中拥有更多的变化。tcl:( Tcl 扩展档案 / Tcl 扩展库 ) lua: ( LuaForge )
另一个差异在于核心语言本身。两种语言都重视简单而不是风格,但这就是相似之处的尽头。Lua 使用对大多数程序员可能很熟悉的语法,具有非常简单的上下文无关文法。TCL 语法也很简单,但实际上与现有的其他语言没有任何共同之处,虽然它在表面上看起来有些像 Unix shell 语言。Tcl 可能只对非程序员更容易,因为它的基于行的命令语法非常清晰,但在其他语言中有经验的程序员通常会反对它的神秘语法。两者都不是在代码生成方面非常宽容,但它们都拥有强大的元编程工具(可以与 CLISP 宏相媲美,但可能没有那么强大)。
Lua有一个JIT编译器LuaJIT,可以在紧密循环中达到C语言的速度,它被用于一些性能关键的项目,如Snabb开关(Snabb可以处理数千兆的数据量,全部通过LuaJIT处理)。LuaJIT 中还有一个易于使用的FFI,可以让用户在不编写C存根代码的情况下访问C功能。
PUC-Lua(标准实现)支持从内存不足中恢复。但LuaJIT和TCL都不支持。
```markdown
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
老实说,它们俩都非常适合这个任务。两者都容易嵌入应用程序并且具有相对简单的语法。我知道在 Tcl 中添加新命令 (与应用程序交互) 非常简单,而我听说 Lua 在这方面也非常擅长。
我的建议是先尝试一段时间的 Lua,看看你是否喜欢它 (因为你已经了解了 Tcl)……然后选择最舒适的那个。如果你要写大量的代码,你最终会不停地使用它,所以你需要一个你自己能用得舒服的东西。最终,对于你的最终用户来说,这两种语言选择应该都是相当容易脚本化的。
我的个人偏好是 Tcl,因为我不喜欢 Lua (我在 Warcraft 的插件中已经做了相当多的编程),并且我喜欢 Tcl (我在职业和私人工作中都做了很多编程)。
编辑: 添加了关于两种语言都容易为最终用户脚本化的备注。我得到了两个反对票,我想不出别的可能性,这可能是因为我没有阐明我陈述中的原因。