如何在Google V8中添加一个新类
How to add a new class to Google V8?
我是Google V8和Javascript的新手,我正在尝试使用C++向Javascript添加一个新类。
我已经使用Webkit的V8绑定完成了一些工作,参考文献有:Webkit idl和V8绑定
现在,我想通过修改V8的代码,而不是简单地使用V8的api进行扩展,将其直接集成到V8引擎中。换句话说,我想添加一个新的类,就像Javascript中的Array类型一样,使用相同的实现机制。
我在互联网上搜索过,包括谷歌的文档,但只看到了用原生代码嵌入V8的指南。
在哪里可以找到有关修改V8代码的指南
或者在哪里可以找到有关V8设计体系结构的文档
或者有人能描述一下V8是如何在C++中实现Array类型的吗
非常感谢。
首先,使用v8 api可以做任何你想做的事情。你可以使用它来创建与内置对象行为基本相同的原型,你也可以将C++函数调用绑定到JS函数调用。实际上没有理由修改v8本身,除非您需要非常快速的东西,或者检查或操作v8内部。例如,Chrome的DOM实现使用v8 API,而不是直接在v8中实现。embedder的指南实际上包含了创建"类"所需的所有信息(请记住,在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文档比编写这个答案时已经移动了(而且更好),这里有一些有用文档的快速链接:
- Wiki:https://github.com/v8/v8/wiki/Getting%20Started%20with%20Embedding
- API文件:http://v8.paulfryzel.com/docs/master/index.html
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 如何使用CLion在Mac上创建一个新的.txt文件
- 将指针类分配给新类,C++
- 写一个分数类,我无法弄清楚这些错误
- 将一个 QWidget 链接到另一个新创建的 QWidget
- 使用Visual Studio在虚幻引擎中创建一个新的类c ++给了我太多的错误
- C++用一个新类初始化二维向量;默认值更改
- 在Visual Studio代码中为C 创建一个新类
- 如何创建一个新类来继承 ostream 并将其用作 cout 但带有锁定
- 如何在Google V8中添加一个新类
- Visual Studio 2010,可以简单地包含一个新的类来触发发布构建错误
- 要在新类中使用另一个类,我应该继承吗
- 在数组的新位置添加一个新的类对象
- 创建一个新对象并将该对象存储在新类的向量中,属性消失
- 如何在头文件中声明一个新类并在源文件中定义它而不会出现这种错误
- Qt:用另一个参数创建一个新类
- 创建一个指向包含string的新类的指针
- 操作符重载——创建一个新的string类
- 是否可以通过在基类中添加一个新的虚拟函数来破坏代码