我是Google V8和Javascript的新成员,我正在尝试使用C++向Javascript添加一个新的类。
我已经使用Webkit的V8绑定完成了一些工作,参考文献有:webkit idl和v8 binding
现在,我想直接将它集成到V8引擎中,方法是修改V8的代码,而不是简单地使用V8的api进行扩展。换句话说,我希望使用相同的实现机制,在Javascript中添加一个与Array类型类似的新类。
我在互联网上搜索过,包括谷歌的文档,但我只看到了使用本机代码嵌入V8的指南。
我在哪里可以找到修改V8代码的指南?
或者在哪里可以找到关于V8设计架构的文档?。
或任何人都可以描述V8如何在C++?中实现数组类型
非常感谢。
发布于 2012-12-18 11:37:19
首先,您很可能实际上可以使用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文档已经移动(并且比编写这个答案时更好),这里有一些指向有用文档的快速链接:
https://stackoverflow.com/questions/13929716
复制相似问题