致谢与署名
En Parlant~ 是 En Croissant(“终极国际象棋工具箱”)的分支——一个使用 Tauri(Rust + React/TypeScript)构建的跨平台开源国际象棋图形界面。本文档列出了使这款软件成为可能的每一位个人、团队、组织和项目,从核心应用框架到各个字体、图标和棋子 SVG。
整个项目采用 GPL-3.0 许可,这源于关键国际象棋库(chessground、chessops、shakmaty)的 copyleft 要求,这些库由 Niklas Fiekas 和 Lichess 团队编写。两个人——Niklas Fiekas 和 Thibault Duplessis——几乎构建了使 En Parlant~ 成为可能的整个开源国际象棋基础设施,从棋盘渲染到走法生成再到谜题数据库。
核心项目及其创建者
Section titled “核心项目及其创建者”Francisco Salgueiro 是 En Croissant 的唯一创建者和主要维护者。他贡献了 23 个以上版本中 1,302 多次提交的绝大部分。该项目已获得 1,400 多个 GitHub 星标和 199 个分支,拥有 46 位基于提交的贡献者以及发布说明中致谢的 56 位以上个人。
En Croissant 是一个 Tauri 2 桌面应用程序,使用 TypeScript(87.7%)和 Rust(11.9%)编写。它支持多引擎分析、从 Lichess 和 Chess.com 导入棋局、基于间隔重复的开局训练、带位置搜索的数据库管理以及谜题训练。Francisco 亲自负责 React 前端架构、用于数据库操作和引擎通信的 Rust 后端以及整体产品愿景。他通过 Buy Me a Coffee 在 encroissant.org/support 接受捐赠。
En Parlant~(由 @DarrellThomas 开发)是一个添加了文本转语音(TTS)解说功能的分支——集成了 ElevenLabs 和 Google Cloud 进行文本转语音解说,KittenTTS 用于本地设备端合成,以及 Cloudflare R2 用于音频托管。
分支前 En Croissant 的个人贡献者
Section titled “分支前 En Croissant 的个人贡献者”Francisco Salgueiro — 所有功能的创建者、架构师和主要维护者,包括 Tauri 2 迁移、React 19 迁移、开局练习系统和数据库引擎。
- @spinward — 隐藏当前谜题评分的选项
- @anderslundback — 棋盘走法滚动设置
- @yuval59 — 代码贡献(En Croissant v0.10.0)
- @Cankyre — 与引擎对弈时悔棋;循环浏览妙招/失误/严重错误
- @tblrone — 终止引擎按钮
- @pnodet — 代码贡献(En Croissant v0.10.0)
- @Count-MHM — 代码贡献(En Croissant v0.11.0)
- @Scoutboy06 — 代码贡献(En Croissant v0.11.0)
- @Selyss — 代码贡献(En Croissant v0.11.0)
- @RainRat — 代码贡献(En Croissant v0.11.0)
- @zackschuster — 代码贡献(En Croissant v0.11.0)
- @loloof64 — 棋盘截图功能
- @JayceFFT — 跳转到下一个谜题的开关
- @archimag — 持久化数据库页面状态、报告进度条、Tauri 功能设置
- @LiberaTeMetuMortis — 分析中搜索棋局结果的选项;土耳其语翻译
- @teleginpro — 棋局报告的持久化设置
- @alextaconet — 设置中预览棋子集
- @buracchi — 改进用户页面统计数据;Lichess 会话认证修复
- @TurtleOrangina — “错过”的走法注释;窗口大小持久化修复
- @kimerikal-games — 新手着注释着色;韩语翻译;可翻译字符串
- @PeterLombaers — 单行注释内联显示
- @mtwdev — OP1 局面的残局库
- @BlueManCZ — Linux 上的音频播放修复
- @tweezerticle — Chess.com 导入修复;走子同步修复
Bug 修复贡献者
Section titled “Bug 修复贡献者”- @Nullsp4ce — 谜题模式中接受替代的一步杀
- @woprandi — 残局库评估闪烁修复;可翻译消息标记
- @Breush — Linux 上无 XDG 时的文档目录支持
- @dotneB — 防止谜题完成后继续走子
- @arimourao — 黑方起始含加秒时间的修复
- @tkasa — 更改棋盘方向时保留 FEN
- @wjgr2004 — 防止玩家超时时崩溃
- @ed-cetera — 升变为主线时的无限循环修复
- @sid0-0 — 条件 hooks 修复
- @vainbaum — 空 PGN 保存修复
- @xiaoas、@OleBroemelbue、@nskobelevs、@beachwood23、@jaximus808 — En Croissant v0.14.2 的贡献
| 语言 | 贡献者 |
|---|---|
| 中文 | @chuigda |
| 葡萄牙语 | @franciscoBSalgueiro |
| 西班牙语 | @yako1984、@dav1312 |
| 法语 | @PaulJeFi |
| 意大利语 | @MrPiada |
| 俄语 | @artemy |
| 挪威语(书面挪威语) | @TBestLittleHelper |
| 土耳其语 | @LiberaTeMetuMortis |
| 德语 | @eskopp |
| 韩语 | @kimerikal-games |
文档和 CI/CD 贡献者
Section titled “文档和 CI/CD 贡献者”- @qqiumax — README 许可证更新
- @jaimecbernardo — pnpm 安装说明
- @qoqosz — shakmaty 警告修复
- @hadim — TAURI_SIGNING_PRIVATE_KEY 重命名
- @chrisbilodeau — GitHub 工作流更新
@garbidge、@pmyszka、@powy-e — En Croissant v0.10.0 之前的贡献。
框架和核心平台
Section titled “框架和核心平台”Tauri — Rust/WebView 桌面应用程序框架——由 Daniel Thompson-Yvetot 和 Lucas Nogueira 于 2019 年共同创立,由 The Commons Conservancy 中的 The Tauri Programme 维护。主要贡献者包括 Amr Bashir 和 FabianLars。采用 Apache-2.0 OR MIT 许可。
React 由 Jordan Walke 于 2013 年在 Facebook 创建,由 Meta Open Source 维护。主要贡献者包括 Dan Abramov、Andrew Clark、Sebastian Markbage、Sophie Alpert 和 Brian Vaughn。采用 MIT 许可。
Vite 由 Evan You(同时也是 Vue.js 的创建者)创建,由 VoidZero Inc. 开发。主要贡献者包括 Patak、Anthony Fu 和 Bjorn Lu。采用 MIT 许可。
TypeScript 由 Anders Hejlsberg(同时也是 C# 和 Turbo Pascal 的创建者)在 Microsoft 创建。采用 Apache-2.0 许可。
国际象棋专用库与 Niklas Fiekas 生态系统
Section titled “国际象棋专用库与 Niklas Fiekas 生态系统”Niklas Fiekas 可以说是现代开源国际象棋编程生态系统中最重要的单一贡献者。他编写了 En Parlant~ 在前端和后端使用的所有核心国际象棋逻辑库:
- chessops — 前端使用的 TypeScript 国际象棋及变体规则库。采用 GPL-3.0-or-later 许可。
- shakmaty — 后端使用的 Rust 国际象棋库,提供走法生成、FEN/SAN/UCI 记谱法、位棋盘和 Zobrist 哈希。采用 GPL-3.0-or-later 许可。
- pgn-reader — 快速、无分配、流式的 Rust PGN 解析器。采用 GPL-3.0-or-later 许可。
- shakmaty-syzygy — 用于查询 Syzygy 残局库的 Rust 库。采用 GPL-3.0-or-later 许可。
Niklas Fiekas 同时也是 python-chess(主流 Python 国际象棋库)的作者,以及 Lichess 生态系统的核心贡献者。他在这些库上的 GPL-3.0 许可将 copyleft 要求传递到了 En Parlant~ 本身。
Lichess 生态系统与 Thibault Duplessis
Section titled “Lichess 生态系统与 Thibault Duplessis”Thibault Duplessis 创建了 Lichess.org —— 最大的免费开源国际象棋服务器。Lichess 项目为 En Parlant~ 贡献了多个组件:
- Chessground — 交互式棋盘 UI 组件,具有自定义 DOM 差异比较、SVG 箭头绘制、拖放、预走和纯 CSS 主题。压缩后约 10KB,零依赖。采用 GPL-3.0-or-later 许可。
- Lichess API — 用于导入用户棋局、访问云端评估和查询开局浏览器。属于 AGPL-3.0 Lichess 项目的一部分。
- Lichess 棋局数据库 — 数十亿局 PGN 格式的棋局,按月发布。采用 CC0(公有领域)许可。
- Lichess 谜题数据库 — 从 6 亿局经 Stockfish NNUE 分析的棋局中生成的 460 万以上谜题。采用 CC0 许可。
- 棋子 SVG 和棋盘主题 — 来源于 Lichess 静态资源集合,采用各种许可证(详见下方棋子集部分)。
国际象棋引擎
Section titled “国际象棋引擎”En Parlant~ 支持任何兼容 UCI 协议的引擎,并提供一键安装功能:
- Stockfish — 最强的开源国际象棋引擎,最初由 Tord Romstad、Marco Costalba 和 Joona Kiiski 创建。现由全球社区维护。使用基于 Leela Chess Zero 项目数据训练的 NNUE 评估。GPL-3.0。
- Leela Chess Zero (Lc0) — 受 DeepMind AlphaZero 启发的神经网络国际象棋引擎,由 Gary Linscott 主导。经过超过 25 亿局自我对弈训练。GPL-3.0-or-later。
- RubiChess,由 Andreas Matthies 开发 — 使用 NNUE 评估的强大开源 UCI 引擎。GPL-3.0。
- Komodo — 最初由 Don Dailey(1956–2013)创建,由 Mark Lefler 继续开发,特级大师 Larry Kaufman 提供评估专业知识。2018 年被 Chess.com 收购。非商业用途免费。
- Dragon by Komodo — NNUE 版本,由同一团队加上 Dmitry Pervov 和 Dietrich Kappe 开发。商业/专有。
- Fairy-Stockfish,由 Fabian Fichter 开发 — 变体国际象棋引擎,支持象棋(中国象棋)、将棋、疯狂屋等数十种变体。GPL-3.0。
应用中显示的引擎评分来源于 CCRL(计算机国际象棋等级分列表),由 Graham Banks、Kirill Kryukov、Sergio Martinez、Gabor Szots、Shaun Brewer 等人自 2005 年 12 月起维护。
主要来源于 Lichess 资源集合:
- cburnett(默认)— 由 Colin M.L. Burnett 制作。使用 Inkscape 创建的简洁、易识别的 SVG 棋子。多重许可:BSD-3-Clause、GFDL、GPL、CC-BY-SA-3.0。同时也用作应用程序图标的基础。
- Kosal,由 Philatype 制作 — CC BY 4.0。
- Alpha — 由 Eric Bentzen 制作。简洁、现代的设计。
- Merida — 基于经典 Merida 国际象棋字体,SVG 适配由 Lichess 社区维护。采用 GPLv2+ 许可。
- California — 由 Jerry S. 制作。采用 CC-BY-SA-4.0 许可。
- Anarcandy — 由 Lichess 社区贡献者制作。
- chessnut、chess7、companion、letter、shapes、pixel、pirouetti、cardinal、disguised、dubrovny、fantasy、fresca、gioco、governor、horsey、icpieces、Leipzig、libra、maestro、reillycraig、riohacha、spatial、staunty、tatiana — 来源于 Lichess 及其各自创作者,在 CC BY-SA 3.0 或兼容许可下分发。
- Melanie Thomas — 项目中使用的各种美术作品。
国际象棋数据库
Section titled “国际象棋数据库”| 数据库 | 棋局数量 | 创建者 / 策展人 |
|---|---|---|
| Lumbra’s Gigabase | 约 957 万 | Lumbra(社区策展人) |
| Caissabase 2024 | 约 540 万 | 社区从 MillionBase、KingBase 和 TWIC 策展整理 |
| Ajedrez Data(OTB) | 约 428 万 | Ajedrez Data 社区 |
| Ajedrez Data(通信赛) | 约 152 万 | Ajedrez Data 社区 |
| MillionBase | 约 345 万 | Ed Schroder(Rebel 国际象棋引擎作者)及社区 |
Syzygy 残局库 — 由 Ronald de Man 创建,7 子残局库由 Bojun Guo 于 2018 年生成。由 Lichess.org 托管提供下载。
ChessDB Cloud(chessdb.cn)— 由 Bojun Guo 开发。基于引擎分析构建的大规模国际象棋知识数据库。发布为公有领域。
- KittenTTS,由 KittenML 开发 — 默认的本地 TTS 引擎,随应用捆绑。完全在设备上运行,无需 API 密钥。通过 ONNX Runtime 使用 ONNX 语音模型,通过 eSpeak NG 进行音素化。
- OpenTTS,由 Michael Hansen (synesthesiam) 开发 — 可选的自托管 TTS 服务器,通过 Docker 在本地运行。
- Google Cloud Text-to-Speech — 可选的云端 TTS 提供商,具有 WaveNet 语音。需要用户自行提供 API 密钥。
- ElevenLabs — 可选的高级云端 TTS 提供商,具有高质量语音。需要用户自行提供 API 密钥。
npm 依赖树
Section titled “npm 依赖树”Mantine 生态系统(全部由 Vitaly Rtishchev 开发,MIT 许可)
Section titled “Mantine 生态系统(全部由 Vitaly Rtishchev 开发,MIT 许可)”Vitaly Rtishchev 创建并维护整个 Mantine 组件库 — 30,600+ 星标,100+ 组件,50+ hooks。
@mantine/core、@mantine/hooks、@mantine/form、@mantine/notifications、@mantine/spotlight、@mantine/dates、@mantine/modals、@mantine/carousel、@mantine/tiptap、@mantine/nprogress、@mantine/dropzone、@mantine/code-highlight、postcss-preset-mantine
Tauri npm 包(The Tauri Programme,Apache-2.0 OR MIT)
Section titled “Tauri npm 包(The Tauri Programme,Apache-2.0 OR MIT)”@tauri-apps/api、@tauri-apps/cli、@tauri-apps/plugin-dialog、@tauri-apps/plugin-shell、@tauri-apps/plugin-process、@tauri-apps/plugin-os、@tauri-apps/plugin-log、@tauri-apps/plugin-updater
TanStack(全部由 Tanner Linsley 开发,MIT 许可)
Section titled “TanStack(全部由 Tanner Linsley 开发,MIT 许可)”Tanner Linsley 创建了 TanStack 生态系统:@tanstack/react-query(异步数据获取/缓存)、@tanstack/react-table(无头表格/数据网格)、@tanstack/react-virtual(列表虚拟化)。
TipTap 富文本编辑器(Tiptap GmbH,MIT 许可)
Section titled “TipTap 富文本编辑器(Tiptap GmbH,MIT 许可)”由 Tiptap GmbH 创建。@tiptap/react、@tiptap/starter-kit、@tiptap/extension-link。
React 生态系统
Section titled “React 生态系统”| 包 | 作者 | 许可证 |
|---|---|---|
| react、react-dom | Jordan Walke / Meta | MIT |
| react-router-dom | Ryan Florence、Michael Jackson / Remix Software | MIT |
| react-i18next、i18next | Jan Muhlemann | MIT |
状态管理和动画
Section titled “状态管理和动画”| 包 | 作者 | 许可证 |
|---|---|---|
| zustand | Paul Henschel(原创者)、Daishi Kato(主要维护者) / pmndrs | MIT |
| framer-motion | Matt Perry / Motion Division | MIT |
| embla-carousel-react | David Jerleke | MIT |
国际象棋前端包
Section titled “国际象棋前端包”| 包 | 作者 | 许可证 |
|---|---|---|
| chess.js | Jeff Hlywa | BSD-2-Clause |
| chessground | Thibault Duplessis / Lichess.org | GPL-3.0-or-later |
| chessops | Niklas Fiekas (niklasf) | GPL-3.0-or-later |
| 包 | 作者 | 许可证 |
|---|---|---|
| dayjs | iamkun | MIT |
| fuse.js | Kiro Risk | Apache-2.0 |
| idb-keyval | Jake Archibald | Apache-2.0 |
| recharts | Xian Wang 及社区,基于 D3 构建 | MIT |
| sql.js | Ophir Lojkine 和 Alon Zakai | MIT |
| 包 | 作者 | 许可证 |
|---|---|---|
| @biomejs/biome | Emanuele Stoppa(从 Sebastian McKenzie 的 Rome 分支) | MIT OR Apache-2.0 |
| @vitejs/plugin-react | Evan You / Vite 团队 | MIT |
| postcss | Andrey Sitnik / Evil Martians | MIT |
| typescript | Anders Hejlsberg / Microsoft | Apache-2.0 |
| vite | Evan You / VoidZero Inc. | MIT |
Rust/Cargo 依赖树
Section titled “Rust/Cargo 依赖树”所有 Tauri crate(tauri、tauri-build、tauri-plugin-log、tauri-plugin-dialog、tauri-plugin-shell、tauri-plugin-process、tauri-plugin-os、tauri-plugin-updater)由 The Tauri Programme 开发。采用 Apache-2.0 OR MIT 许可。
序列化(David Tolnay 生态系统)
Section titled “序列化(David Tolnay 生态系统)”David Tolnay 维护着 160 多个 Rust crate,负责 Rust 生态系统中一些最基础的库。crates.io 上大约 40% 的 crate 都间接依赖于 serde。
| Crate | 作者 | 许可证 |
|---|---|---|
| serde | Erick Tryzelaar、David Tolnay | MIT OR Apache-2.0 |
| serde_json | David Tolnay | MIT OR Apache-2.0 |
| thiserror | David Tolnay | MIT OR Apache-2.0 |
| anyhow | David Tolnay | MIT OR Apache-2.0 |
异步运行时和网络
Section titled “异步运行时和网络”| Crate | 作者 | 许可证 |
|---|---|---|
| tokio | Carl Lerche、Alice Ryhl、Sean McArthur、Eliza Weisman | MIT |
| reqwest | Sean McArthur | MIT OR Apache-2.0 |
| futures / futures-util | Alex Crichton | MIT OR Apache-2.0 |
国际象棋库(Niklas Fiekas)
Section titled “国际象棋库(Niklas Fiekas)”| Crate | 许可证 | 描述 |
|---|---|---|
| shakmaty | GPL-3.0-or-later | 国际象棋走法生成、位棋盘、FEN/SAN/UCI |
| pgn-reader | GPL-3.0-or-later | 流式 PGN 解析器 |
| shakmaty-syzygy | GPL-3.0-or-later | Syzygy 残局库查询 |
数据库和文件系统
Section titled “数据库和文件系统”| Crate | 作者 | 许可证 |
|---|---|---|
| rusqlite | John Gallagher(原创者) / rusqlite 开发者 | MIT |
| log | Rust 项目开发者 | MIT OR Apache-2.0 |
| tempfile | Steven Allen | MIT OR Apache-2.0 |
| dirs | Simon Ochsenreither | MIT OR Apache-2.0 |
| flate2 | Alex Crichton、Josh Triplett | MIT OR Apache-2.0 |
| zip | Mathijs van de Nes、Marli Frost、Ryan Levick | MIT |
UI 设计、图标和字体
Section titled “UI 设计、图标和字体”- Tabler Icons — 由 Pawel Kuna 制作的 6,000 多个免费 SVG 图标。通过 @tabler/icons-react 作为 Mantine 生态系统的一部分使用。采用 MIT 许可。
- CodeMirror — 浏览器内代码编辑器,由 Marijn Haverbeke(同时也是 ProseMirror 的创建者和 Eloquent JavaScript 的作者)开发,Adrian Heine 参与贡献。用于 PGN 编辑。采用 MIT 许可。
- Inter — UI 字体,由 Rasmus Andersson 创建。一款针对屏幕可读性优化的可变字体。用作 Mantine 的默认字体。采用 SIL Open Font License 1.1 许可。
- 国际象棋记谱字体(lichess.chess)— 由 pgn4web 作者制作,提供图形化代数记谱法符号。采用 GPLv2+ 许可。
构建工具和开发者基础设施
Section titled “构建工具和开发者基础设施”- Rust — 由 Graydon Hoare 于 2006 年在 Mozilla 创建。由 Rust 基金会维护。主要贡献者:Niko Matsakis、Steve Klabnik、Alex Crichton、Manish Goregaokar。采用 MIT OR Apache-2.0 许可。
- Node.js — 由 Ryan Dahl 于 2009 年创建。由 OpenJS 基金会维护。采用 MIT 许可。
- pnpm — 由 Zoltan Kochan 开发的快速、高效磁盘利用率的包管理器。采用 MIT 许可。
- Biome — 基于 Rust 的统一代码检查/格式化工具,从 Rome(最初由 Sebastian McKenzie——Babel 的创建者——开发)分支而来。由 Emanuele Stoppa 重新建立。采用 MIT OR Apache-2.0 许可。
AI 辅助开发
Section titled “AI 辅助开发”En Parlant~ 分支——包括其 TTS 集成、文档网站、多语言翻译、演示流程和本致谢页面——几乎完全使用 Claude Code(Anthropic 的智能编程工具)构建。Claude Code 使用 Claude(Anthropic 的 AI 助手)直接在终端中工作——读取文件、编辑代码、运行命令和管理 git 工作流。
Anthropic 由 Dario Amodei 和 Daniela Amodei 与多位前 OpenAI 研究人员于 2021 年共同创立,专注于 AI 安全研究。Claude 是他们的大语言模型系列。
外部 API 和数据服务
Section titled “外部 API 和数据服务”- Lichess API — 由 Thibault Duplessis 和 Lichess 团队维护。提供棋局导出、云端评估、开局浏览器和谜题数据。属于 AGPL-3.0 Lichess 项目的一部分。
- Chess.com Published-Data API — 只读 REST API,用于获取公开玩家资料、棋局存档和俱乐部/赛事数据。
- ChessDB Cloud 评估 — 由 Bojun Guo 开发。基于引擎分析构建的国际象棋知识数据库。公有领域。
- Stockfish — 引擎二进制文件托管在我们自己的基础设施上(enparlant.redshed.ai)。
- Lichess — 开局数据库和谜题数据库,托管在我们自己的基础设施上。CC BY 4.0。
许可证合规摘要
Section titled “许可证合规摘要”En Parlant~ 采用 GPL-3.0 许可,这是由其国际象棋依赖库的 copyleft 级联要求决定的:
| 许可证 | 相关包 / 组件 |
|---|---|
| GPL-3.0 / GPL-3.0-or-later | En Parlant~ 本身、chessground、chessops、shakmaty、pgn-reader、shakmaty-syzygy、Stockfish、Lc0、RubiChess、Fairy-Stockfish、Merida 棋子、国际象棋记谱字体 |
| MIT | React、Vite、Mantine(全部)、TanStack(全部)、TipTap(全部)、zustand、framer-motion、embla-carousel、dayjs、recharts、sql.js、Tabler Icons、CodeMirror、Node.js、pnpm、tokio、rusqlite、PostCSS |
| MIT OR Apache-2.0 | Tauri(全部)、Rust 语言、serde(全部)、tokio、reqwest、futures、thiserror、anyhow、log、tempfile、dirs、flate2、TypeScript、Biome |
| BSD-2-Clause | chess.js |
| Apache-2.0 | fuse.js、idb-keyval |
| SIL OFL 1.1 | Inter 字体 |
| CC0(公有领域) | Lichess 棋局数据库、Lichess 谜题数据库 |
| CC-BY-SA-3.0 / 4.0 | cburnett 棋子、California 棋子、Shapes 棋子集 |
| AGPL-3.0 | Lichess 主代码库(API 免费使用) |
| 商业/专有 | Komodo、Dragon by Komodo(可选引擎,未捆绑) |
GPL-3.0 copyleft 要求意味着任何 En Parlant~ 的分发都必须包含源代码或书面承诺提供源代码,衍生作品也必须在 GPL-3.0 或兼容许可下发布。这主要由 Niklas Fiekas 的国际象棋库和 Lichess Chessground 组件驱动。
这款软件的存在源于数十个项目中数百位个人的贡献。三个人值得特别表彰:Francisco Salgueiro 构建了整个应用程序;Niklas Fiekas 构建了国际象棋逻辑基础设施(TypeScript 和 Rust 两端);Thibault Duplessis 构建了棋盘 UI 以及更广泛的 Lichess 生态系统,提供了棋子集、数据库、谜题和云端评估。除他们之外,David Tolnay 的序列化库支撑着 Rust 后端,Tauri 团队使桌面框架成为可能,56 位社区贡献者交付了功能、10 种语言的翻译和 Bug 修复,共同塑造了这款产品。
每一个被评估的棋局局面都受惠于 Stockfish 社区,每一次残局查询都受惠于 Ronald de Man 的 Syzygy 残局库。开源国际象棋生态系统紧密互联——像 En Parlant~ 这样的单个应用程序汲取了跨越二十年的工作成果,从 Colin M.L. Burnett 2006 年在 Wikimedia 上的 SVG 棋子到 React 19 的编译器优化。
我们遗漏了你吗?请给我发一条消息,我们会及时修正。如果你希望保持匿名,也请告知我们:darrell@redshed.ai。