完成迁移

This commit is contained in:
2026-02-02 12:48:25 +08:00
commit 4600cb0957
28 changed files with 79587 additions and 0 deletions

260
AGENTS.md Normal file
View File

@@ -0,0 +1,260 @@
# 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 中的详细说明