---
title: "QuickJS-NG：可嵌入的小型 JavaScript 引擎，GitHub 4,033 Star - Angryecho"
description: "要把 JavaScript 嵌进自己的 C 程序，又要跟上较新的 ECMAScript，完整的 Node 运行时往往太大。QuickJS-NG 是 Fabrice Bellard、Charlie Gordon 原版 QuickJS 的社区分支，用 C 写成，定位就是小型、可嵌入的引擎。"
canonical_url: "https://www.angryecho.com/c/github/p/P2TBBsqs8tJhlZ2Tl3HMk"
meta:
  "og:description": "要把 JavaScript 嵌进自己的 C 程序，又要跟上较新的 ECMAScript，完整的 Node 运行时往往太大。QuickJS-NG 是 Fabrice Bellard、Charlie Gordon 原版 QuickJS 的社区分支，用 C 写成，定位就是小型、可嵌入的引擎。"
  "og:image": "https://www.angryecho.com/_og/d/c_Post%2Ctitle_~5ZCQ5qe9572R%2Cdescription_~5ZCQ5qe95LiA5LiL77yM5bCx5LiK5ZCQ5qe9572R44CC%2CpostId_P2TBBsqs8tJhlZ2Tl3HMk%2Crevision_~MjAyNi0xMC0yOVQwMjo1NTo1OS41MDEzMzFa%2Cp_Ii9jL2dpdGh1Yi9wL1AyVEJCc3FzOHRKaGxaMlRsM0hNayI%2Cs_9Hofxn7EiWfPFDBg.png"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "QuickJS-NG：可嵌入的小型 JavaScript 引擎，GitHub 4,033 Star"
---

