JavaScript的嵌入易于操作。
我正在研究嵌入到一个应用程序中的脚本语言。
我一直以为 Lua 是最好的选择,但我最近读到一些关于嵌入 V8 的新闻,考虑使用它代替。
我的问题有两个方面:
是否有经验嵌入 V8(或任何 JavaScript 引擎)的人推荐它吗?
它与嵌入 Lua 相比如何?
我喜欢 v8 有 C++ 嵌入 API。然而,Lua API 已经有很多时间被精炼(新不一定是更好的)。
注意:我不关心哪种语言/库更好或哪种有更好的性能。我只问易于嵌入的问题。
原文链接 https://stackoverflow.com/questions/6334618
我建议使用 v8。谷歌往往会提供不错的 API,而且看起来嵌入很容易。
我不会谈论哪种语言更好,因为这显然是主观的,而且你说你不想听这个建议。但我可以说,JavaScript 确实有很多人知道如何使用它。
我的个人经验是嵌入 Lua 非常困难。Lua API 只为 C 设计,这也导致它的缺陷显而易见。虽然你可以使用不同的封装库,但它们也有自己的问题。
虽然我没有尝试过 V8,但简要概述似乎表明它拥有 RAII 和模板等有用的功能,因此我会支持它。
很不幸,我没用过嵌入 V8 的经验,所以无法直接回答你的问题,但我发现嵌入 Lua 很容易。C API 写法冗长,但同样也很简单,很容易理解,并且可以在 Lua 和 C 之间管理转换。
如果你更喜欢使用 C++,我相信 Lua 编译成 C++ 也是干净的,并且还有可用于它的 C++ 包装器。
v8
只是一般般。我曾尝试将它用作视频游戏的脚本解释器,结果好坏参半。一方面,它很快,并且 API 简单;但另一方面,它并没有很好地封装解释器的状态。因为代码库中充斥着全局变量,所以如果你需要在应用程序中间重置 v8
,或者从多个线程中并行运行它,你没法做到。这些设计决策从 Chrome 每个 VM 一个进程的模型的角度来看是可以理解的,但它使得将其集成到像游戏这样的东西中有些棘手,你可能想要同时运行多个 VM(例如在游戏服务器后端),或者有一些快速序列化/重置整个解释器状态的方式。
出于这些原因,我实际上建议你再给 Lua 一次机会。作为一种语言,它往往更适合于游戏编程任务,而且它还有一些很棒的功能,使得游戏脚本编写更加方便(例如,协程)。
将下面翻译成中文并且保留原本的 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。
v8
可以操作 JSON
,而纯 lua
不能。然而,lua
有许多库足以定制您的应用程序。但是 v8
没有库。v8
只提供 javascript
引擎。例如,我们不能仅使用 v8
写文件。如果要使用 v8
写文件,则应添加可以从 javascript
访问的 API
。如果您希望轻松嵌入强大的控制,例如网络访问、自动化等,则最好使用 lua
。或者,如果您希望美观,请使用 v8
。 :)
对不起,我的英语很差。
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那么糟糕;你不会在这里走得__那么__错)。
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
有一篇关于 Nginx 作者讨论 V8 是否适合作为嵌入式脚本语言的最近文章发表在 HackerNews 上: http://news.ycombinator.net/item?id=2519674
Lua 明显更适合一般的嵌入式目的,而如果你更喜欢 JavaScript 的熟悉感,V8 也可能能够工作。