关于c ++:您会在应用程序中嵌入哪个Javascript引擎?

关于c ++:您会在应用程序中嵌入哪个Javascript引擎?

Which Javascript engine would you embed in your application?

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

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

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

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

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

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

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


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

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


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

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

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


我相信v8目前仅适用于x86,x64和arm处理器。这可能是不利的。

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

1
2
3
4
5
 * 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实例可以同时在其他线程中使用。


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

这有点不合时宜,但是开箱即用的思维对于正确解决问题可能很重要。


说到脚本引擎和C ++,您还可以考虑使用脚本。它接近ecma脚本(?Javascript),很容易嵌入到c ++中。

卖家从网页上:

... ChaiScript, on the other hand, was designed from the ground up
with integration with C++ in mind.
...
ChaiScript has no meta-compiler, no library dependencies, no build
system requirements and no legacy baggage of any kind. At can work
seamlessly with any C++ functions you expose to it. It does not have
to be told explicitly about any type, it is function centric.

With ChaiScript you can literally begin scripting your application by
adding three lines of code to your program and not modifying your
build steps at all.


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

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


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

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


试试Javascript .NET:

http://javascriptdotnet.codeplex.com/

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


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


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


推荐阅读