让我们了解 Chrome V8:这里的内置函数是什么?

让我们了解 Chrome V8: **

什么是内置在这里玩?**

章节:内置的基础知识

欢迎来到其他章节 让我们了解 Chrome V8

第 9 章 ,我谈到了内置函数,并展示了它们如何工作的一些细节。今天,在没有更多细节的情况下,我继续介绍高级概念,内置是什么以及它在这里发挥了什么作用。

在 V8 中,builtin 的全称是 built-in function,它们负责实现 ECMAScript API、runtime、ignition 等大部分内容。你知道大部分代码是用 CPP 编写的,而 ASM 中还有一些对性能敏感的东西,那么 builtin 和 CPP 有什么区别?

在我的理解中,我更喜欢将内置的称为语法糖,它使开发 V8 变得方便。 builtin 有其不同于 CPP 或 ASM 的模式和习语,但不幸的是 v8.dev 上的描述文档很少。关于在 builtin 中编写代码,具体而言,在 CodeStubAssembler 或 Torque 中编写代码,本章不涉及,如果您有兴趣,请给我发电子邮件。

一、简介

内置函数使用五种不同的方法实现,每种方法都针对不同的权衡进行调整:

(1) JavaScript:简洁易读的代码,访问快速的内在函数,但经常使用慢速运行时调用,由于类型污染而导致性能不可预测,以及围绕(复杂和不明显的)JS 语义的微妙问题。 Javascript 内置函数已被弃用,不应再添加。

(2) C++:在风格上与运行时函数非常相似,可以访问 V8 强大的运行时功能,但通常不适合对性能敏感的领域。

(3) V8 Torque:是一种特定于 V8 的领域特定语言,被翻译为 CodeStubAssembler。因此,它扩展了 CodeStubAssembler 并提供静态类型以及可读和富有表现力的语法。

(4) CodeStubAssembler:提供非常接近汇编语言的高效低级功能,同时保持与平台无关并保持可读性。

(5) 依赖平台的汇编语言:效率高,但需要手动移植到所有平台,维护困难。

Torque 是 V8 为替换 CSA 设计内置函数而引入的最后一个新模式,因为 Torque 的平台独立特性使得内置实现比 CSA 更容易,同时具有与 CAS 相同的性能。

从 1 到 5,它越来越难使用,但性能越来越好。

图 1 显示了 Torque 构建过程。简而言之,Torque 编译器将源代码文件(后缀为 .tq)翻译为 XX.cc 和 XX.h,然后将 XX.cc/.h 编译为写入 snapshot.bin 的可执行代码。

2.内置设置

我认为 C++ builtin、CSA 和 Torque 是最重要的,因为它们实现了大多数功能,例如,ignition 是使用 CSA 实现的,所有运行时都使用 C++ builtin,大多数 ECMAScript API 都使用 Torque。让我们再看一下这三种内置函数。

在上面的代码中,第 8 行,SetupBuiltins() 从 snapshot.bin 加载内置代码。如果你调试SetupBuiltins,你会遇到SetupBuiltinsInternal。我建议更多地关注 SetupBuiltinsInternal 并阅读评论。以下是我总结的关于 SetupBuiltinsInternal 的重要内容。

  • BUILD_CPP、BUILD_TFJ、BUILD_TFC、BUILD_TFS、BUILD_TFH、BUILD_BCH 和 BUILD_ASM

  • 宏 BUILTIN_LIST 定义了所有内置函数:

展开 BUILTIN_LIST 和 BUILTIN_LIST_FROM_TORQUE,您将获得所有内置函数的全名。例如,我们可以通过扩展第 9-31 行获取与字符串相关的 ECMAScript API。

  • BUILD_CPP、BUITLD_TFJ 等七个宏模板完成了完整的内置初始化。

在上面的代码中,代码是一个 HeapOjbect 指针,它临时保存 BuildAdaptor(代码如下)构建的 Builtin 地址。第 5 行,AddBuiltin 将作为内置地址的代码添加到内置数组中。

在上面的代码中,Generate_Adaptor 和 CodeBuilder 一起工作来创建内置函数。现在,内置设置完成。

图 2 显示了内置的设置调用堆栈。

如何调试内置设置?我的方法是扩展宏 BUILTIN_LIST 以获取我感兴趣的索引号并设置条件断点,如图 3 所示。

当然,如果您知道要调试的代码在哪里,您可以立即在其中设置一个断点,如图 4 所示。我敢打赌,大多数时候您不知道它在哪里,因为有V8 中的许多文件。我认为我的方法比漫无目的的寻找相对容易。

好的,本次分享到此结束。下期再见,保重!

如果您有任何问题,请与我联系。 微信 : qq9123013 电子邮件 [email protected]

更多内容在 ** 纯英语.io** .注册我们的 ** 免费每周通讯** .跟着我们 ** 推特** , ** 领英** , ** YouTube** , 和 ** 不和谐** .对增长黑客感兴趣?查看 ** 电路** .

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/38582/25032211

posted @ 2022-09-22 11:27  哈哈哈来了啊啊啊  阅读(212)  评论(0编辑  收藏  举报