Files
quickjs-prj/AGENTS.md
2026-02-02 12:48:25 +08:00

260 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# QuickJS 项目上下文文档
## 项目概述
这是一个包含 QuickJS JavaScript 引擎及其相关项目的工作空间。QuickJS 是一个小型且可嵌入的 JavaScript 引擎,旨在支持最新的 ECMAScript 规范。
### 目录结构
```
D:\workspace\quickjs-prj\
├── quickjs/ # QuickJS-ng 主项目源码QuickJS 的维护分支)
├── yps-quickjs/ # 空目录,可能用于自定义项目
└── AGENTS.md # 本文档
```
### 主项目quickjs/
QuickJS-ng 是原 QuickJS 项目(由 Fabrice Bellard 和 Charlie Gordon 创建)的维护分支,在原项目进入休眠状态后,由社区重新启动开发,旨在继续推进该引擎的发展。
**主要特点:**
- 小型且可嵌入的 JavaScript 引擎
- 支持最新的 ECMAScript 规范
- 用 C 语言编写C11 标准)
- 跨平台支持Windows、Linux、macOS、WASI 等)
**核心技术组件:**
- `quickjs.c` - 核心 JavaScript 引擎实现
- `quickjs.h` - 公共 API 头文件
- `quickjs-libc.c/h` - 标准 C 库扩展
- `libregexp.c/h` - 正则表达式引擎
- `libunicode.c/h` - Unicode 支持
- `qjs.c` - 命令行解释器REPL
- `qjsc.c` - JavaScript 字节码编译器
## 构建和运行
### 构建系统
QuickJS 使用 **CMake** 作为主要构建系统,同时提供了辅助的 **Makefile** 用于简化常见操作。
### Windows 构建说明
由于当前运行环境为 Windowswin32需要手动运行 CMake 命令:
```powershell
# 进入 quickjs 目录
cd quickjs
# 配置构建Release 模式)
cmake -B build -DCMAKE_BUILD_TYPE=Release
# 编译项目
cmake --build build -j
# 或者使用 Makefile如果 make 可用)
make
```
### 常用构建命令
```bash
# 标准构建Release 模式)
make
# Debug 构建(无优化,适合开发调试)
make debug
# 清理构建
make clean
# 完全清理(删除 build 目录)
make distclean
# 安装到系统(默认 /usr/local
make install
```
### 构建选项CMake
可以通过 CMake 变量或环境变量配置构建选项:
- `BUILD_SHARED_LIBS` - 构建共享库默认OFF
- `QJS_BUILD_EXAMPLES` - 构建示例程序默认OFF
- `QJS_BUILD_CLI_STATIC` - 构建静态 qjs 可执行文件默认OFF
- `QJS_BUILD_CLI_WITH_MIMALLOC` - 使用 mimalloc 内存分配器默认OFF
- `QJS_DISABLE_PARSER` - 禁用 JS 源码解析器默认OFF
- `QJS_ENABLE_ASAN` - 启用地址消毒器默认OFF
- `QJS_ENABLE_MSAN` - 启用内存消毒器默认OFF
- `QJS_ENABLE_TSAN` - 启用线程消毒器默认OFF
- `QJS_ENABLE_UBSAN` - 启用未定义行为消毒器默认OFF
示例:
```bash
cmake -B build -DCMAKE_BUILD_TYPE=Debug -DQJS_BUILD_EXAMPLES=ON
```
### 运行测试
```bash
# 运行基本测试套件
make test
# 运行完整的 Test262 测试套件
make test262
# 快速运行 Test262仅测试核心功能
make test262-fast
# 更新 Test262 测试结果(在实现新功能后)
make test262-update
# 运行性能基准测试
make microbench
```
### 可执行文件
构建完成后,在 `build/` 目录下会生成以下主要可执行文件:
- `qjs` - QuickJS 命令行解释器REPL
- `qjsc` - JavaScript 到 C 的编译器
- `run-test262` - Test262 测试套件运行器
- `api-test` - API 测试程序
### Amalgamated 构建
如果需要单文件编译,可以使用 amalgamated 版本:
```bash
make amalgam
```
这将在 `build/` 目录生成 `quickjs-amalgam.zip`,包含合并后的源文件。
## 开发约定
### 代码风格
- 使用 C11 标准
- 严格的编译器警告:`-Wall -Werror -Wextra`MSVC 有特定配置)
- 遵循项目的现有代码风格和命名约定
- 使用 4 空格缩进(根据现有代码推断)
### 编码规范
- 所有字符串应为纯 ASCII 或 UTF-8 编码
- 除非单独传递长度参数C 字符串必须以 null 结尾
- 使用项目提供的类型定义(如 `JSRuntime`, `JSContext` 等)
### 版本控制
- 项目使用 Git 进行版本控制
- 版本号在 `quickjs.h` 中定义(`QJS_VERSION_MAJOR`, `QJS_VERSION_MINOR`, `QJS_VERSION_PATCH`
- 遵循 MIT 许可证
### 提交和贡献
- 参考现有的 GitHub Actions 工作流(`.github/workflows/`
- CI 流程包括:
- `ci.yml` - 持续集成
- `docs.yml` - 文档构建
- `release.yml` - 发布流程
- `tsan.yml` - 线程消毒器测试
- `valgrind.yml` - 内存泄漏检测
### 平台特定注意事项
**Windows**
- 默认栈大小设置为 8MB防止栈溢出
- 需要 `_WIN32_WINNT=0x0601`Windows 7+ 支持)
- MinGW 构建需要静态链接选项
**macOS**
- GCC 11+ 需要额外的编译器标志(`-Wno-maybe-uninitialized`
**WASI**
- 需要模拟进程时钟和信号
## 项目文档
项目包含详细的文档,位于 `quickjs/docs/docs/` 目录:
- `installation.md` - 安装指南
- `building.md` - 构建说明
- `cli.md` - 命令行工具使用
- `intro.md` - 项目介绍
- `es_features.md` - 支持的 ES 特性
- `stdlib.md` - 标准库文档
- `supported_platforms.md` - 支持的平台
- `developer-guide/` - 开发者指南API、内部机制等
文档使用 Docusaurus 构建,位于 `quickjs/docs/` 目录。
## 示例代码
项目包含多个示例,位于 `quickjs/examples/` 目录:
- `hello.js` - 基本的 Hello World 示例
- `hello_module.js` - 模块使用示例
- `fib.js` / `fib.c` - 斐波那契数列JS 和 C 模块)
- `test_fib.js` - 斐波那契测试
- `pi_bigint.js` - 使用 BigInt 计算 Pi
这些示例需要启用 `QJS_BUILD_EXAMPLES` 选项才能构建。
## 重要文件
### 核心源文件
- `quickjs.h` - 主 API 头文件1288+ 行)
- `quickjs.c` - 核心引擎实现
- `quickjs-libc.h` - 标准 C 库扩展头文件
- `quickjs-libc.c` - 标准 C 库扩展实现
### 构建配置
- `CMakeLists.txt` - CMake 构建配置
- `Makefile` - 辅助 Makefile包装 CMake 命令)
- `meson.build` - Meson 构建配置(可选)
### 测试
- `tests/` - 项目特定测试
- `test262/` - Test262 ECMAScript 兼容性测试
- `run-test262.c` - Test262 运行器
- `tests.conf` - 测试配置
- `test262.conf` - Test262 配置
### 工具
- `amalgam.js` - 生成 amalgamated 构建的脚本
- `unicode_gen.c` - Unicode 数据生成器
## 相关资源
- 项目官网https://quickjs-ng.github.io/quickjs/
- GitHub 仓库https://github.com/quickjs-ng/quickjs
- 原 QuickJS 项目https://bellard.org/quickjs
- ECMAScript 规范https://tc39.es/ecma262/
## 注意事项
1. **Windows 开发**:需要手动运行 CMake 命令,参考上述构建说明
2. **栈大小**Windows 上默认栈大小为 8MB防止运行时栈溢出
3. **编码**:确保所有字符串使用 UTF-8 编码
4. **调试**:使用 `make debug` 或 CMake Debug 模式进行开发调试
5. **测试**:提交代码前确保 `make test``make test262` 通过
## 当前工作目录信息
- 工作目录:`D:\workspace\quickjs-prj`
- 平台Windows (win32)
- 操作系统Windows 10.0.26100
- Git 版本2.48.1.windows.1
- Python 版本3.12.9
## TODO 项
- `yps-quickjs/` 目录当前为空,可能需要添加自定义项目或说明
- 如果需要其他构建选项或平台特定的配置,请参考 CMakeLists.txt 中的详细说明