Wie füge ich Google V8 eine neue Klasse hinzu?

8

Ich bin ein Neuling in Google V8 und Javascript, und ich versuche, eine neue Klasse zu Javascript mit C ++ hinzuzufügen.

Ich habe einige Arbeiten mit der V8-Bindung von Webkit abgeschlossen, Referenzen sind: webkit idl und v8-Bindung

Jetzt möchte ich es direkt in die V8-Engine integrieren, indem ich den Code von V8 ändere, anstatt einfach die V8-API zu verwenden, um eine Erweiterung zu erstellen. Mit anderen Worten, ich möchte eine neue Klasse genau wie Array in Javascript hinzufügen und denselben Implementierungsmechanismus verwenden.

Ich habe im Internet gesucht, einschließlich der Dokumente in Google, habe aber nur Anleitungen zum Einbetten von V8 mit nativem Code gelesen.

Wo finde ich Anleitungen zum Ändern des V8-Codes?
Oder wo finde ich Dokumente über die Design-Architektur von V8? Oder kann jemand beschreiben, wie V8 den Array-Typ in C ++ implementiert?

Vielen Dank.

    
jean 18.12.2012, 09:18
quelle

1 Antwort

7

Erstens ist es wahrscheinlich, dass Sie mit der Verwendung der v8 api tatsächlich durchkommen können, um das zu tun, was auch immer Sie tun möchten. Sie können es verwenden, um Prototypen zu erstellen, die sich meist wie integrierte Objekte verhalten, Sie können auch C ++ - Funktionsaufrufe an JS-Funktionsaufrufe binden. Es gibt keinen Grund, v8 selbst zu modifizieren, es sei denn, Sie benötigen etwas, um extrem schnell zu sein oder um v8-Interna zu inspizieren oder zu manipulieren. Zum Beispiel verwendet die DOM-Implementierung von Chrome die v8-API und wird nicht direkt in v8 implementiert. Der Leitfaden für den Einbinder enthält alle Informationen, die Sie zum Erstellen von "Klassen" benötigen (denken Sie daran, dass es sich in JS um eine Prototypvererbung handelt): Ссылка .

Das heißt, hier sind einige gute Stellen, um im Quellcode nach sagen, das Array-Objekt zu suchen. Ich bin mir nicht sicher, ob es sich um ein Designdokument handelt, Sie sind wahrscheinlich besser dran, wenn Sie sich die Quelle ansehen.

Das Array-Objekt selbst ist hier: Ссылка

Einige der Array-API-Funktionen sind hier implementiert (viele verwenden dieselben öffentlichen APIs wie beim Erweitern): Ссылка

Einige der Array-API-Funktionen sind in JavaScript implementiert: Ссылка

Suchen Sie nach JSArray und Sie werden viel mehr sehen. Achten Sie besonders auf die Bits im nativen Codegenerator, denn wenn Sie wirklich einen benutzerdefinierten Typ verwenden möchten, der auf dieser Ebene geschrieben wurde, sollten Sie Code schreiben, um auch effizienten Maschinencode für eine Reihe verschiedener Architekturen zu generieren ...

Bearbeiten: Sieht so aus, als ob die V8-Dokumentation verschoben wurde (und besser ist) als wenn diese Antwort geschrieben wurde, hier sind ein paar schnelle Links zu nützlicher Dokumentation:

yiding 18.12.2012, 11:37
quelle

Tags und Links