私の趣味のゲームエンジンにJavascriptを埋め込みたいです。第5世代のJavascriptエンジンがリリースされたので(すべて非常に高速)、どのエンジンをC++フレームワークに組み込むことにしますか(組み込みの実際の容易さを含む)。
注:明確にするために、DOMスクリプトやブラウザーでのJavaScriptの作成には興味がありません。
これまでのリンクをまとめたものと、スレッドからのヒント
記録のためだけに、私はLuaが大好きで、すでに仕事で約5回ゲームエンジンに組み込んでいます。
しかし今ではこれは趣味のプロジェクトであり、ほとんどのWeb開発者に知られているJavascriptと、スクリプトにJavascriptとXMLを使用するゲームエンジンであるECMA、Flash、およびFlex開発者はより使いやすく、より大きなLuaを使用しているユーザーよりもユーザーベース(およびこれまでのところゲームでスキルを使用する機会がなかったユーザー).
また、このレコードではV8を使用しますが、これは主にC++スタイルが好きだからです。
MozillaのSpiderMonkey はかなり簡単で、十分に文書化されています。これはC APIですが、C++でラップするのは簡単です。スレッドセーフになるようにコンパイルできます。これは、メインロジックを1つのスレッドに、ユーザーインターフェイスロジックを2番目のスレッドにしたいため、ゲームに役立ちます。
GoogleのV8 はC++を使用しているため、良い選択かもしれませんが、まだ経験がありません。 ドキュメント ( Daniel James のおかげ)によると、V8はスレッドセーフではありませんが、これは将来変更される可能性があります。
WebKitのSquirrelFish もありますが、以前探していたときにスタンドアロンバージョンを見つけることができませんでした。
SpiderMonkeyとV8の両方を試しました。 SpiderMonkeyでは、何も機能しませんでした。 mozilla.orgのサンプルをコンパイルすることさえできませんでした。
V8はそのまま使用でき、基本的なC++ <-> Javascriptインタラクションが非常に迅速に実行されました。 V8を使用している人向けのGoogleリストがいくつかありますが、私の質問のほとんどはすでに回答済みです。
現時点では、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
インスタンスは一度に1つのスレッドでのみ使用できますが、他のIsolate
インスタンスは同時に他のスレッドで使用できます。
Javaスクリプトは本当にあなたのゲームに適した言語ですか?世の中のゲームの多くは Lua スクリプト用のプログラミング言語を使用しています。統合が簡単で、非常に小さく、ほとんどすべてのプラットフォームでコンパイルでき、簡単に習得できます。
これはやや外れたトピックですが、物事を正しく行うためには、枠外で考えることが重要です。
V8が他のエンジンよりも1000%(またはそれ以上)速いことを示すシーンにV8が最初にヒットしたときに出てきた ベンチマーク は、再帰が得意でした。コードで多くの再帰を使用している場合、V8は速度面で大きな利点をもたらす可能性があります。 「現実世界」(少なくとも現在)のWebに関しては、SquirrelFish Extremeが現時点で勝者のようです( トピックに関する私のブログ投稿を参照してください 私自身の非公式のテストの結果)。
他の人が指摘したように、統合の容易さとドキュメントの品質が純粋な速度よりも優先される場合があります。あなたが出荷しないならば、それはジャックを意味しません!
スクリプトエンジンとc ++の場合、 chaiscript も検討できます。 ecmaスクリプト(〜Javascript)に近く、c ++に組み込むのは非常に簡単です。
ウェブページからの売り手:
...一方、ChaiScriptは、C++との統合を念頭に置いてゼロから設計されました。 ... ChaiScriptには、メタコンパイラ、ライブラリの依存関係、ビルドシステム要件、およびあらゆる種類の従来の荷物はありません。 Atは、公開するC++関数とシームレスに連携できます。どのタイプについても明示的に伝える必要はなく、機能中心です。
ChaiScriptを使用すると、プログラムに3行のコードを追加し、ビルドステップをまったく変更せずに、文字通りアプリケーションのスクリプトを開始できます。
SpiderMonkeyの次の進化であるTraceMonkeyが登場するのを待ちます。より高速で優れた設計。 (Adobe Flashから寄贈されたコードを使用)。
Tracemonkeyは、実際の使用状況に基づいて実行時に構造を積極的に最適化することにより、反復アクションをより迅速に実行できることに誇りを持っています。
Javascript .NETを試してください。
http://javascriptdotnet.codeplex.com/
Google V8を実装しています。 .NETコードからJavascriptを直接コンパイルして実行し、Javascriptコードでも使用されるCLIオブジェクトを提供できます。また、V8はおそらくパフォーマンスの点でこれまでに作成された最高のエンジンであり、Javascriptからネイティブコードを生成します。
V8は高速のjavascriptエンジンを叫んでいるので、v8に注目し、成熟するにつれてクロスプラットフォームのサポートを開発すると確信しています。
Googleの V8 もご覧ください。しかし、それはかなり新しいです。