我们将在应用程序中嵌入哪个Javascript引擎?

时间:2020-03-06 14:21:58  来源:igfitidea点击:

我想将Javascript嵌入到我的爱好游戏引擎中。现在我们已经有了第5代Javascript引擎(都非常快),我很好奇我们会选择将哪种引擎嵌入到C ++框架中(包括嵌入的实际难易程度)?

注意:为了清楚起见,我对DOM脚本或者在浏览器中编写Java脚本不感兴趣。

这是到目前为止的链接汇编,以及该线程的一些技巧

  • 蜘蛛猴
  • tracemonkey(注意:向后兼容Spidermonkey):
  • V8
  • 松鼠鱼

仅出于记录目的,我喜欢Lua,并且已经在工作中将其嵌入到游戏引擎中约5次。

但是,现在这是一个业余项目,我认为大多数Web开发人员都知道Javascript,并且因为它的ECMA,Flash和Flex开发人员,使用Javascript和XML编写脚本的游戏引擎将更加人性化,并且可以满足更大的需求用户群(到目前为止,还没有机会使用他们的技能来玩游戏)比使用Lua的用户群(而且周围还有很多!)。

另外,出于记录目的,我将在这个版本上使用V8,主要是因为我喜欢它的C ++风格。

解决方案

Mozilla的SpiderMonkey相当简单并且有据可查。这是一个C API,但是将其包装在C ++中非常简单。可以将其编译为线程安全的,这对游戏很有用,因为我们可能希望将主逻辑放在一个线程中,将用户界面逻辑放在另一个线程中。

由于我们使用的是C ++,因此Google的V8可能是一个不错的选择,但是我还没有使用它的经验。根据文档(感谢Daniel James),V8不是线程安全的,尽管将来可能会改变。

也有WebKit的SquirrelFish,但是当我较早时,我找不到它的独立版本。

我会等一下TraceMonkey,它是SpiderMonkey的下一个改进版本。更快,更好的设计。 (使用从Adobe Flash捐赠的代码)。

Tracemonkey引以为豪的是,通过根据实际使用情况在运行时积极优化结构来加快重复动作的执行速度,这对于游戏的扩展非常方便。

我们可能还想看看Google提供的V8. 不过,这是很新的。

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

这有点不合时宜,但是跳出框框思考对于正确解决问题可能很重要。

我相信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现在具有一个"隔离"对象,该对象代表引擎的实例。单个"孤立"实例一次只能在单个线程中使用,但是其他"孤立"实例可以同时在其他线程中使用。

我会密切关注v8,因为它正在尖叫着快速的javascript引擎,而且我敢肯定,随着v8的成熟,它将发展出跨平台支持。

当V8首次出现时出现的基准测试表明V8比其他引擎快1000%(或者其他速度)是偏向于偏爱擅长递归的引擎。如果代码使用大量递归,那么V8可能会在速度方面为我们带来显着的优势。对于"现实世界"(至少目前)的Web东西,SquirrelFish Extreme似乎是当之无愧的赢家(有关我自己的非正式测试的结果,请参阅有关该主题的博客文章)。

正如其他人指出的那样,集成的简便性和文档的质量可能胜于纯速度。如果我们不发货,这并不意味着Hyman!

我已经尝试过SpiderMonkey和V8. 有了SpiderMonkey,我什么都做不了。我什至无法在mozilla.org上获取示例进行编译。

V8开箱即用,我进行了一些基本的C ++ <-> Javascript交互。有一些使用V8的用户的google列表,我发现我的大多数问题已经回答了。

尝试使用Javascript .NET:

http://javascriptdotnet.codeplex.com/

它实现了Google V8. 我们可以直接从.NET代码编译和运行Javascript,还可以提供Javascript代码使用的CLI对象。就性能而言,V8可能是有史以来创建的最好的引擎,它从Javascript生成本机代码。