你会在你的应用程序中embedded哪个Javascript引擎?
我想在我的爱好游戏引擎中embeddedJavascript。 现在我们已经拥有了第五代Javascript引擎(所有的引擎都很快),我很好奇你会select在C ++框架中embedded什么引擎(包括embedded它的实际简易性)?
注意:为了清楚起见,我对DOM脚本或在浏览器中编写JavaScript不感兴趣。
这里有一个到目前为止的链接汇编和线程的一些技巧
- 蜘蛛猴
- tracemonkey (注意:向后兼容spidermonkey):
- V8
- 金鳞
为了logging,我喜欢Lua,并且已经在游戏引擎中embedded了大约5次。
但是现在这是一个嗜好项目,我认为JavaScript被大多数Web开发人员所熟知,而且由于其ECMA,Flash和Flex开发人员,使用Javascript和XML进行脚本编写的游戏引擎将更加方便用户,迎合更大用户群(还有一个到目前为止还没有机会使用他们的游戏技能)比拥有Lua的用户群(还有很多其他的用户群)。
另外对于这个logging,我将与V8一起去,主要是因为我喜欢它的C ++风格。
Mozilla的SpiderMonkey相当简单并且文档齐全。 这是一个C API,但是直接用C ++来包装它。 它可以被编译为线程安全的,这对于游戏很有用,因为你可能想要在一个线程中拥有主逻辑,在另一个线程中拥有用户界面逻辑。
谷歌的V8可能是一个不错的select,因为你使用C ++,但我还没有经验。 根据文档 (感谢丹尼尔·詹姆斯 ),V8不是线程安全的,虽然这在未来可能会改变。
还有WebKit的SquirrelFish ,但是当我看的时候我找不到一个单独的版本。
我已经试过SpiderMonkey和V8。 用SpiderMonkey,我什么都不能工作。 我什至不能在mozilla.org上的例子进行编译。
V8开箱即用,并且我得到了一些基本的C ++ < – > Javascript交互进行得非常快。 有一些使用V8的人的谷歌列表,我发现我的大部分问题已经回答了。
Java脚本真的是你游戏的正确语言吗? 很多游戏都使用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现在有一个Isolate
对象,代表引擎的一个实例。 一个Isolate
实例一次只能在一个线程中使用,但其他Isolate
实例可以同时在其他线程中使用。
当V8第一次出现在显示V8比其他引擎快1000%(或其他)的场景时,出现了一个基准 ,这个基准很大程度上被用来支持那些recursion很好的引擎。 如果你的代码使用了很多的recursion,那么V8可能会给你一个显着的优势,速度方面。 对于“现实世界”(至less是目前的网站内容),SquirrelFish Extreme似乎是目前的赢家( 关于我自己非正式testing结果的博客文章 )。
正如其他人所指出的那样,整合的容易性和文件质量可能优于纯粹的速度。 如果你不运送,这并不意味着千斤顶!
当谈到一个脚本引擎和C ++时,你也可以考虑chaiscript 。 它接近ecma脚本(〜Javascript),很容易embedded到c ++中。
卖家来自网页:
…另一方面,ChaiScript是从头开始devise的,并且考虑到与C ++的集成。 ChaiScript没有元编译器,没有库依赖性,没有构build系统需求,也没有任何types的遗留行李。 At可以与你公开的任何C ++函数无缝协作。 它不必被明确地告知任何types,它是以function为中心的。
使用ChaiScript,您可以通过将三行代码添加到您的程序中而不需要修改您的构build步骤,从字面上开始为应用程序编写脚本。
我会等待SpiderMonkey的下一个演变TraceMonkey出来。 更快,更好的devise。 (使用从Adobe Flash捐赠的代码)。
Tracemonkey通过根据实际使用情况在运行时积极优化结构而自豪地做出重复的行为,这对于游戏增强来说是非常方便的。
尝试使用Javascript .NET:
http://javascriptdotnet.codeplex.com/
它实现了Google V8。 您可以直接从.NET代码编译和运行Javascript,并提供由Javascript代码使用的CLI对象。 V8可能是性能方面创造的最好的引擎,它从Javascript生成本地代码。
你可能也想看看来自Google的V8 。 不过这很新鲜。
我会密切关注V8,因为它是尖叫快速的JavaScript引擎,我相信它会开发跨平台的支持,随着它的发展到成熟。