JavaScript的嵌入易于操作。

我正在研究嵌入到一个应用程序中的脚本语言。

我一直以为 Lua 是最好的选择,但我最近读到一些关于嵌入 V8 的新闻,考虑使用它代替。

我的问题有两个方面:

是否有经验嵌入 V8(或任何 JavaScript 引擎)的人推荐它吗?

它与嵌入 Lua 相比如何?

我喜欢 v8 有 C++ 嵌入 API。然而,Lua API 已经有很多时间被精炼(新不一定是更好的)。

注意:我不关心哪种语言/库更好或哪种有更好的性能。我只问易于嵌入的问题。

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

点赞
stackoverflow用户166071
stackoverflow用户166071

有一篇关于 Nginx 作者讨论 V8 是否适合作为嵌入式脚本语言的最近文章发表在 HackerNews 上: http://news.ycombinator.net/item?id=2519674

Lua 明显更适合一般的嵌入式目的,而如果你更喜欢 JavaScript 的熟悉感,V8 也可能能够工作。

2011-06-13 18:41:24
stackoverflow用户226507
stackoverflow用户226507

我建议使用 v8。谷歌往往会提供不错的 API,而且看起来嵌入很容易。

我不会谈论哪种语言更好,因为这显然是主观的,而且你说你不想听这个建议。但我可以说,JavaScript 确实有很多人知道如何使用它。

2011-06-13 18:45:46
stackoverflow用户298661
stackoverflow用户298661

我的个人经验是嵌入 Lua 非常困难。Lua API 只为 C 设计,这也导致它的缺陷显而易见。虽然你可以使用不同的封装库,但它们也有自己的问题。

虽然我没有尝试过 V8,但简要概述似乎表明它拥有 RAII 和模板等有用的功能,因此我会支持它。

2011-06-13 19:10:25
stackoverflow用户618963
stackoverflow用户618963

很不幸,我没用过嵌入 V8 的经验,所以无法直接回答你的问题,但我发现嵌入 Lua 很容易。C API 写法冗长,但同样也很简单,很容易理解,并且可以在 Lua 和 C 之间管理转换。

如果你更喜欢使用 C++,我相信 Lua 编译成 C++ 也是干净的,并且还有可用于它的 C++ 包装器。

2011-06-14 01:19:51
stackoverflow用户293627
stackoverflow用户293627

v8 只是一般般。我曾尝试将它用作视频游戏的脚本解释器,结果好坏参半。一方面,它很快,并且 API 简单;但另一方面,它并没有很好地封装解释器的状态。因为代码库中充斥着全局变量,所以如果你需要在应用程序中间重置 v8,或者从多个线程中并行运行它,你没法做到。这些设计决策从 Chrome 每个 VM 一个进程的模型的角度来看是可以理解的,但它使得将其集成到像游戏这样的东西中有些棘手,你可能想要同时运行多个 VM(例如在游戏服务器后端),或者有一些快速序列化/重置整个解释器状态的方式。

出于这些原因,我实际上建议你再给 Lua 一次机会。作为一种语言,它往往更适合于游戏编程任务,而且它还有一些很棒的功能,使得游戏脚本编写更加方便(例如,协程)。

2011-06-16 17:57:51
stackoverflow用户88888888
stackoverflow用户88888888

将下面翻译成中文并且保留原本的 markdown 格式,

To reflect your point: just because a scripting language is old, does not make it more refined. Otherwise, bring on Cobol/Fortran/Assembly over C++.

I'd choose v8 over Lua.

为了反映你的观点:仅因一种脚本语言是老的,并不意味着它更加精致。不然,就应该使用 Cobol/Fortran/Assembly 取代使用 C++。 我会选择 v8 而不是 Lua。

2011-06-17 04:34:55
stackoverflow用户720391
stackoverflow用户720391

v8 可以操作 JSON,而纯 lua 不能。然而,lua 有许多库足以定制您的应用程序。但是 v8 没有库。v8 只提供 javascript 引擎。例如,我们不能仅使用 v8 写文件。如果要使用 v8 写文件,则应添加可以从 javascript 访问的 API。如果您希望轻松嵌入强大的控制,例如网络访问、自动化等,则最好使用 lua。或者,如果您希望美观,请使用 v8。 :)

对不起,我的英语很差。

2011-06-21 03:05:12
stackoverflow用户501459
stackoverflow用户501459

Lua是非常容易嵌入的,但是它的扩展API比V8的低级一些。它是一个基于栈的API,你只有少量的原始元素可以使用。它与JS一样强大,非常健壮,没有任何限制,如果你只想要将全局函数导出到语言中,它是一个无脑操作。但是,将C++对象导出到Lua中需要您了解Lua的元表,您可能会发现它非常令人困惑。V8可能使此过程更加简单。

如果您想要一个为您做更多工作的Lua嵌入式API,还有像Luabind或ToLua ++这样的库。Lua不会因为您不使用而让您付出额外的代价。

个人而言,我不会优先选择Javascript而非Lua。鉴于一个工程师只用了几周时间就写出了一个非常优秀的语言,Javascript确实不错,但是Lua拥有更多的时间和思考。它是一个计算机科学中的珠宝,充分利用了一组精心选择的概念。它做的所有事情都比Javascript好。它具有适当的词法作用域,尾递归,非常强大的元编程工具,可以模拟Javascript的基于原型的继承(以及其他东西),协同程序等。它只是一种更为简洁,更好的语言。

我选择Javascript而非Lua的一个原因是,如果我知道我的受众已经知道Javascript,但是我曾经做过这样的选择,选择了TCL,然后后悔了(尽管JS远远不及TCL那么糟糕;你不会在这里走得__那么__错)。

2011-06-22 03:43:19