V8 Torque 文件开发规则:.tq 源码与 BUILD.gn 注册的完整实战指南
语言运行时编译器JIT编译解释器内存管理【免费下载链接】v8The official mirror of the V8 Git repository项目地址https://gitcode.com/gh_mirrors/v81/v8点击查看免费下载导读本指南围绕 V8 仓库中面向 Torque 文件.tq的工程规范详解「新建.tq文件时必须注册到根目录BUILD.gn」这条核心规则包括注册位置、字母序要求、条件编译块的写法以及注册之后 Torque 编译器如何驱动代码生成的完整流程。读完本文你将掌握在 V8 中新增一个 Torque 源文件的正确姿势理解torque_files与v8_torque_files的区别并能基于 BUILD.gn 的源码结构独立排查新.tq文件未被编译这类构建问题。一、规则背景什么是 Torque 与 .tq 文件Torque 是 V8 用来编写内置函数builtins和运行期宏runtime macros的领域专用语言DSL它把类型化的高级语法编译为 V8 内部使用的 CodeStubAssemblerCSA调用序列。V8 源码中所有.tq文件都集中在src/下主要分布在两个目录src/builtins/*.tq内置函数实现例如array.tq、promise-all.tq、string.tqsrc/objects/*.tq堆对象类型定义例如js-objects.tq、string.tq、struct.tq另有少量测试与第三方文件如test/torque/test-torque.tq和third_party/v8/builtins/array-sort.tq。如果想深入了解 Torque 语法本身可以继续阅读仓库内的 docs/torque/architecture.md 与 docs/torque/user-manual.md本文聚焦的是工程层面的文件管理规范——新增一个.tq文件时如何把它接入构建系统。二、规则适用场景何时触发本规范规则文件agents/rules/torque.md通过 frontmatter 声明了自己的触发方式name: torque trigger: glob globs: src/**/*.tq也就是说只要工作内容涉及src/目录下的.tq文件无论是 Agent 自动执行任务还是开发者手工修改就应遵循本规则。src/**/*.tq这一 glob 精确覆盖了src/builtins/、src/objects/、src/debug/、src/wasm/等所有子目录中的 Torque 源文件。三、核心规则新建 .tq 文件必须在 BUILD.gn 中注册规则原文只讲了一件事但这件事直接决定构建成败如果你创建了一个新的.tq文件必须在根目录BUILD.gn中注册它。定位BUILD.gn中的torque_files列表注意不是v8_torque_files。按字母顺序添加你的新文件路径。注意对现有文件的修改不需要任何注册变更。拆解成三个要点新建才需要注册修改不需要。往已有.tq文件里加函数、改对象布局都不需要动BUILD.gn只有新增文件路径时才需要。注册目标是torque_files而不是v8_torque_files。V8 构建系统中名称相似的变量很多这条提示是为了避免新手把文件加到错误的位置。整个仓库中真正驱动 Torque 编译的列表就是根目录BUILD.gn里声明的torque_files。保持字母顺序。这既是为了 diff 可读性也是为了避免重复冲突——V8 的代码审查工具如 PRESUBMIT通常也期望列表保持有序。四、源码级验证BUILD.gn 中的 torque_files 结构打开根目录 BUILD.gntorque_files列表从第 2183 行开始可以看到它确实是严格按字母序排列的torque_files [ src/builtins/aggregate-error.tq, src/builtins/array-at.tq, src/builtins/array-concat.tq, src/builtins/array-copywithin.tq, src/builtins/array-every.tq, ... src/objects/string.tq, src/objects/struct.tq, ... test/torque/test-torque.tq, third_party/v8/builtins/array-sort.tq, ]注意末尾两项test/torque/test-torque.tqTorque 自身的测试文件和third_party/v8/builtins/array-sort.tq第三方目录下的 Torque 文件说明torque_files不仅收录src/下的文件凡需要参与 Torque 编译的路径都在此列——这与规则中globs: src/**/*.tq的触发范围略有区别后者只是规则的激活条件不是注册范围的上限。4.1 条件注册不同特性开关下的列表扩展torque_files不只是静态列表它还会依据 GN 构建参数按条件追加见 BUILD.gnif (v8_enable_i18n_support) { torque_files [ src/objects/intl-objects.tq, src/objects/js-collator.tq, src/objects/js-date-time-format.tq, ... ] } if (v8_enable_temporal_support) { torque_files [ src/objects/js-temporal-objects.tq ] } if (v8_enable_webassembly) { torque_files [ src/builtins/js-to-wasm.tq, src/builtins/wasm.tq, src/builtins/wasm-strings.tq, src/builtins/wasm-to-js.tq, src/debug/debug-wasm-objects.tq, src/wasm/wasm-objects.tq, ] if (v8_enable_drumbrake) { torque_files [ src/builtins/wasm-interpreter-wrappers.tq ] } }这给你一个重要启示当你新增的.tq文件只与某一特性相关如 i18n、Temporal、WebAssembly时应把它放进对应的条件块内而不是无条件追加到基础列表。这样关闭该特性时对应文件就不会被纳入编译从而避免产生无谓的构建依赖或符号冲突。这些开关变量v8_enable_i18n_support、v8_enable_temporal_support、v8_enable_webassembly、v8_enable_drumbrake定义在 gni/v8.gni 中属于 V8 构建的常规配置项。五、注册之后发生了什么Torque 代码生成流水线把.tq文件加入torque_files后构建系统会通过run_torque模板见 BUILD.gn驱动 Torque 编译器工作template(run_torque) { ... action(run_torque suffix) { deps [ :torque($toolchain) ] # 先编译出 torque 可执行文件 script tools/run.py sources torque_files # 输入所有 .tq 文件 destination_folder $target_gen_dir/torque-generated$suffix ... args [ ./ rebase_path(... /torque, root_build_dir), -o, rebase_path($destination_folder, root_build_dir), -v8-root, rebase_path(., root_build_dir), ] args torque_files # 输出逐个 .tq 生成对应代码 } }从这段模板可以看到完整的调用链先构建torque可执行程序deps [ :torque($toolchain) ]Torque 编译器本身位于 src/torque/通过tools/run.py以所有torque_files为输入执行torque二进制生成产物统一输出到$target_gen_dir/torque-generated/目录。以src/objects/string.tq为例一个.tq文件会派生出一组同名的生成文件filetq string_replace(file, .tq, -tq)即把.tq替换为-tqstring-tq-csa.cc/string-tq-csa.hCSA 汇编器实现与声明string-tq.ccTorque 生成的运行时支持代码。除此之外run_torque还会统一生成一批全局头文件包括builtin-definitions.h、instance-types.h、interface-descriptors.inc、exported-macros-assembler.h等见 BUILD.gn这些正是 V8 其它 C 代码#include的 Torque 生成接口。最终这些生成文件由torque_generated_initializers目标汇总编译进v8_base_without_compiler见 BUILD.gn。结论一个.tq文件如果不注册进torque_files它就不会出现在run_torque的输入里对应的*-tq-csa.cc/h等文件不会被生成任何引用该 Torque 定义类型的 C 代码都会在编译阶段报符号未定义或头文件缺失错误。六、实操清单新增一个 .tq 文件的完整步骤结合规则与源码推荐按以下流程操作以新增src/builtins/foo.tq为例创建文件在src/builtins/下编写foo.tq内容遵循 Torque 语法参考docs/torque/user-manual.md。确定注册位置打开根目录 BUILD.gn先判断新文件是否与某个特性开关绑定通用功能 → 追加到torque_files基础列表第 2183 行开始的块仅 i18n/Temporal/WebAssembly 相关 → 追加到对应的if条件块内。按字母序插入在目标列表中找到新文件路径应处的排序位置插入src/builtins/foo.tq,字符串带引号、行尾带逗号。以array-at.tq、array-concat.tq的排布为参照。检查列表末尾的测试注册若新增文件位于src/builtins/或src/objects/通常还需确认它是否应出现在torque_files末尾的测试/第三方条目附近——一般只需保证列表整体有序即可。本地验证构建重新运行 gn 生成与构建确认out/build_dir/gen/torque-generated/foo-tq-csa.cc、foo-tq.cc等文件被生成且编译通过。若文件未被生成说明注册位置或拼写有误。提交前检查修改已有.tq文件时跳过 25 步无需改动BUILD.gn。七、常见误区与注意事项误把文件加进v8_torque_files仓库中确实存在v8_*前缀的相关变量如v8_enable_*开关但 Torque 文件列表的名字就是torque_files。规则特别强调这一点就是为了防止混淆。忘记字母顺序虽然构建系统本身不校验顺序但不按序插入会让后续合并冲突频繁也容易在审查时被打回。新建文件后未跑构建注册本身是静态文本改动只有重新执行 gn/ninja 才会触发run_torque重新生成代码建议用ninja -C out/build_dir v8或对应的d8目标验证一次全量生成。条件块归属错误把 i18n 专属的.tq无条件加入基础列表会导致v8_enable_i18n_support false的构建中仍尝试编译该文件进而因缺少 Intl 相关类型定义而失败。只新增不注册的后果Torque 生成代码缺失症状往往是 C 侧#include torque-generated/foo-tq-csa.h报 file not found或Undefined symbol链接错误排查时应第一时间回到BUILD.gn确认注册。结语agents/rules/torque.md用三句话点出了 V8 中 Torque 文件管理的最小必要规范而 BUILD.gn 中的torque_files列表及其run_torque流水线则从源码层面印证了这条规则的必要性注册即编译编译即生成生成即被 C 引用。对任何在 V8 中新增 Torque 代码的开发者或 Agent 而言牢记新建注册、修改免注册、字母有序、条件归类这十六个字就能避免绝大多数与 Torque 相关的构建问题。赞分享语言运行时编译器JIT编译解释器内存管理【免费下载链接】v8The official mirror of the V8 Git repository项目地址https://gitcode.com/gh_mirrors/v81/v8点击查看免费下载相关推荐TypeSpec Linter 开发指南从规则定义到注册与测试的完整实战TypeSpec Linter 开发指南从规则定义到注册与测试的完整实战 本文基于 TypeSpec 官方文档《Linters》编写系统讲解在 TypeSp编程语言编译器后端miniblink49 内置 V8 的 Torque 语法高亮插件vim-torque 安装与源码级解析miniblink49 内置 V8 的 Torque 语法高亮插件vim torque 安装与源码级解析 Torque 是 V8 用来编写内置函数built前端桌面应用Roc 注释与文档注释实战指南从 单行注释到 文档注释的完整规则Roc 注释与文档注释实战指南从 单行注释到 文档注释的完整规则 本篇围绕 Roc 语言参考文档中的注释章节展开讲清两类注释的精确语法规则普通单行注释创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Claude for Financial Services 的 LBO 建模实战:`/lbo` 命令与 `lbo-model` Skill 完整解析

