易于嵌入javascript

问题描述

|| 我正在研究脚本语言以嵌入到应用程序中。 我一直认为Lua是最好的选择,但是我已经阅读了一些有关嵌入V8的最新消息,并正在考虑使用它。 我的问题有两个: 有经验的人可以嵌入v8(或任何JavaScript引擎)吗? 与嵌入Lua相比有什么不同? 我喜欢v8具有c ++嵌入API。但是Lua API有很多时间需要完善(更新并不总是那么好)。 注意:我不关心哪种语言/库更好或哪种性能更好。我只是问嵌入的难易程度。     

解决方法

        v8还可以。一段时间前,我尝试将其用作视频游戏的脚本解释器,但结果却不尽相同。一方面,它非常快而且API很简单;但是另一方面,它实际上并不能很好地封装解释器的状态。由于代码库中充斥着全局变量,因此,如果您需要在应用程序中间重置v8或从多个线程并行运行v8,则基本上就不走运了。这些设计决策从Chrome的“每虚拟机一个进程”模型的角度是可以理解的,但将其集成到类似游戏的内容中可能有点麻烦,在该游戏中您可能希望一次运行多个VM(例如在游戏中)服务器后端),或采用某种方法快速序列化/重置整个解释器的状态。 由于这些原因,我实际上建议您尝试给Lua第二次机会。作为一种语言,它往往更适合于游戏编程任务,此外,它还具有一些漂亮的功能,这些功能使游戏脚本编写方式更加方便(例如协程)。     ,        最近在HackerNews上发表了一篇有关Nginx作者的文章,其中讨论了V8作为嵌入式脚本语言的(非)适用性: http://news.ycombinator.net/item?id=2519674 Lua绝对更适合于一般的嵌入目的,而如果您更喜欢Javascript,则可以使V8以某种方式工作。     ,        Lua的嵌入微不足道,但扩展API的级别比V8的级别低。这是一个基于堆栈的API,您可以使用一些原语。它的功能同样强大,非常强大,并且不会以任何方式限制您,并且,如果您只想将全局函数导出到该语言中,那将是显而易见的。但是,将C ++对象导出到Lua要求您了解Lua的元表,并且一开始可能会感到非常困惑。 V8可能会使其更简单。 如果您希望Lua嵌入API为您做更多的工作,可以使用Luabind或ToLua ++之类的库。 Lua不会让您为不使用的东西付费。 我个人不会在Lua上使用Javascript。考虑到一位工程师在几周内编写了Javascript,它是一种非常好的语言,但是Lua投入了更多的时间和思想。它是CS的瑰宝,它充分利用了一小部分经过精心选择的概念。它可以完成Javascript所做的所有工作,但效果更好。它具有适当的词法作用域,尾部递归,非常强大的元编程功能,可以模仿Javascript基于原型的继承(以及其他),协程等,它只是一种更简洁,更好的语言。 我之所以选择Javascript的原因之一是,如果我知道我的听众已经知道Javascript,但是我曾经用TCL做到这一点,并为之感到遗憾(尽管JS远没有TCL那么糟糕;在这里,你不会错了)。     ,        我个人嵌入Lua的经验是,它非常糟糕。 Lua API仅针对C设计,它显示了。您可以获得各种包装库,但是它们都有自己的问题。 我没有尝试过V8,但是简短的概述似乎认为它具有RAII和模板之类的有用功能,因此我投票赞成。     ,        不幸的是,我没有嵌入V8的经验,因此我无法直接回答您的问题,但是我发现嵌入Lua非常简单。 C api非常冗长,但也非常简单易懂,并且非常有效地管理Lua和C之间的过渡。 如果C ++是您的首选语言,我相信Lua也可以像C ++一样干净地进行编译,并且也有C ++包装器可用。     ,v8可以操纵JSON。纯粹是lua不能。但是,lua有许多库足以定制您的应用程序。但是v8没有库。 v8仅提供javascript引擎。例如,我们不能仅使用v8编写文件。 要使用v8编写文件,您应该添加可以从javascript访问的API。 如果您希望轻松地进行强大的嵌入,例如网络访问,自动化等,则最好使用lua。或者,如果您希望美观,请使用v8。 :) 对不起,我英语不好。     ,        我建议v8。 Google倾向于制作漂亮的API,并且看起来很容易嵌入。 我不会说哪种语言是“更好的”语言,因为这显然是主观的,并且您说过您不想听那个建议。但是我可以说Java语言肯定有很多知道如何使用它的人。     ,        反映您的观点:仅仅因为脚本语言是旧的,并不能使其更加精致。否则,请通过C ++启动Cobol / Fortran / Assembly。 我会选择Lua而不是v8。