如何在Google V8中添加一个新类

How to add a new class to Google V8?

本文关键字:一个 新类 添加 Google V8      更新时间:2023-10-16

我是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