> Index of every page on this site: [llms.txt](https://www.angryecho.com/llms.txt)

# **QuickJS-NG：可嵌入的小型 JavaScript 引擎，GitHub 4,033 Star**

要把 JavaScript 嵌进自己的 C 程序，又要跟上较新的 ECMAScript，完整的 Node 运行时往往太大。 [QuickJS-NG](https://github.com/quickjs-ng/quickjs) 是 Fabrice Bellard、Charlie Gordon 原版 QuickJS 的社区分支，用 C 写成，定位就是小型、可嵌入的引擎。官方 README 写，分叉是因为原项目停更之后要重新把开发跑起来。

> 截至 2026-10-28，仓库 Star **4,033**、Fork **421**，主语言 C，许可证 MIT。最新 Release 是 2026-09-18 的 **v0.17.0**。默认分支最近一次 commit 是 2026-10-24 的 `7a23d8e`，说明是「Fix leak in JS\_ReadBigInt on truncated input」。当天查 GitHub Trending 的 C 语言月榜，没有列出这个仓库。

---

## 1. 嵌进自己的程序

官网把用途写成一句：小型、可嵌入，目标是支持最新的 ECMAScript。站点仍在建设，整份 C API 还没有全部写成文档。

嵌入时可以不带 CMake。每个 Release 附带 `quickjs-amalgam.zip`，把源码收成一个大文件；v0.17.0 这份压缩包是 569,690 字节。要启用 `std`、`os`、`bjson`，编译时加上 `-DQJS_BUILD_LIBC`。

官方列出的使用者包括 AWS 的轻量运行时 [llrt](https://github.com/awslabs/llrt)、逆向框架 [radare2](https://github.com/radareorg/radare2)、Godot 的 [GodotJS](https://github.com/godotjs/GodotJS)、构建系统 [Qbs](https://github.com/qbs/qbs)，以及能在 SQL 里跑 JavaScript 的 DuckDB QuickJS 扩展。要被写进这份名单，需要自己提 PR。

## 2. 命令行：`qjs` 和 `qjsc`

`qjs` 是解释器，带一个简单标准库和 REPL。常用开关包括：

- `-e` 直接求值， `-i` 进入交互。
- `--std` 把 `std`、 `os`、 `bjson` 交给脚本。
- `--memory-limit`、 `--stack-size` 限制内存和栈。
- `-c` 把单个 JS 文件收成独立可执行文件： `qjs -c app.js -o app --exe qjs`。文档写明，这个文件不能再依赖别的 JS 文件，多文件要先用打包器打成一个。

`qjsc` 是编译器。它可以输出字节码，也可以生成带 `main()` 的 C 文件，方便再链进自己的程序。v0.17.0 的 `qjsc-darwin-arm64` 是 1,144,104 字节。

## 3. 语言特性和跨平台

项目自己的差异说明写了四件持续在做的事：社区开发、测试、跨平台、ES 特性。每个 PR 会在 50 多种配置里跑，操作系统、构建类型和 sanitizer 都算在内；每次改动也跑 `test262`。构建改成了 CMake，Windows 用 MSVC 或 Clang，文档把它写成一等支持。

同一页列出的 ES 能力包括 Resizable ArrayBuffer、Float16Array、WeakRef、FinalizationRegistry、Iterator Helpers、`Promise.try`、`Error.isError` 和 Set 运算，另外还有 V8 风格的 `Error.captureStackTrace`。这些名字里，前一类在上游 2025–2026 的更新日志里也能找到，不能当成只有 NG 才有，对照放在下一节。页面写明这是解释器：相对带 JIT 的引擎，性能上限就在这里；已经做的优化是 opcode 合并、多态内联缓存、内存分配和解析速度。NG 的特性页还写，因为体积，不太会去做 `Intl`。

支持平台表里，Linux 覆盖 glibc 和 musl，macOS 要求 11 及以上，Windows 写的是 Windows 7 起（并注明 Windows 7 已停止支持，只在不妨碍项目进展时保留），Android 要求 NDK 不低于 26.0.10792818。FreeBSD、OpenBSD、NetBSD 和 iOS 标的是测试有限。

---

## 4. 和上游 QuickJS 的差别

两边是同一套 C 引擎的两条线，都用来嵌进别的程序，都不是 Node。NG 的差异页写，目标是给已经在用 QuickJS 的人做替代，C API 改动尽量少。

|  | 上游 QuickJS | QuickJS-NG |
| --- | --- | --- |
| 代码从哪来 | [bellard/quickjs](https://github.com/bellard/quickjs)，官网 [bellard.org/quickjs](https://bellard.org/quickjs/) | 从上游分出的 [quickjs-ng/quickjs](https://github.com/quickjs-ng/quickjs) |
| 怎么发布 | 官网按日期发源码包。页面上最新一版是 **2026-06-04**。GitHub 仓库没有 Release | 语义化版本。最新 **v0.17.0**（2026-09-18），Release 里带各平台 `qjs`、`qjsc` 和 WASI |
| 怎么编译 | 仓库里是 Makefile，没有 `CMakeLists.txt` | 主构建改成 CMake，Makefile 是包装。Windows 文档把 MSVC 写成一等支持 |
| 语言标准怎么写 | 介绍页写支持 **ES2025**，并写 test262 在勾选 ES2025 时接近全部通过 | 写的是跟上最新 ECMAScript；特性页链到 test262.fyi 的 `qjs_ng` |
| 2026-10-28 的仓库 | Star 11,077，最近 commit 2026-10-26 | Star 4,033，最近 commit 2026-10-24 |

分叉之后真正拉开的是发布和工程，不是「一个停更、一个还活着」。

- **发布渠道不同。** 上游的正式包在官网，文件名带日期，例如 `quickjs-2026-06-04.tar.xz`，另外有 Cosmopolitan 二进制，一份 zip 覆盖 Linux、Mac、Windows 和几种 BSD 的 ARM64 与 x86\_64。GitHub 上的 `bellard/quickjs` 能看到提交，但 Releases 数量是 0。NG 的包在 GitHub Release，按系统拆开。
- **构建系统不同。** 这是 NG 差异页自己写的改动：为了 Windows 等平台，构建换成 CMake，并加上 MSVC。上游仓库仍是 Makefile。嵌入时 NG 另外提供 `quickjs-amalgam.zip`，不强制宿主使用 CMake。
- **语言特性有重叠，不能按差异页的清单当成 NG 独占。** 上游更新日志里，2025-04-26 加入 WeakRef、FinalizationRegistry，并删掉 bignum 扩展和 `qjscalc`；2025-09-13 加入 Float16Array、 `Promise.try`、 `Error.isError`；2026-06-04 加入可调整大小的 ArrayBuffer、Iterator、Set 方法。NG 差异页也列出了其中好几项。2026-10-29 在两个仓库里搜 `BigDecimal`、 `qjscalc`，当前代码都没有，只在上游 Changelog 里留着旧记录。
- **NG 写明、上游仓库里搜不到的是 V8 栈接口。** `Error.captureStackTrace`、 `Error.prepareStackTrace`、 `Error.stackTraceLimit`。NG 的测试里有调用；同一天在 `bellard/quickjs` 搜 `captureStackTrace` 没有结果。
- **性能数字各说各的，不能横比。** 上游 2026-06-04 相对自己上一版，bench-v8 分数高 42%：自定义小块分配大约 11%，其余微优化大约 30%。介绍页还写，单核跑 test262 大约 2 分钟，运行时从创建到销毁不到 300 微秒，简单 hello world 的 x86 代码 367 KiB。NG 只列出 opcode 合并、多态内联缓存、内存分配和解析速度，没有给出相对上游的倍数。
- **谁在改。** NG 的 PR 在 GitHub 上评审，差异页写每次改动跑 `test262`，并在 50 多种系统、构建和 sanitizer 配置里测。上游的公开记录是官网更新日志和 GitHub 提交。NG 的 README 仍把分叉原因写成上游停更；官网 2026-06-04 还有版本，仓库 2026-10-26 还有提交「fixed arbitrary module namespace names」。

要跟官网源码包和 Bellard 的提交，用上游。要 GitHub Release、CMake、MSVC，以及文档里的 V8 栈接口，用 NG。

### 和 Bun 的差别

Bun 不是这条引擎的另一个分支。它的 README 把自己写成单个可执行文件里的 JavaScript / TypeScript 工具包，用来替代 Node.js：外壳是 Rust，JavaScript 引擎是 JavaScriptCore，里面还有测试、脚本运行和包管理。

|  | QuickJS-NG v0.17.0 的 `qjs` | Bun v1.4.4 的 `bun` |
| --- | --- | --- |
| macOS Apple 芯片 | 1.3 MB（1,320,208 字节） | 84.6 MB |
| Linux x64 | 2.4 MB（2,562,504 字节） | 102.3 MB |

Mac 上大约 67 倍，Linux 上大约 42 倍。367 KiB 是上游介绍页上「引擎链进 hello world」的代码量，不是这张表里的 `qjs`，也不是 Bun。没有 QuickJS-NG 和 Bun 在同一台机器、同一套用例上的对照，这里不写快几倍。嵌进别的程序、由宿主决定能不能碰文件和网络，用 QuickJS 或 QuickJS-NG。要跑现成项目、顺手测试和装包，用 Bun。

---

## 5. 装上和编出来

1. 用预编译文件：打开 [v0.17.0 Release](https://github.com/quickjs-ng/quickjs/releases/tag/v0.17.0)，按系统下载 `qjs` 或 `qjsc`。
2. 从源码编：

```bash
git clone https://github.com/quickjs-ng/quickjs.git
cd quickjs
make
make install
```

默认装到 `/usr/local`。Windows 文档要求改用手写 CMake 命令。大端目标要先 `make codegen`，再 `make`。调试构建是 `make debug`，跑测试套件是 `make test262`。

3. 文档还写： `jsvu` 从 2.2.0 起，请求 `quickjs` 引擎时会装上 QuickJS-NG。安装命令是 `npm install jsvu -g`。

---

## 6. 维护者

README 把作者写成 @null([https://github.com/bnoordhuis)、\[@saghul\](https://github.com/saghul)](<https://github.com/bnoordhuis)、[@saghul](https://github.com/saghul)>) 以及其余贡献者。

- [bnoordhuis](https://github.com/bnoordhuis) 的资料名是 Ben Noordhuis，地点 The Netherlands。简介、公司、博客都空着。贡献数 395。
- [saghul](https://github.com/saghul) 的资料名是 Saúl Ibarra Corretgé，公司栏 `@jitsi / @8x8`，地点 Amsterdam，简介「Fellow Jitster」，博客 [bettercallsaghul.com](https://bettercallsaghul.com)。贡献数 441。他自己的 [txiki.js](https://github.com/saghul/txiki.js) 也在官方使用者名单里。

LICENSE 的版权行同时有 Fabrice Bellard（2017–2026）、Charlie Gordon（2017–2024）、Ben Noordhuis（2023–2026）、Saúl Ibarra Corretgé（2023–2026）。GitHub 账号 [chqrlie](https://github.com/chqrlie) 的资料名是 Charlie Gordon，贡献数 53。这些数字是提交贡献，不是 PR 数。

## 7. 技术栈

| 部分 | 是什么 | 用途 |
| --- | --- | --- |
| 语言 | C | 解析器、解释器、标准库 |
| 构建 | CMake，另有 Makefile 包装 | `make` 编出 `qjs`、`qjsc`；Windows 用手写 CMake |
| 合并编译 | `quickjs-amalgam.zip` | 不引入 CMake 时嵌进别的工程 |
| 测试 | `test262`，`make test262` | 每次改动都跑 |
| 命令行 | `qjs`、`qjsc` | 解释、REPL、字节码和独立可执行文件 |
| 预编译 | GitHub Release | darwin、linux、windows、WASI |
| 讨论 | GitHub Discussions、Matrix `#quickjs-ng:matrix.org` | 没有单独的 `CONTRIBUTING.md` |

## 8. 项目活跃度

查询日期 2026-10-28。Star、Fork 来自仓库 REST。commit、Issue、PR、Release 来自 GraphQL。Contributors 来自贡献者 API 全部分页。

| 指标 | 数值 |
| --- | --- |
| Star | 4,033 |
| Fork | 421 |
| Contributors | 139 |
| 累计 commit | 1,246 |
| 最近 commit 日期 | 2026-10-24 |
| 开放 Issue | 100 |
| 开放 PR | 92 |
| 已合并 PR | 1,010 |
| 已关闭未合并 PR | 152 |
| Release | 24（最新 v0.17.0，2026-09-18） |

仓库创建于 2023-11-01。REST 的 `open_issues_count` 是 192，等于 100 个开放 Issue 加 92 个开放 PR。`pushed_at` 是 2026-10-27，晚于上面的 commit 时间，不把它当成最近代码提交时间。

## 9. 如何贡献

仓库根目录没有 `CONTRIBUTING.md`。官方写明的入口是这些：

1. **反馈。** 用 GitHub Issue。讨论在 [Discussions](https://github.com/quickjs-ng/quickjs/discussions)，也可以上 Matrix `#quickjs-ng:matrix.org`。
2. **开发和验证。** 差异说明写，每个 PR 会在 50 多种配置里测试，并跑 `test262`。本地对应 `make` 和 `make test262`。文档站点仍在建设，C API 没有全部写完。
3. **提交 PR。** 差异页写每个 PR 会在 GitHub 上评审、修改再合并。没有单独写分支名或必须通过的本地命令，这里不补。平台表最后一行是「缺了就开 PR」。使用者名单也靠 PR 加进去。

---

仓库： [quickjs-ng/quickjs](https://github.com/quickjs-ng/quickjs)。文档： [quickjs-ng.github.io/quickjs](https://quickjs-ng.github.io/quickjs/)。和原版的差异说明： [Differences with bellard/quickjs](https://quickjs-ng.github.io/quickjs/diff)。

## 资料与使用说明

1. Star、Fork、语言、许可证、创建时间、 `open_issues_count`、 `pushed_at` 来自 2026-10-28 的 GitHub REST `repos/quickjs-ng/quickjs`。最近 commit 的哈希、时间和说明来自 GraphQL 的默认分支 HEAD，不是 `pushed_at`。
2. 累计 commit 1,246、开放 Issue 100、已关闭 Issue 417、开放 PR 92、已合并 PR 1,010、已关闭未合并 PR 152、Release 24，来自同日 GraphQL。已关闭未合并是 `states: CLOSED` 的 PR，不含已合并。
3. Contributors 139 来自 `GET /repos/quickjs-ng/quickjs/contributors?per_page=100&anon=1` 的全部分页：135 个 User、1 个 Bot（dependabot）、3 个匿名。这个数包含作者，不等于维护团队人数，也不含只参与 Issue 或未合并 PR 的人。文中贡献数是该 API 的 commit 贡献，不是 PR 数。
4. 当天 GitHub Trending 的 C 语言月榜页面里没有 `quickjs-ng/quickjs`，也没有 `bellard/quickjs`。标题只用总 Star，没有「本月新增」。
5. 上游仓库 Star 11,077、Fork 1,176、许可证 SPDX `NOASSERTION`、2026-10-26 的提交说明，来自 2026-10-28 的 `bellard/quickjs` REST。NG README 里的「went dormant」是分叉时的说法，不写成上游现在已经停更。官网 [bellard.org/quickjs](https://bellard.org/quickjs/) 与 [Changelog](https://bellard.org/quickjs/Changelog) 于 2026-10-29 查阅：最新源码包日期 2026-06-04，bench-v8 相对上一版快 42%（小块分配约 11%，微优化约 30%），ES2025、test262 约 2 分钟、生命周期不到 300 微秒、hello world 的 x86 代码 367 KiB，以及 2025-04-26 删除 bignum 和 `qjscalc`、2025-09-13 与 2026-06-04 新增的语言特性，都来自这两页。GitHub Releases 数量 0、没有 `CMakeLists.txt`、有 Makefile，来自 2026-10-29 的仓库 API。
6. 2026-10-29 用 GitHub 代码搜索： `captureStackTrace` 在 `quickjs-ng/quickjs` 的差异页和 `tests/test_builtin.js` 里有，在 `bellard/quickjs` 无结果。 `BigDecimal`、 `qjscalc` 在 NG 无结果；上游只出现在 Changelog。NG 特性页关于 `Intl` 的那句，只代表 NG 文档，不代表上游实测缺失。
7. `qjs`、 `qjsc` 和 `quickjs-amalgam.zip` 的字节数来自 v0.17.0 Release 资源的 `size` 字段。Bun 的 84.6 MB、102.3 MB 是 2026-10-28 从 `bun-v1.4.4` 的 `bun-darwin-aarch64.zip`、 `bun-linux-x64.zip` 中央目录读出的未压缩 `bun`，不是 zip 体积，也不是内存。67 倍、42 倍是这两份未压缩大小除以对应的 `qjs` 字节。上游 367 KiB 不套到 NG 的 `qjs` 或 Bun 上。
8. Bun 的「Rust + JavaScriptCore」、测试和包管理，来自同日仓库 README 的 “What is Bun?”。Star 96,444 和主语言 Rust 来自同日 `oven-sh/bun` REST。没有把 JavaScriptCore 说成这份 Rust 代码。
9. 差异页仍写「超过 40 位贡献者、超过 400 个 PR」。这和上面的 API 数字不一致，正文活动表以 API 为准，不采用这一句。差异页列出的 ES 特性也不再写成 NG 独占，以上游 Changelog 里已出现的条目为准。
10. 安装、平台、CLI、使用者名单和「站点仍在建设」来自官网对应页面，2026-10-28 查阅。 `jsvu` 2.2.0 只按安装页原文转述，没有另行安装核对。本文没有在本机编译或跑分。
11. 作者姓名、地点、公司和简介只取 GitHub 用户公开资料栏。没有从账号名推断履历。

排序方式 :

### **成为第一条评论！**

Nobody's responded to this post yet. Add your thoughts and get the conversation going.

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://www.angryecho.com/c/github/p/P2TBBsqs8tJhlZ2Tl3HMk#post","@type":"DiscussionForumPosting","commentCount":0,"dateModified":"2026-10-29T02:55:59.501Z","datePublished":"2026-10-28T21:53:01.330Z","description":"要把 JavaScript 嵌进自己的 C 程序，又要跟上较新的 ECMAScript，完整的 Node 运行时往往太大。QuickJS-NG 是 Fabrice Bellard、Charlie Gordon 原版 QuickJS 的社区分支，用 C 写成，定位就是小型、可嵌入的引擎。","headline":"QuickJS-NG：可嵌入的小型 JavaScript 引擎，GitHub 4,033 Star","isPartOf":"https://www.angryecho.com/c/github","mainEntityOfPage":"https://www.angryecho.com/c/github/p/P2TBBsqs8tJhlZ2Tl3HMk","text":"要把 JavaScript 嵌进自己的 C 程序，又要跟上较新的 ECMAScript，完整的 Node 运行时往往太大。QuickJS-NG 是 Fabrice Bellard、Charlie Gordon 原版 QuickJS 的社区分支，用 C 写成，定位就是小型、可嵌入的引擎。官方 README 写，分叉是因为原项目停更之后要重新把开发跑起来。\n\n\n\n截至 2026-10-28，仓库 Star 4,033、Fork 421，主语言 C，许可证 MIT。最新 Release 是 2026-09-18 的 v0.17.0。默认分支最近一次 commit 是 2026-10-24 的 7a23d8e，说明是「Fix leak in JS_ReadBigInt on truncated input」。当天查 GitHub Trending 的 C 语言月榜，没有列出这个仓库。\n\n\n\n1. 嵌进自己的程序\n\n官网把用途写成一句：小型、可嵌入，目标是支持最新的 ECMAScript。站点仍在建设，整份 C API 还没有全部写成文档。\n\n嵌入时可以不带 CMake。每个 Release 附带 quickjs-amalgam.zip，把源码收成一个大文件；v0.17.0 这份压缩包是 569,690 字节。要启用 std、os、bjson，编译时加上 -DQJS_BUILD_LIBC。\n\n官方列出的使用者包括 AWS 的轻量运行时 llrt、逆向框架 radare2、Godot 的 GodotJS、构建系统 Qbs，以及能在 SQL 里跑 JavaScript 的 DuckDB QuickJS 扩展。要被写进这份名单，需要自己提 PR。\n\n2. 命令行：qjs 和 qjsc\n\nqjs 是解释器，带一个简单标准库和 REPL。常用开关包括：\n\n\n\n\n\n-e 直接求值，-i 进入交互。\n\n\n\n--std 把 std、os、bjson 交给脚本。\n\n\n\n--memory-limit、--stack-size 限制内存和栈。\n\n\n\n-c 把单个 JS 文件收成独立可执行文件：qjs -c app.js -o app --exe qjs。文档写明，这个文件不能再依赖别的 JS 文件，多文件要先用打包器打成一个。\n\nqjsc 是编译器。它可以输出字节码，也可以生成带 main() 的 C 文件，方便再链进自己的程序。v0.17.0 的 qjsc-darwin-arm64 是 1,144,104 字节。\n\n3. 语言特性和跨平台\n\n项目自己的差异说明写了四件持续在做的事：社区开发、测试、跨平台、ES 特性。每个 PR 会在 50 多种配置里跑，操作系统、构建类型和 sanitizer 都算在内；每次改动也跑 test262。构建改成了 CMake，Windows 用 MSVC 或 Clang，文档把它写成一等支持。\n\n同一页列出的 ES 能力包括 Resizable ArrayBuffer、Float16Array、WeakRef、FinalizationRegistry、Iterator Helpers、Promise.try、Error.isError 和 Set 运算，另外还有 V8 风格的 Error.captureStackTrace。这些名字里，前一类在上游 2025–2026 的更新日志里也能找到，不能当成只有 NG 才有，对照放在下一节。页面写明这是解释器：相对带 JIT 的引擎，性能上限就在这里；已经做的优化是 opcode 合并、多态内联缓存、内存分配和解析速度。NG 的特性页还写，因为体积，不太会去做 Intl。\n\n支持平台表里，Linux 覆盖 glibc 和 musl，macOS 要求 11 及以上，Windows 写的是 Windows 7 起（并注明 Windows 7 已停止支持，只在不妨碍项目进展时保留），Android 要求 NDK 不低于 26.0.10792818。FreeBSD、OpenBSD、NetBSD 和 iOS 标的是测试有限。\n\n\n\n4. 和上游 QuickJS 的差别\n\n两边是同一套 C 引擎的两条线，都用来嵌进别的程序，都不是 Node。NG 的差异页写，目标是给已经在用 QuickJS 的人做替代，C API 改动尽量少。\n\n\n\n\n\n\n\n\n\n\n\n上游 QuickJS\n\n\n\nQuickJS-NG\n\n\n\n\n\n代码从哪来\n\n\n\nbellard/quickjs，官网 bellard.org/quickjs\n\n\n\n从上游分出的 quickjs-ng/quickjs\n\n\n\n\n\n怎么发布\n\n\n\n官网按日期发源码包。页面上最新一版是 2026-06-04。GitHub 仓库没有 Release\n\n\n\n语义化版本。最新 v0.17.0（2026-09-18），Release 里带各平台 qjs、qjsc 和 WASI\n\n\n\n\n\n怎么编译\n\n\n\n仓库里是 Makefile，没有 CMakeLists.txt\n\n\n\n主构建改成 CMake，Makefile 是包装。Windows 文档把 MSVC 写成一等支持\n\n\n\n\n\n语言标准怎么写\n\n\n\n介绍页写支持 ES2025，并写 test262 在勾选 ES2025 时接近全部通过\n\n\n\n写的是跟上最新 ECMAScript；特性页链到 test262.fyi 的 qjs_ng\n\n\n\n\n\n2026-10-28 的仓库\n\n\n\nStar 11,077，最近 commit 2026-10-26\n\n\n\nStar 4,033，最近 commit 2026-10-24\n\n分叉之后真正拉开的是发布和工程，不是「一个停更、一个还活着」。\n\n\n\n\n\n发布渠道不同。 上游的正式包在官网，文件名带日期，例如 quickjs-2026-06-04.tar.xz，另外有 Cosmopolitan 二进制，一份 zip 覆盖 Linux、Mac、Windows 和几种 BSD 的 ARM64 与 x86_64。GitHub 上的 bellard/quickjs 能看到提交，但 Releases 数量是 0。NG 的包在 GitHub Release，按系统拆开。\n\n\n\n构建系统不同。 这是 NG 差异页自己写的改动：为了 Windows 等平台，构建换成 CMake，并加上 MSVC。上游仓库仍是 Makefile。嵌入时 NG 另外提供 quickjs-amalgam.zip，不强制宿主使用 CMake。\n\n\n\n语言特性有重叠，不能按差异页的清单当成 NG 独占。 上游更新日志里，2025-04-26 加入 WeakRef、FinalizationRegistry，并删掉 bignum 扩展和 qjscalc；2025-09-13 加入 Float16Array、Promise.try、Error.isError；2026-06-04 加入可调整大小的 ArrayBuffer、Iterator、Set 方法。NG 差异页也列出了其中好几项。2026-10-29 在两个仓库里搜 BigDecimal、qjscalc，当前代码都没有，只在上游 Changelog 里留着旧记录。\n\n\n\nNG 写明、上游仓库里搜不到的是 V8 栈接口。 Error.captureStackTrace、Error.prepareStackTrace、Error.stackTraceLimit。NG 的测试里有调用；同一天在 bellard/quickjs 搜 captureStackTrace 没有结果。\n\n\n\n性能数字各说各的，不能横比。 上游 2026-06-04 相对自己上一版，bench-v8 分数高 42%：自定义小块分配大约 11%，其余微优化大约 30%。介绍页还写，单核跑 test262 大约 2 分钟，运行时从创建到销毁不到 300 微秒，简单 hello world 的 x86 代码 367 KiB。NG 只列出 opcode 合并、多态内联缓存、内存分配和解析速度，没有给出相对上游的倍数。\n\n\n\n谁在改。 NG 的 PR 在 GitHub 上评审，差异页写每次改动跑 test262，并在 50 多种系统、构建和 sanitizer 配置里测。上游的公开记录是官网更新日志和 GitHub 提交。NG 的 README 仍把分叉原因写成上游停更；官网 2026-06-04 还有版本，仓库 2026-10-26 还有提交「fixed arbitrary module namespace names」。\n\n要跟官网源码包和 Bellard 的提交，用上游。要 GitHub Release、CMake、MSVC，以及文档里的 V8 栈接口，用 NG。\n\n和 Bun 的差别\n\nBun 不是这条引擎的另一个分支。它的 README 把自己写成单个可执行文件里的 JavaScript / TypeScript 工具包，用来替代 Node.js：外壳是 Rust，JavaScript 引擎是 JavaScriptCore，里面还有测试、脚本运行和包管理。\n\n\n\n\n\n\n\n\n\n\n\nQuickJS-NG v0.17.0 的 qjs\n\n\n\nBun v1.4.4 的 bun\n\n\n\n\n\nmacOS Apple 芯片\n\n\n\n1.3 MB（1,320,208 字节）\n\n\n\n84.6 MB\n\n\n\n\n\nLinux x64\n\n\n\n2.4 MB（2,562,504 字节）\n\n\n\n102.3 MB\n\nMac 上大约 67 倍，Linux 上大约 42 倍。367 KiB 是上游介绍页上「引擎链进 hello world」的代码量，不是这张表里的 qjs，也不是 Bun。没有 QuickJS-NG 和 Bun 在同一台机器、同一套用例上的对照，这里不写快几倍。嵌进别的程序、由宿主决定能不能碰文件和网络，用 QuickJS 或 QuickJS-NG。要跑现成项目、顺手测试和装包，用 Bun。\n\n\n\n5. 装上和编出来\n\n\n\n\n\n用预编译文件：打开 v0.17.0 Release，按系统下载 qjs 或 qjsc。\n\n\n\n从源码编：\n\ngit clone https://github.com/quickjs-ng/quickjs.git\ncd quickjs\nmake\nmake install\n\n默认装到 /usr/local。Windows 文档要求改用手写 CMake 命令。大端目标要先 make codegen，再 make。调试构建是 make debug，跑测试套件是 make test262。\n\n\n\n\n\n文档还写：jsvu 从 2.2.0 起，请求 quickjs 引擎时会装上 QuickJS-NG。安装命令是 npm install jsvu -g。\n\n\n\n6. 维护者\n\nREADME 把作者写成 @null(https://github.com/bnoordhuis)、[@saghul](https://github.com/saghul) 以及其余贡献者。\n\n\n\n\n\nbnoordhuis 的资料名是 Ben Noordhuis，地点 The Netherlands。简介、公司、博客都空着。贡献数 395。\n\n\n\nsaghul 的资料名是 Saúl Ibarra Corretgé，公司栏 @jitsi / @8x8，地点 Amsterdam，简介「Fellow Jitster」，博客 bettercallsaghul.com。贡献数 441。他自己的 txiki.js 也在官方使用者名单里。\n\nLICENSE 的版权行同时有 Fabrice Bellard（2017–2026）、Charlie Gordon（2017–2024）、Ben Noordhuis（2023–2026）、Saúl Ibarra Corretgé（2023–2026）。GitHub 账号 chqrlie 的资料名是 Charlie Gordon，贡献数 53。这些数字是提交贡献，不是 PR 数。\n\n7. 技术栈\n\n\n\n\n\n\n\n部分\n\n\n\n是什么\n\n\n\n用途\n\n\n\n\n\n语言\n\n\n\nC\n\n\n\n解析器、解释器、标准库\n\n\n\n\n\n构建\n\n\n\nCMake，另有 Makefile 包装\n\n\n\nmake 编出 qjs、qjsc；Windows 用手写 CMake\n\n\n\n\n\n合并编译\n\n\n\nquickjs-amalgam.zip\n\n\n\n不引入 CMake 时嵌进别的工程\n\n\n\n\n\n测试\n\n\n\ntest262，make test262\n\n\n\n每次改动都跑\n\n\n\n\n\n命令行\n\n\n\nqjs、qjsc\n\n\n\n解释、REPL、字节码和独立可执行文件\n\n\n\n\n\n预编译\n\n\n\nGitHub Release\n\n\n\ndarwin、linux、windows、WASI\n\n\n\n\n\n讨论\n\n\n\nGitHub Discussions、Matrix #quickjs-ng:matrix.org\n\n\n\n没有单独的 CONTRIBUTING.md\n\n8. 项目活跃度\n\n查询日期 2026-10-28。Star、Fork 来自仓库 REST。commit、Issue、PR、Release 来自 GraphQL。Contributors 来自贡献者 API 全部分页。\n\n\n\n\n\n\n\n指标\n\n\n\n数值\n\n\n\n\n\nStar\n\n\n\n4,033\n\n\n\n\n\nFork\n\n\n\n421\n\n\n\n\n\nContributors\n\n\n\n139\n\n\n\n\n\n累计 commit\n\n\n\n1,246\n\n\n\n\n\n最近 commit 日期\n\n\n\n2026-10-24\n\n\n\n\n\n开放 Issue\n\n\n\n100\n\n\n\n\n\n开放 PR\n\n\n\n92\n\n\n\n\n\n已合并 PR\n\n\n\n1,010\n\n\n\n\n\n已关闭未合并 PR\n\n\n\n152\n\n\n\n\n\nRelease\n\n\n\n24（最新 v0.17.0，2026-09-18）\n\n仓库创建于 2023-11-01。REST 的 open_issues_count 是 192，等于 100 个开放 Issue 加 92 个开放 PR。pushed_at 是 2026-10-27，晚于上面的 commit 时间，不把它当成最近代码提交时间。\n\n9. 如何贡献\n\n仓库根目录没有 CONTRIBUTING.md。官方写明的入口是这些：\n\n\n\n\n\n反馈。 用 GitHub Issue。讨论在 Discussions，也可以上 Matrix #quickjs-ng:matrix.org。\n\n\n\n开发和验证。 差异说明写，每个 PR 会在 50 多种配置里测试，并跑 test262。本地对应 make 和 make test262。文档站点仍在建设，C API 没有全部写完。\n\n\n\n提交 PR。 差异页写每个 PR 会在 GitHub 上评审、修改再合并。没有单独写分支名或必须通过的本地命令，这里不补。平台表最后一行是「缺了就开 PR」。使用者名单也靠 PR 加进去。\n\n\n\n仓库：quickjs-ng/quickjs。文档：quickjs-ng.github.io/quickjs。和原版的差异说明：Differences with bellard/quickjs。\n\n资料与使用说明\n\n\n\n\n\nStar、Fork、语言、许可证、创建时间、open_issues_count、pushed_at 来自 2026-10-28 的 GitHub REST repos/quickjs-ng/quickjs。最近 commit 的哈希、时间和说明来自 GraphQL 的默认分支 HEAD，不是 pushed_at。\n\n\n\n累计 commit 1,246、开放 Issue 100、已关闭 Issue 417、开放 PR 92、已合并 PR 1,010、已关闭未合并 PR 152、Release 24，来自同日 GraphQL。已关闭未合并是 states: CLOSED 的 PR，不含已合并。\n\n\n\nContributors 139 来自 GET /repos/quickjs-ng/quickjs/contributors?per_page=100&anon=1 的全部分页：135 个 User、1 个 Bot（dependabot）、3 个匿名。这个数包含作者，不等于维护团队人数，也不含只参与 Issue 或未合并 PR 的人。文中贡献数是该 API 的 commit 贡献，不是 PR 数。\n\n\n\n当天 GitHub Trending 的 C 语言月榜页面里没有 quickjs-ng/quickjs，也没有 bellard/quickjs。标题只用总 Star，没有「本月新增」。\n\n\n\n上游仓库 Star 11,077、Fork 1,176、许可证 SPDX NOASSERTION、2026-10-26 的提交说明，来自 2026-10-28 的 bellard/quickjs REST。NG README 里的「went dormant」是分叉时的说法，不写成上游现在已经停更。官网 bellard.org/quickjs 与 Changelog 于 2026-10-29 查阅：最新源码包日期 2026-06-04，bench-v8 相对上一版快 42%（小块分配约 11%，微优化约 30%），ES2025、test262 约 2 分钟、生命周期不到 300 微秒、hello world 的 x86 代码 367 KiB，以及 2025-04-26 删除 bignum 和 qjscalc、2025-09-13 与 2026-06-04 新增的语言特性，都来自这两页。GitHub Releases 数量 0、没有 CMakeLists.txt、有 Makefile，来自 2026-10-29 的仓库 API。\n\n\n\n2026-10-29 用 GitHub 代码搜索：captureStackTrace 在 quickjs-ng/quickjs 的差异页和 tests/test_builtin.js 里有，在 bellard/quickjs 无结果。BigDecimal、qjscalc 在 NG 无结果；上游只出现在 Changelog。NG 特性页关于 Intl 的那句，只代表 NG 文档，不代表上游实测缺失。\n\n\n\nqjs、qjsc 和 quickjs-amalgam.zip 的字节数来自 v0.17.0 Release 资源的 size 字段。Bun 的 84.6 MB、102.3 MB 是 2026-10-28 从 bun-v1.4.4 的 bun-darwin-aarch64.zip、bun-linux-x64.zip 中央目录读出的未压缩 bun，不是 zip 体积，也不是内存。67 倍、42 倍是这两份未压缩大小除以对应的 qjs 字节。上游 367 KiB 不套到 NG 的 qjs 或 Bun 上。\n\n\n\nBun 的「Rust + JavaScriptCore」、测试和包管理，来自同日仓库 README 的 “What is Bun?”。Star 96,444 和主语言 Rust 来自同日 oven-sh/bun REST。没有把 JavaScriptCore 说成这份 Rust 代码。\n\n\n\n差异页仍写「超过 40 位贡献者、超过 400 个 PR」。这和上面的 API 数字不一致，正文活动表以 API 为准，不采用这一句。差异页列出的 ES 特性也不再写成 NG 独占，以上游 Changelog 里已出现的条目为准。\n\n\n\n安装、平台、CLI、使用者名单和「站点仍在建设」来自官网对应页面，2026-10-28 查阅。jsvu 2.2.0 只按安装页原文转述，没有另行安装核对。本文没有在本机编译或跑分。\n\n\n\n作者姓名、地点、公司和简介只取 GitHub 用户公开资料栏。没有从账号名推断履历。","url":"https://www.angryecho.com/c/github/p/P2TBBsqs8tJhlZ2Tl3HMk","author":{"@type":"Person","name":"UID:13373085","url":"https://www.angryecho.com/u/NGA13373085"},"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/DislikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":2},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":0}]}]}
```

## Sitemap

See the full [sitemap](https://www.angryecho.com/sitemap.md) for all pages.
