10

私は Google V8 と Javascript の初心者で、C++ を使用して Javascript に新しいクラスを追加しようとしています。

Webkit の V8 バインディングを使用していくつかの作業を完了しました。参照は次のとおりです: webkit idlおよびv8 バインディング

V8 の API を使用して拡張機能を作成するのではなく、V8 のコードを変更して、V8 エンジンに直接統合したいと考えています。つまり、同じ実装メカニズムを使用して、Javascript の Array 型と同じように新しいクラスを追加したいと考えています。

Google のドキュメントを含め、インターネットを検索しましたが、V8 をネイティブ コードに埋め込む方法に関するガイドしか見たことがありません。

V8 のコードの変更に関するガイドはどこにありますか?
または、V8 の設計アーキテクチャに関するドキュメントはどこにありますか?
または、V8 が C++ で Array 型を実装する方法を説明できる人はいますか?

どうもありがとう。

4

1 に答える 1

9

まず、v8 api を使用して、やりたいことを何でも実行できる可能性があります。これを使用して、組み込みオブジェクトとほとんど同じように動作するプロトタイプを作成できます。また、C++ 関数呼び出しを JS 関数呼び出しにバインドすることもできます。非常に高速なものが必要な場合や、v8 の内部を検査または操作する必要がない限り、v8 自体を変更する理由はまったくありません。たとえば、Chrome の DOM 実装は、v8 で直接実装されるのではなく、v8 API を使用します。埋め込みガイドには、実際に「クラス」を作成するために必要なすべての情報が含まれています (JS では、実際にはプロトタイプの継承であることを思い出してください): https://developers.google.com/v8/embed#templates

とはいえ、配列オブジェクトなどのソース コードを調べるのに適した場所がいくつかあります。設計ドキュメントについてはよくわかりません。おそらくソースを見たほうがよいでしょう。

配列オブジェクト自体はこちら: https://code.google.com/p/v8/source/browse/trunk/src/objects.h#8409

配列 API 関数の一部はここに実装されています (多くは、拡張する場合と同じパブリック API を使用します): https://code.google.com/p/v8/source/browse/trunk/src/builtins.cc#511

配列 API 関数の一部は JavaScript で実装されています: https://code.google.com/p/v8/source/browse/trunk/src/array.js

JSArray を検索すると、さらに多くの情報が表示されます。ネイティブ コード ジェネレーターのビットに特に注意してください。このレベルで記述されたカスタム型を実際に利用したい場合は、さまざまなアーキテクチャ用に効率的なマシン コードも生成するコードを記述したいと思うでしょう。 ...

編集:この回答が書かれたときよりもV8のドキュメントが移動した(そしてより良い)ように見えます。ここに便利なドキュメントへのクイックリンクがあります:

于 2012-12-18T11:37:19.617 に答える