我正在研究脚本语言以嵌入到应用程序中。
我一直认为Lua是最好的选择,但我已经阅读了一些关于嵌入V8的新闻,并且正在考虑使用它。
我的问题有两个:
有嵌入v8(或任何javascript引擎)经验的人是否推荐它?
与嵌入Lua相比如何?
我喜欢v8有一个c ++嵌入API。然而,Lua API有很多时间需要改进(更新的并不总是更好,所有这些)。
注意:我不关心哪种语言/库更好或哪种语言/库有更好的性能。我只是询问嵌入的简易性。
答案 0 :(得分:17)
v8只是 ok 。我曾尝试将它用作视频游戏的脚本解释器,结果好坏参半。一方面,它非常快,API很简单;但另一方面,它并没有真正很好地封装解释器的状态。因为代码库充满了全局变量,如果你需要在应用程序中间重置v8,或者从多个线程并行运行它,你基本上就不好运了。从Chrome的每个虚拟机一个进程模型的角度来看,这些设计决策是可以理解的,但是将它集成到可能希望同时运行多个虚拟机的游戏(例如游戏服务器后端)中有点尴尬),或者有一些方法可以快速序列化/重置整个解释器的状态。
由于这些原因,我实际上建议你尝试给Lua第二次机会。作为一种语言,它往往更适合游戏编程任务,而且它有一些漂亮的功能,使游戏脚本更方便(例如,协同程序)。
答案 1 :(得分:4)
最近有一篇关于HackerNews的文章,关于Nginx的作者讨论了V8作为嵌入式脚本语言的(非)适用性: http://news.ycombinator.net/item?id=2519674
Lua肯定更适合一般的嵌入目的,而V8可能会以某种方式工作,如果你更喜欢熟悉的Javascript。
答案 2 :(得分:3)
Lua很容易嵌入,但扩展API的级别低于V8。它是一个基于堆栈的API,你可以使用一些原语。它的强大功能并不强大,它非常强大,并且不会以任何方式限制您,如果您只想将全局函数导出到该语言中,那么这是一个明智的选择。但是,将C ++对象导出到Lua中需要您了解Lua的元数据,并且您最初可能会发现它非常混乱。 V8可能会更直接。
如果你想要一个为你做更多工作的Lua嵌入API,那么有像Luabind或ToLua ++这样的库。 Lua不会让你为你不使用的东西买单。
我 personaly不会在Lua上使用Javascript。 Javascript是一种非常好的语言,考虑到一位工程师在几周内写了它,但是Lua已经很多更多的时间和思想投入其中。它是一个CS宝石,充分利用了一小部分精心挑选的概念。它可以完成Javascript所做的一切,但更好。它具有适当的词法范围,尾递归,一个非常强大的元编程工具,可以模拟Javascript基于原型的继承(以及其他),协同程序等。它只是一种更干净,更好的语言。
我可能选择Javascript的一个原因是,如果我知道我的观众已经知道Javascript,但我曾经用TCL做过一次并且后悔(虽然JS远没有TCL那么糟糕;你不能去< em>那错了。)
答案 3 :(得分:2)
我个人嵌入Lua的经历是,它非常可怕。 Lua API仅针对C设计,并显示。您可以获得各种包装库,但它们有自己的问题。
我没有尝试过V8,但简短的概述似乎认为它有很多有用的东西,比如RAII和模板,所以我会投票支持。
答案 4 :(得分:2)
不幸的是我没有嵌入V8的经验,所以我不能直接回答你的问题,但我发现嵌入Lua非常容易。 C api是冗长的,但也非常简单易于掌握,并且非常有效地管理Lua和C之间的过渡。
如果C ++是您的首选语言,我相信Lua也可以像C ++一样干净地编译,并且还有可用的C ++包装器。
答案 5 :(得分:2)
v8可以操纵JSON。纯粹的卢阿不能。但是,lua有许多库足以定制您的应用程序。但是v8没有库。 v8仅提供javascript引擎。例如,我们不能只用v8编写文件。 要使用v8编写文件,您应该添加可以从javascript访问的API。 如果您希望轻松实现强大的嵌入,例如网络访问,自动化等,您最好使用lua。或者,如果你希望美丽,请使用v8。 :)
抱歉我的英语很差。
答案 6 :(得分:0)
我会建议v8。谷歌倾向于制作漂亮的API,它看起来很容易嵌入。
我不会说什么是“更好”的语言,因为这显然是主观的,你说你不想听到这个建议。但我可以说Javascript确实有很多人知道如何使用它。
答案 7 :(得分:0)
反映您的观点:仅仅因为脚本语言是旧的,不会使它更精致。否则,通过C ++引入Cobol / Fortran / Assembly。
我选择v8而不是Lua。