当前位置:  开发笔记 > 编程语言 > 正文

你会在你的应用程序中嵌入哪个Javascript引擎?

如何解决《你会在你的应用程序中嵌入哪个Javascript引擎?》经验,为你挑选了6个好方法。

我想在我的业余爱好游戏引擎中嵌入Javascript.现在我们已经推出了第5代Javascript引擎(速度极快)我很好奇你会选择在C++框架中嵌入什么引擎(包括嵌入它的实际容易程度)?

注意:为了说清楚,我对DOM脚本或在浏览器中编写Javascript不感兴趣.

这是迄今为止的链接汇编和线程的一些提示

蜘蛛猴

tracemonkey(注意:向后兼容spidermonkey):

V8

金鳞

仅仅为了记录,我喜欢Lua并且已经在游戏引擎中嵌入了大约5次工作.

然而,现在这是一个业余爱好项目,我认为Javascript被大多数Web开发人员所熟知,并且因为它的ECMA,Flash和Flex开发人员,使用Javascript和XML进行脚本编写的游戏引擎将更加用户友好并迎合更大的需求用户群(以及迄今为止没有机会使用他们的技能进行游戏的用户群)比使用Lua的用户群(并且周围有很多人!).

另外为了记录,我会在这个上使用V8,主要是因为我喜欢它的C++风格.



1> Stephen Deke..:

Mozilla的SpiderMonkey非常简单且记录完备.它是一个C API,但它很容易用C++包装.它可以被编译为线程安全的,这对游戏很有用,因为你可能想要在一个线程中使用主逻辑,在第二个线程中使用用户界面逻辑.

谷歌的V8可能是一个不错的选择,因为你使用的是C++,但我还没有使用它的经验.根据文档(感谢Daniel James),V8不是线程安全的,虽然这可能会在未来发生变化.

还有WebKit的SquirrelFish,但在我之前看时,我找不到它的独立版本.


有谁知道V8是否已成为线程安全?毕竟这些评论已经有4年了.谢谢.:)
@sidewinderguy:似乎对多线程应用程序有明确的支持.V8支持[`Isolate`](http://code.google.com/p/v8/source/browse/trunk/include/v8.h?r=r11107#2729)对象的概念,允许您分开运行**不同主题的口译员.但是,解释器不是线程安全的,并且跨多个线程使用相同的解释器仍然需要锁定与解释器的*all*交互(包括访问对象句柄).

2> postfuturist..:

我已经尝试过SpiderMonkey和V8.使用SpiderMonkey,我无法获得任何工作.我甚至无法在mozilla.org上获得编译的示例.

V8开箱即用,我得到了一些基本的C++ < - > Javascript交互很快.对于使用V8的人来说,有一些谷歌列表,我发现我的大部分问题都已在那里得到解答.


作为一个更新,我重新拿起了我几个月前用v8工作的项目.我抓住了最新版本的v8,我的程序编译和运行就像以前一样.这是一个非常稳定的API.我印象深刻.

3> Laserallan..:

Java Script是否真的适合您的游戏?许多游戏都使用Lua编程语言编写脚本.它易于集成,非常小,几乎可以在每个平台上编译,而且易于学习.

这个有点偏离主题,但是开箱即用的想法对于把事情做好是很重要的.


当你已经知道语言(或任何其他ecmascript派生词)时,javascript的优点就出现了,而且它与Lua相比,它与C++或Java有很多相似之处.但是,我确实同意Lua非常棒,占地面积小,超级易于嵌入.

4> Daniel James..:

我相信v8目前仅适用于x86,x64和arm处理器.这可能是一个缺点.

关于线程安全,来自include/v8.h:

 * Multiple threads in V8 are allowed, but only one thread at a time
 * is allowed to use V8.  The definition of 'using V8' includes
 * accessing handles or holding onto object pointers obtained from V8
 * handles.  It is up to the user of V8 to ensure (perhaps with
 * locking) that this constraint is not violated.

您可以在源文件中阅读更多内容(它看起来像doxygen文档,但它们似乎没有把它放在任何地方).

更新:该评论已被删除,可能是前一段时间.看起来v8现在有一个Isolate代表引擎实例的对象.单个Isolate实例一次只能在一个线程中使用,但其他Isolate实例可以同时在其他线程中使用.



5> Andrew Hedge..:

当V8第一次出现在V8上比其他引擎快1000%(或者更高)的场景时出现的基准测试结果非常偏向于支持擅长递归的引擎.如果你的代码使用了大量的递归,那么V8可能会在速度方面给你一个显着的优势.对于"现实世界"(目前,至少)网络内容,SquirrelFish Extreme目前似乎是落后的赢家(请参阅我关于我自己的非正式测试结果主题的博客文章).

正如其他人所指出的那样,易于集成和文档质量可能优于纯粹的速度.如果你不发货,这并不意味着杰克!


+1如果你不发货,它不代表杰克!

6> schoetbi..:

在谈到脚本引擎和c ++时,你也可以考虑使用chaiscript.它接近ecma脚本(~Javascript)并且很容易嵌入到c ++中.

来自网页的卖家:

...另一方面,ChaiScript是从头开始设计的,并考虑到了与C++的集成.... ChaiScript没有元编译器,没有库依赖,没有构建系统要求,也没有任何遗留的包袱.可以与您公开的任何C++函数无缝协作.它不必明确告知任何类型,它是以功能为中心的.

使用ChaiScript,您可以通过向程序添加三行代码而不是修改构建步骤来开始编写应用程序脚本.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有