Claude for Financial Services 的 LBO 建模实战:`/lbo` 命令与 `lbo-model` Skill 完整解析

人工智能AI 应用AI 技能/插件AI Agent金融科技 【免费下载链接】financial-services 可将 Claude 转变为金融服务专家,适用于投资银行、股票研究等领域。提供核心及专项插件,支持端到端工作流,集成多数据源,含技能、命令和连接器&…

2026/9/23 14:42:17 阅读更多 →
VxWorks上部署CODESYS Runtime实战指南

VxWorks上部署CODESYS Runtime实战指南

1. 为什么非得在VxWorks上跑CODESYS Runtime?——工业现场的真实约束与技术权衡你手头有一台老款PLC,CPU是PowerPC 604e,内存256MB,Flash 512MB,运行着VxWorks 6.9 SP3;产线停机一小时损失八万,…

2026/9/23 14:53:42 阅读更多 →
JupyterLab 扩展多应用兼容指南:让同一扩展同时运行于 JupyterLab 与 Notebook 7

JupyterLab 扩展多应用兼容指南:让同一扩展同时运行于 JupyterLab 与 Notebook 7

JupyterLab 扩展多应用兼容指南:让同一扩展同时运行于 JupyterLab 与 Notebook 7 【免费下载链接】jupyterlab JupyterLab computational environment. 项目地址: https://gitcode.com/gh_mirrors/ju/jupyterlab Jupyter Notebook 7 的前端由 JupyterLab 的组…

