什么时候使用嵌入式脚本语言,比如Lua,是有效的?
我已经玩魔兽世界约2年了,我非常好奇用Lua编写插件。由于我到目前为止所读的关于Lua的内容是“快速”,“轻便”和“很棒”,我想知道如何以及何时使用它。
何时需要在系统中嵌入类似Lua的脚本语言的典型情况是什么?
原文链接 https://stackoverflow.com/questions/591523
如果您想允许第三方为您的软件开发插件或模组,那么这是一个有效的解决方案。
您可以在任何使用的语言中实现 API,但像 LUA 这样的脚本语言更简单易用,适合业余开发人员。
当您需要让最终用户定义/更改系统而不需要重写系统时,此功能将被使用。它被用于游戏中以允许扩展或允许主要游戏引擎保持不变,同时允许内容被更改。
Lua是:
- 轻量级的
- 易于集成,即使在像游戏这样的异步环境中也是如此
- 对于集成人员、设计师和艺术家等非程序员来说学习容易
由于游戏通常需要所有这些品质,因此Lua主要用于游戏中。其他情况可能是需要一些脚本功能的任何应用程序,但开发人员通常会选择一个稍微重一些的解决方案,例如.Net或Python。
嵌入式脚本语言同样适用于存储配置信息。据我所知,Mozilla 系列浏览器都使用 JavaScript 来处理配置信息。
其次,嵌入式脚本语言非常适合用于开发插件。您可以创建一个自定义 API 来为插件开发人员提供支持,而插件开发人员也能够通过使用完整的语言获得很大的自由度。
还有一种情况是当平面文件不够表达时,如果您想编写数据驱动的应用程序,其中行为是参数化的,您将会厌倦在配置组合上测试长字符串的条件。此时,最好将规则和其评估编写到配置文件中。
这个主题在书籍《程序员修炼之道》中也有一些涉及。
除了提到的脚本编写和可配置性案例之外,我想简单地说明 Lua+C(或 Lua+C++)是与 任何 软件开发完美匹配。它允许将引擎 / 使用界面分离,其中引擎由 C / C++ 实现,行为或自定义则由 Lua 实现。
OS X Cocoa 有 Objective-C(C 和 Smalltalk 的混合体,在此语言随代码行而变化)。我认为 Lua+C 类似,只是语言随着源文件而变化,这对我而言是更好的抽象。
您不希望使用 Lua 的原因也值得注意。因为它几乎没有一个好的调试器。但另一方面,人们好像也没有太大的需要。 :)
除了其他人提到的所有优点外,将 Lua 嵌入 C 中在需要操作文本、处理文件或者仅仅需要一种更高级的编程语言时非常有用。Lua 有很多巧妙的特性(如表、函数是第一类值、许多其他好东西)。而且,尽管 Lua 不像 C 或 C++ 那样快速,但它对于一个解释性语言来说还是相当快的。
一个像 Lua 这样的脚本语言也可以用于在应用程序运行时进行代码更改(立即生效)。在 WoW 中可能看不到这一点,因为据我所记,代码是在启动时加载的(而不是在运行时重新检查和重新加载)。
但是,再想想另一个例子:Web 服务器和脚本语言 - 幸运的是,您可以在不必重新编译 Apache 或重新启动 Apache 的情况下更改您的 PHP 代码。
Steve Yegge 在为自己的 MMORPG 引擎(Powering Wyvern)wyvern 进行了这项工作,使用了 Jython 或 Rhino 和 JavaScript(记不清楚了)。他在 Java 中编写了核心引擎,但在 Python/JavaScript 中编写了程序逻辑。
这的效果是:
- 当更改脚本时,他无需重新启动核心引擎,因为这样会将所有玩家断开连接
- 他可以让其他人做一些简单的编程工作,比如定义新的物品和怪物,而不必将所有关键代码都暴露给他们
- 沙箱:如果脚本内部出现错误,您可以优雅地处理它,而不会危及周围的应用程序
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
实时约束下的应用快速开发
计算机游戏就是其中之一;-)