语言运行时编译器移动开发【免费下载链接】hermesA JavaScript engine optimized for running React Native.项目地址https://gitcode.com/gh_mirrors/hermes/hermes点击查看免费下载本文围绕 Hermes 仓库中benchmarks/nbody目录的基准测试展开详解其源自 Computer Language Benchmarks Game 的太阳系 N 体模拟算法、原始版与类型标注版Flow / TypeScript的差异以及它在 Hermes 中验证浮点数值计算与对象属性读取性能时的用法。读完本文你将掌握该基准的算法结构、三个 JS/TS 变体的组织方式以及如何在本仓库中用hermes/shermes运行并核对预期输出。基准来源与定位benchmarks/nbody/README.md明确交代了该基准的来历它取自The Computer Language Benchmarks Game经典的语言性能对比项目代码由 Isaac Gouy 贡献、Andrey Filatkin 修改许可证为 BSD 3-Clause完整许可文本见 benchmarks/nbody/LICENSE.md。README 对该基准的定位只有一句话却点出了它要压测的两类核心能力Tests floating point numerical computation and reading properties from an object.即浮点数数值计算大规模连续的Math.sqrt、乘加运算、除法与开方混合的牛顿式积分从对象读取属性每一步迭代都反复读取Body实例的x / y / z / vx / vy / vz / mass七个属性。这两点恰好对应 JavaScript 引擎尤其是 React Native 场景下的 Hermes最常见的两种性能敏感路径数值运算管线和对象模型hidden class / 属性访问的效率。这也是它被选入 Hermes 基准集的原因——用一套物理上自洽、结果可验证的数值模拟来衡量引擎在这两条路径上的表现。目录结构一览benchmarks/nbody/ ├── README.md # 基准说明本文所依据的关联文档 ├── LICENSE.md # BSD 3-Clause 许可 ├── original/ │ └── nbody.js # 原始基准无类型标注函数构造器 Body └── fully-typed/ ├── nbody.js # Flow 类型标注版Body 改为 ES6 class └── nbody.ts # 由 Flow 版复制而来适配 TypeScript三个文件在算法上完全等价下文将逐一验证差别只在类型系统与对象建模方式上。算法结构40 万步的太阳系积分以 benchmarks/nbody/original/nbody.js 为例整个基准是一个立即执行的 IIFE核心由四部分组成。1. 物理常量const PI Math.PI; const SOLAR_MASS 4 * PI * PI; const DAYS_PER_YEAR 365.24;SOLAR_MASS 4π²是 Benchmarks Game 版本使用的经典单位制以“年”为时间单位、以“天文单位”为距离单位时太阳质量的归一化值DAYS_PER_YEAR用于把各行星的初始速度从“每天”换算为“每年”。2. Body七个属性的对象原始版使用经典的函数构造器模式function Body(x, y, z, vx, vy, vz, mass) { this.x x; this.y y; this.z z; this.vx vx; this.vy vy; this.vz vz; this.mass mass; }每个天体太阳、木星、土星、天王星、海王星通过Jupiter()、Saturn()等工厂函数以天文观测数据初始化例如木星function Jupiter() { return new Body( 4.84143144246472090e00, -1.16032004402742839e00, -1.03622044471123109e-01, 1.66007664274403694e-03 * DAYS_PER_YEAR, 7.69901118419740425e-03 * DAYS_PER_YEAR, -6.90460016972063023e-05 * DAYS_PER_YEAR, 9.54791938424326609e-04 * SOLAR_MASS ); }随后五个天体组成全局数组const bodies Array(Sun(), Jupiter(), Saturn(), Uranus(), Neptune());3. 三个核心函数offsetMomentum()计算系统总动量并把动量修正施加到太阳上bodies[0]使系统质心保持静止——这是 N 体模拟的标准初始化步骤其内部循环密集读取body.vx * body.mass等属性组合。advance(dt)双重循环对每对天体计算引力加速度。内层循环对每个bodyi/bodyj依次计算const dx bodyi.x - bodyj.x; const dy bodyi.y - bodyj.y; const dz bodyi.z - bodyj.z; const d2 dx * dx dy * dy dz * dz; const mag dt / (d2 * Math.sqrt(d2));然后按牛顿万有引力定律更新速度vxi - dx * massj * mag等 6 条循环结束后再统一推进位置body.x dt * body.vx。该函数是典型的 O(n²) 计算热点也是整个基准中浮点运算量最大的部分。energy()计算系统总能量包括动能项0.5 * mass * (vx² vy² vz²)与引力势能项-(massi * massj) / distance。注意它再次遍历全部天体对计算Math.sqrt求距离与advance构成对称的浮点密集代码。4. 主流程与输出function nbody() { const n 400_000; offsetMomentum(); for (let i 0; i n; i) { advance(0.01); } return energy(); } print(nbody());即先做动量偏移再以dt 0.01步长推进 40 万步约 4000 年最后输出系统能量。400_000使用数字分隔符语法属于较新的 ECMAScript 特性恰好也能检验解析器对该语法的支持。有趣的是类型标注版中保留了//const n 100;这行注释见 benchmarks/nbody/fully-typed/nbody.js供调试时快速缩短运行时间。类型标注版Flow 与 TypeScript 变体README 专门说明fully-typed目录下两个文件的来源与差异这是本基准在本仓库中最重要的工程价值——用同一份数值模拟代码对比同一引擎在无类型、Flow、TypeScript 三种输入下的行为差异例如 Hermes 的类型剥离、-typed编译路径等。fully-typed/nbody.jsFlow文件头声明// flow strict启用 Flow 严格模式常量显式标注const PI:number Math.PI;Body由函数构造器改写为 ES6 class七个字段逐一声明类型class Body { x: number; y: number; z: number; vx: number; vy: number; vz: number; mass: number; constructor(x: number, y: number, z: number, vx: number, vy: number, vz: number, mass: number) { this.x x; this.y y; this.z z; this.vx vx; this.vy vy; this.vz vz; this.mass mass; } }各工厂函数标注返回类型function Jupiter(): Bodybodies声明为const bodies: Body[] [...]offsetMomentum(): void、energy(): number等也全部标注。数字字面量写法也从4.84143144246472090e00精简为4.8414314424647209数值等价。fully-typed/nbody.tsTypeScript内容由 Flow 标注文件直接复制而来结构几乎一一对应唯一的差异点在于print()调用处仓库尚未提供内置函数如print()的 TS 类型声明因此使用// ts-ignore抑制类型错误// ts-ignore TODO: add the type declaration for print() print(nbody());这一点在 benchmarks/nbody/fully-typed/nbody.ts 中有明确注释也印证了 Hermes 的 TS 支持仍在逐步补齐内置声明TODO 留痕。从源码结构看该目录的定位是为“类型标注对引擎性能与正确性的影响”提供 A/B 素材同一算法、同一结果三种形态。在 Hermes 中运行与结果验证该基准的预期输出可以从测试用例中直接获得。仓库中 test/hermes/flow/nbody.js 是一份与fully-typed几乎同构的回归测试其 RUN 与 CHECK 指令给出了可复现的运行方式// RUN: %hermes -Werror -typed %s | %FileCheck --match-full-lines %s // RUN: %shermes -Werror -typed -exec %s | %FileCheck --match-full-lines %s // CHECK: -0.16907495402506745也就是说使用解释型 Hermeshermes -Werror -typed nbody.js使用 Static Hermes静态编译路径shermes -Werror -typed -exec nbody.js-exec表示编译后直接执行参见 agent-perf/tools/run_benchmarks.sh 中cmd(-exec $js_file)的用法两者输出都应与-0.16907495402506745一致。这个数值是太阳系系统能量含符号的确定性结果——40 万步推进后系统能量应基本守恒任何引擎若因浮点实现、对象布局或优化错误产生偏差都能被该断言立刻捕获。因此 nbody 既是性能基准也是数值正确性的回归测试。同类测试还出现在test/AST/ts2flow/nbody.ts类型转换相关用例中说明该基准在本仓库中被复用于多条测试链路。运行前提需先按 doc/BuildingAndRunning.md 构建出hermes或shermes可执行文件fully-typed/nbody.ts若要直接编译需留意其print()上的ts-ignore说明。小结压测对象明确浮点数数值计算 对象属性读取分别对应advance/energy的数学热区与Body七字段的高频访问三版本设计original无类型、函数构造器、fully-typed/nbody.jsFlow 严格模式、ES6 class、fully-typed/nbody.tsTS、ts-ignore处理print()结果可验证预期输出-0.16907495402506745由 test/hermes/flow/nbody.js 固化支持hermes -typed与shermes -typed -exec两条运行路径许可合规BSD 3-Clause见 benchmarks/nbody/LICENSE.md。对于希望深入 Hermes 性能调优对象模型优化、-typed编译路径、Static Hermes 静态执行的开发者nbody 是一份体量适中、物理自洽、结果可校验的理想样例改动引擎后跑一次它就能同时观察到数值正确性与浮点/属性访问两条性能曲线的变化。/DSMLparameter /DSMLinvoke /DSMLtool_calls赞分享语言运行时编译器移动开发【免费下载链接】hermesA JavaScript engine optimized for running React Native.项目地址https://gitcode.com/gh_mirrors/hermes/hermes点击查看免费下载相关推荐CUDA Samples 之 nbody基于 CUDA 的高性能引力 N 体全配对模拟实战解析CUDA Samples 之 nbody基于 CUDA 的高性能引力 N 体全配对模拟实战解析 本篇文章聚焦 CUDA Samples 仓库 cpp/5_D示例工程终极揭秘Hermes引擎对象模型如何实现React Native极致性能优化终极揭秘Hermes引擎对象模型如何实现React Native极致性能优化 Hermes是一款为React Native优化的JavaScript引擎其独语言运行时编译器移动开发Hermes MiniReact no-objects 基准实战在 Static Hermes 与 Hermes 上运行无对象版 React 内核Hermes MiniReact no objects 基准实战在 Static Hermes 与 Hermes 上运行无对象版 React 内核 Min语言运行时编译器移动开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
110张熊猫数据集跑通YOLOv8:VOC转YOLO格式与训练避坑指南 简介:面向需要动物图像检测训练数据的开发者,提供一套完整的熊猫目标检测数据集。资源采用Pascal VOC与YOLO双格式标注,可直接用于训练YOLO系列、Faster R-CNN等主流检测模型,适合视觉算法初学者快速上手或研究人员做数据补充。整… · 2026/9/23 21:54:31
ADM-AMA-MM联合框架实现图像组稀疏去噪 简介:本资源是一份面向信号与图像处理方向研究生、算法工程师及科研人员的优化方法实践代码包,聚焦交替方向法(ADM)、交替最小化法(AMA)、组稀疏信号去噪及Majorization-Minimization(MM&#x… · 2026/9/23 21:54:31
PPT Master:把文档变成可编辑 PPTX 的最短路径 PPT Master:把文档变成可编辑 PPTX 的最短路径 【免费下载链接】ppt-master AI turns documents or topics into real, native PowerPoint decks—with native shapes, transitions and animations, data-backed charts and tables on demand, audio narration from… · 2026/9/23 22:39:12
Salt smbios 执行模块:基于 DMIdecode 的 SMBIOS 硬件信息采集实战指南 运维配置管理后端 【免费下载链接】salt Software to automate the management and configuration of infrastructure and applications at scale. 项目地址: https://gitcode.com/gh_mirrors/sa/salt 点击查看 免费下载 导读
salt.modules.smbios 是 Salt 中负责… · 2026/9/23 22:39:12
JSX从入门到精通:语法规则、编译机制与实战避坑指南 1. 从一个“看起来像HTML”的语法说起第一次看到JSX代码的人,十有八九会愣一下:这玩意儿到底是JavaScript还是HTML?比如下面这段:const element <h1 className"title">Hello, world!</h1>;一个合法的JavaS… · 2026/9/23 22:39:12
TVM Relay 数据流模式语言(DataFlow Pattern)完全指南:从模式匹配到子图重写与划分 编译器深度学习模型优化 【免费下载链接】tvm Open deep learning compiler stack for cpu, gpu and specialized accelerators 项目地址: https://gitcode.com/gh_mirrors/tvm7/tvm 点击查看 免费下载 TVM Relay 的数据流模式(DataFlow Pattern&#x… · 2026/9/23 22:38:59
Flet 字体粗细完全指南:深入理解 flet.FontWeight 枚举与文本渲染原理 前端跨平台桌面应用移动开发 【免费下载链接】flet Build realtime web, mobile and desktop apps in Python only. No frontend experience required. 项目地址: https://gitcode.com/gh_mirrors/fl/flet 点击查看 免费下载 本文以 Flet 官方类型文档 fontweight.… · 2026/9/23 22:38:47
CCSv5.3嵌入式开发全链路配置指南:器件支持包与DebugServer许可证激活 简介:本资源是一份面向嵌入式开发初学者与TI C6000系列DSP学习者的CCSv5.3(Code Composer Studio)集成开发环境安装与工程实战指南,重点解决软件部署、授权激活及常见工程管理难题。文档以详实图文步骤覆盖完整安装流程࿰… · 2026/9/23 22:38:47
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29