2026/9/23 14:14:59 阅读更多 →

最新新闻

ECG心电信号分类实战:Python与Matlab双版本实现与避坑指南

ECG心电信号分类实战:Python与Matlab双版本实现与避坑指南

简介:这是一份面向医学数据分析、生物医学工程及机器学习初学者的ECG心电信号分类资源包,整合Python与MATLAB两套实现方案,帮助学习者掌握从信号预处理、特征提取到分类建模的完整流程。压缩包共825个文件,约6.25MB,核…

2026/9/24 0:46:51 阅读更多 →
YOLOv7打电话检测实战:双格式数据集与训练部署全解析

YOLOv7打电话检测实战:双格式数据集与训练部署全解析

简介:YOLOv7打电话行为检测项目,面向计算机视觉开发者与边缘设备部署场景,适合需要快速落地手持电话识别功能的工程人员及高校研究者。压缩包提供训练好的权重、完整训练代码以及配套数据集,可直接加载权重进行图片/视频推理&…

2026/9/24 0:46:51 阅读更多 →
ResNet50迁移学习做垃圾分类:数据对齐、模型改造与可解释性实战

ResNet50迁移学习做垃圾分类:数据对齐、模型改造与可解释性实战

简介:本资源是一份基于ResNet50迁移学习实现垃圾分类任务的完整Python项目,面向计算机、人工智能、数据科学等专业学生及初入CV领域的开发者,适用于课程设计、毕业设计、大作业或技术验证场景。项目已通过实测运行,包含模型训练、…

2026/9/24 0:46:51 阅读更多 →
基于SpringBoot的仓储管理系统-附源码

基于SpringBoot的仓储管理系统-附源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/9/24 0:44:50 阅读更多 →
ISO 24748-3指南:软件生命周期过程落地与裁剪实战

ISO 24748-3指南:软件生命周期过程落地与裁剪实战

简介:ISO/IEC/IEEE 24748-3:2020 是一份系统与软件工程领域生命周期管理国际标准,旨在为组织实施 ISO/IEC/IEEE 12207(软件生命周期过程)提供详细指南。该标准共75页,完整英文电子版,适用于软件工程师、系统…

2026/9/24 0:44:50 阅读更多 →
Linux与Windows交替输出实现原理对比

Linux与Windows交替输出实现原理对比

1. 这道题到底在考什么:从“交替输出”看操作系统思维的本质差异刚看到这个标题——“Linux课后作业,用Windows下批处理和Linux下的shell脚本完成,两文本交替输出”——我第一反应不是写代码,而是笑了。不是笑题目难,是…

2026/9/24 0:44:50 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →