Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scripting 什么时候可以使用像Lua这样的嵌入式脚本语言_Scripting_Lua - Fatal编程技术网

Scripting 什么时候可以使用像Lua这样的嵌入式脚本语言

Scripting 什么时候可以使用像Lua这样的嵌入式脚本语言,scripting,lua,Scripting,Lua,我玩魔兽世界大约有两年了,我对Lua很好奇,它是用来写插件的。因为到目前为止我读到的关于Lua的内容是“快”、“轻”和“这很棒”,所以我想知道如何以及何时使用它 典型情况下,您需要在系统中嵌入Lua之类的脚本语言吗?针对具有实时约束的应用程序的快速开发。电脑游戏就是其中之一;-) 如果您希望允许第三方为您的软件开发插件或MOD,这是一个有效的解决方案 您可以用您正在使用的任何语言实现API,但是像LUA这样的脚本语言往往更简单,对于临时开发人员来说更容易访问。当您需要最终用户能够定义/更改系统而

我玩魔兽世界大约有两年了,我对Lua很好奇,它是用来写插件的。因为到目前为止我读到的关于Lua的内容是“快”、“轻”和“这很棒”,所以我想知道如何以及何时使用它


典型情况下,您需要在系统中嵌入Lua之类的脚本语言吗?

针对具有实时约束的应用程序的快速开发。电脑游戏就是其中之一;-)

如果您希望允许第三方为您的软件开发插件或MOD,这是一个有效的解决方案


您可以用您正在使用的任何语言实现API,但是像LUA这样的脚本语言往往更简单,对于临时开发人员来说更容易访问。

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

Lua是:

  • 轻量级
  • 易于集成,即使在异步环境(如游戏)中
  • 易于学习的非程序员工作人员,如集成商,设计师和艺术家

由于游戏通常需要所有这些品质,Lua在那里被广泛使用。其他情况可能是需要一些脚本功能的任何应用程序,但开发人员通常会选择更重的解决方案,如.Net或python。

嵌入式脚本语言也适用于存储配置信息。最后我检查了一下,Mozilla系列都使用JavaScript作为配置信息

接下来,它们非常适合开发插件。您可以创建一个自定义API来向插件开发人员公开,插件开发人员可以从使用整个语言中获得很多自由

另一种情况是平面文件表达能力不足。如果您想编写行为参数化的数据驱动应用程序,您将对配置组合的长字符串条件测试感到厌倦。发生这种情况时,最好将规则及其计算结果写入配置中


本主题在Pragramtic Programmer一书中得到了一些介绍。

除了提到的脚本和可配置性案例之外,我只想说Lua+C(或Lua+C++)是任何软件开发的完美匹配。它允许用户创建一个引擎/使用接口,其中引擎在C/C++中完成,行为或定制在Lua中完成

OSXCocoa有Objective-C(C和Smalltalk Amalga,语言按行变化)。我发现Lua+C与之类似,只是源文件改变了语言,这对我来说是更好的抽象


您不想使用Lua的原因也是值得注意的。因为它几乎没有一个好的调试器。再说一次,人们似乎也不太需要

除了其他人提到的所有优秀理由外,当您需要操作文本、处理文件或只需要更高级的语言时,在C中嵌入Lua非常有用。Lua有很多漂亮的特性(表、函数都是一流的值,还有很多其他的好东西)。此外,虽然Lua的速度不如C或C++,但是对于解释的语言来说,它是非常快的。如果你在应用程序运行时必须改变代码(即时生效),那么也可以使用类似于Lua的脚本语言。在wow中可能看不到这一点,因为据我记忆所及,代码是在开始时加载的(在运行时没有重新检查和加载)

但想想另一个例子:webserver和脚本语言(谢天谢地),您可以更改php代码,而无需重新编译apache或重新启动apache

steve yegge使用jython或rhino和javascript(不记得了)为自己的mmorpg引擎供电。他用java编写了核心引擎,但用python/javascript编写了程序逻辑

其效果是:

  • 更改脚本时,他不必重新启动核心引擎,因为这样会断开所有玩家的连接
  • 他可以让其他人做更简单的编程,比如定义新项目和怪物,而不向他们公开所有关键代码
  • 沙盒:如果脚本内部发生错误,您可以优雅地处理它,而不会危及周围的应用程序

其他使用Lua的非游戏应用程序,既可扩展又易于开发/重构:apt、nmap、单调、Adobe LightRoom、love2d、WildPocket