我有一个c++server边项目,我需要嵌入某种形式的脚本。它是一个在线网络游戏的类型的服务器。我有重要的经验使用TCL,并且它似乎是天作之合。我做最小量的Lua在我的游戏dev天,我不知道,如果这可能是一种更好的语言,用于嵌入式脚本。它也是很好的学习一门新的语言。什么是相对的优势和弱点的TCL vs Lua?谢谢!

有帮助吗?

解决方案

老实说,他们都非常适合这项任务。两者都很容易嵌入到应用程序中,并且具有相当简单的语法。我知道在Tcl中添加新命令(与应用程序交互)非常简单,我告诉Lua也非常擅长此类事情。

我的建议是和Lua玩一会儿来看看你喜欢它(因为你已经知道了Tcl)......然后选择一个让你觉得最舒服的那个。如果你正在编写大部分代码,那么你最终会使用它,所以你也需要一些你可以使用的东西。最后,两种语言选择都应该相当容易让最终用户编写脚本。

我个人的偏好是Tcl,因为我不喜欢Lua(我已经为魔兽插件做了大量的编程)而且因为我喜欢Tcl(我已经完成了大量的编程)专业和私人工作)。

编辑:添加了关于最终用户都很容易的说明。获得了2张选票,除了不澄清我发言的部分原因之外,他无法想到其他任何事情。

其他提示

我猜我是对的RHSeeger。我已经使用两Lua和TCL嵌入游戏(在线游戏,顺便说一句)和我不会碰TCL再次带一个10'bargepole如果我有的选择。我非常主观的意见是,Lua是一个理智的语言和TCL不是。相对于其他的选择脚本语言,TCL法是非常模糊,大多数人,所有的设定和expr和美元标志和很多的方括号等。唯一的目标受益,它已经是了便于嵌入-但Lua是没有懈怠,在该部门。

如果这个脚本接口是纯粹是为了你,然后你可以去TCL因为Lua不会给你提供任何新的东西,(除非对象的取向是你的事)。在手中的一个技术用户TCL是一个合理工具。但是,如果你期待不少经验丰富的用户使用的系统,然后再与Lua-简单的语法将他们买了很多的生产力。

我怀疑Tcl会有更多您可能认为必要或方便的库。

正如其他人所说,两种语言都能很好地运作。第三种选择也可能同样适用于JavaScript,因为它适用于大致相同的利基市场。而不是试图把你佑到一个或另一个(因为我非常喜欢这两种语言),我会尝试关注一些客观的差异,并指出我认为一个领先于另一个的地方。

游戏服务器中最重要的问题可能是原始性能。这两种语言都是成熟且经过优化的,但两者都认识到,通过推迟编译代码可以最好地优化某些问题。两种语言使用基本相同的机制来执行此操作。从语言本身的角度来看,看起来Lua的速度要快一些。 链接

从图书馆的角度来看,这是下一个重要因素,两种语言都不需要使用任何图书馆。与Java等需要大型运行时库有用的语言相比,这两种语言都非常紧凑;同样,这是他们原始设计要求的结果。这两种语言都有丰富的附加库可供选择,但至少我的印象是TCL在这一类别中有更多的变化。 tcl :( Tcl Extension Archive / Tcl Extension Repository )lua:( LuaForge

另一个区别在于核心语言本身。两种语言都重视简约而不是风格,但这就是相似性结束的地方。 Lua使用大多数程序员可能熟悉的语法,使用非常简单的上下文无关语法。 TCL语法也很简单,但与其他现有语言没有任何共同之处,尽管它看起来有点像unix shell语言。 Tcl可能只对非程序员更容易,因为它的面向行的命令语法非常清楚,但是在其他语言中经验丰富的程序员通常会反对其神秘的语法。在代码生成方面,两者都不是非常宽容,但两者都具有强大的元编程功能(可比,但可能不如CLISP宏那么强大)。

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

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

Lua作为一种语言非常强大,支持功能和面向对象的编程风格。它还具有令人惊讶的轻量级:完整的源代码套件和完整的文档适用于1 MB以下,并且DLL中的整个VM,编译器和标准库在Windows上仅为164KB。

我从第2版开始就没有认真检查过TCL ......我不会尝试以具体方式对它们进行比较。我相信它们都是为了适应相同的利基而发明的,并且大约在同一时间。它们当然都是具有狂热用户社区的成熟语言。

Lua有 LuaJIT ,它是一个JIT编译器,在紧密循环中达到C速度,用于 Snabb Switch ,性能至关重要(Snabb可以处理每秒千兆位,全部通过LuaJIT处理)。 LuaJIT还有一个易于使用的 FFI ,它允许用户无需编写C存根代码即可访问C函数。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top