我是Google V8和Javascript的新手,我正在尝试使用C ++为Javascript添加一个新类。
我使用Webkit的V8绑定完成了一些工作,参考文献是:webkit idl和v8 binding
现在我想通过修改V8的代码而不是简单地使用V8的api进行扩展来直接将它集成到V8引擎中。换句话说,我想在Javascript中添加一个类似于Array类型的新类,使用相同的实现机制。
我搜索了互联网,包括谷歌的文档,但只看到了使用本机代码嵌入V8的指南。
我在哪里可以找到有关修改V8代码的指南? 或者我在哪里可以找到有关V8设计架构的文档? 或者任何人都可以描述V8如何在C ++中实现Array类型?
非常感谢。
答案 0 :(得分:7)
首先,你可能真的可以使用v8 api来做任何你想做的事情。您可以使用它来创建主要与内置对象相同的原型,也可以将C ++函数调用绑定到JS函数调用。除非你需要非常快的东西或检查或操纵v8内部,否则没有理由修改v8本身。例如,Chrome的DOM实现使用v8 API而不是直接在v8中实现。嵌入器的指南实际上具有创建“类”所需的所有信息(请记住,在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文档已经移动(并且更好),而不是写这个答案的时候,这里有一些快速链接到有用的文档: