什么时候使用嵌入式脚本语言,比如Lua,是有效的?

我已经玩魔兽世界约2年了,我非常好奇用Lua编写插件。由于我到目前为止所读的关于Lua的内容是“快速”,“轻便”和“很棒”,我想知道如何以及何时使用它。

何时需要在系统中嵌入类似Lua的脚本语言的典型情况是什么?

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

点赞
stackoverflow用户60711
stackoverflow用户60711

实时约束下的应用快速开发

计算机游戏就是其中之一;-)

2009-02-26 17:26:26
stackoverflow用户36897
stackoverflow用户36897

如果您想允许第三方为您的软件开发插件或模组,那么这是一个有效的解决方案。

您可以在任何使用的语言中实现 API,但像 LUA 这样的脚本语言更简单易用,适合业余开发人员。

2009-02-26 17:27:02
stackoverflow用户64657
stackoverflow用户64657

当您需要让最终用户定义/更改系统而不需要重写系统时,此功能将被使用。它被用于游戏中以允许扩展或允许主要游戏引擎保持不变,同时允许内容被更改。

2009-02-26 17:27:36
fightsyj
fightsyj

Lua是:

  • 轻量级的
  • 易于集成,即使在像游戏这样的异步环境中也是如此
  • 对于集成人员、设计师和艺术家等非程序员来说学习容易

由于游戏通常需要所有这些品质,因此Lua主要用于游戏中。其他情况可能是需要一些脚本功能的任何应用程序,但开发人员通常会选择一个稍微重一些的解决方案,例如.Net或Python。

2009-02-26 17:28:04
stackoverflow用户62525
stackoverflow用户62525

嵌入式脚本语言同样适用于存储配置信息。据我所知,Mozilla 系列浏览器都使用 JavaScript 来处理配置信息。

其次,嵌入式脚本语言非常适合用于开发插件。您可以创建一个自定义 API 来为插件开发人员提供支持,而插件开发人员也能够通过使用完整的语言获得很大的自由度。

还有一种情况是当平面文件不够表达时,如果您想编写数据驱动的应用程序,其中行为是参数化的,您将会厌倦在配置组合上测试长字符串的条件。此时,最好将规则和其评估编写到配置文件中。

这个主题在书籍《程序员修炼之道》中也有一些涉及。

2009-02-26 17:32:37
stackoverflow用户14455
stackoverflow用户14455

除了提到的脚本编写和可配置性案例之外,我想简单地说明 Lua+C(或 Lua+C++)是与 任何 软件开发完美匹配。它允许将引擎 / 使用界面分离,其中引擎由 C / C++ 实现,行为或自定义则由 Lua 实现。

OS X Cocoa 有 Objective-C(C 和 Smalltalk 的混合体,在此语言随代码行而变化)。我认为 Lua+C 类似,只是语言随着源文件而变化,这对我而言是更好的抽象。

您不希望使用 Lua 的原因也值得注意。因为它几乎没有一个好的调试器。但另一方面,人们好像也没有太大的需要。 :)

2009-03-08 16:33:00
stackoverflow用户88888888
stackoverflow用户88888888

除了其他人提到的所有优点外,将 Lua 嵌入 C 中在需要操作文本、处理文件或者仅仅需要一种更高级的编程语言时非常有用。Lua 有很多巧妙的特性(如表、函数是第一类值、许多其他好东西)。而且,尽管 Lua 不像 C 或 C++ 那样快速,但它对于一个解释性语言来说还是相当快的。

2009-04-21 13:55:13
stackoverflow用户88070
stackoverflow用户88070

一个像 Lua 这样的脚本语言也可以用于在应用程序运行时进行代码更改(立即生效)。在 WoW 中可能看不到这一点,因为据我所记,代码是在启动时加载的(而不是在运行时重新检查和重新加载)。

但是,再想想另一个例子:Web 服务器和脚本语言 - 幸运的是,您可以在不必重新编译 Apache 或重新启动 Apache 的情况下更改您的 PHP 代码。

Steve Yegge 在为自己的 MMORPG 引擎(Powering Wyvern)wyvern 进行了这项工作,使用了 Jython 或 Rhino 和 JavaScript(记不清楚了)。他在 Java 中编写了核心引擎,但在 Python/JavaScript 中编写了程序逻辑。

这的效果是:

  • 当更改脚本时,他无需重新启动核心引擎,因为这样会将所有玩家断开连接
  • 他可以让其他人做一些简单的编程工作,比如定义新的物品和怪物,而不必将所有关键代码都暴露给他们
  • 沙箱:如果脚本内部出现错误,您可以优雅地处理它,而不会危及周围的应用程序
2009-04-23 06:24:52