AnyPS5 编码规范解析:C++ 命名规则、注释纪律与 Conventional Commits 的自动化执行
逆向工程图形学【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址https://gitcode.com/GitHub_Trending/an/AnyPS5点击查看免费下载AnyPS5 是一套将 PS5 可执行文件自动移植到 Linux 和 Windows 的工具其docs/dev/CONVENTIONS.md定义了全仓库必须遵守的编码规范C 命名约定、极度克制的注释政策、Conventional Commits 提交格式以及“仓库只存 UTF-8 文本、图片一律外置”的文件纪律。这篇技术指南逐条解读这些规范的原文含义并结合仓库中真实落地的执行器 tools/check_conventions.py 与 CI 工作流 .github/workflows/conventions.yml 说明每条规则是如何被逐行扫描、逐 PR 校验的——读完你可以直接在自己的分支上运行同一套检查理解该仓库“规范即代码”的工程思路。一、C 命名规范以 C# 风格为基准的五条规则docs/dev/CONVENTIONS.md 的第一节完整列出了五条 C 命名约定原文逐条如下对象规则示例接口仅含纯虚方法、无实现体的类以I开头与 C# 一致IBinaryPatcher类名与公有方法名PascalCaseNidResolver、ReadValue私有方法与私有字段camelCase—函数参数名camelCasebinary、offset模板参数C# 风格TKey、TValue、TIteratorReadValueTValue这套约定在仓库源码中是真实生效的可以从现有代码直接印证I前缀接口relinker 的二进制修补器抽象即为此类如 IBinaryPatcher它与同目录的ElfPatcher、PeNidPatcher等具体实现构成“接口加多实现”的典型分层TValue风格模板参数ExportExclusions.cpp 中的通用读取模板templatetypename TValue TValue ReadValue(...)以及 HostThreadLocal.hpp 中的templatetypename TValue, typename TTag都遵循规范给定的 C# 命名法guest 导出层的特殊性PS5 系统库导出函数如sceAudioInOpen的符号名由宿主 ABI 决定不参与 C 命名讨论。仓库用宏把它们标注出来VabiMacros.hpp 中 Windows 路径下APS5_VABI展开为__attribute__((sysv_abi))Linux 路径下为空。规范中的“避免非标准扩展”原则__attribute__等正是针对此类宏以外的人为使用检查器会拦截它见第四节extension规则。值得注意的是规范并未要求 guest 导出名遵循 PascalCase——那些名字是给重定位器和 NID 匹配用的 ABI 名称命名约束的对象是 AnyPS5 自己的 C 代码。二、注释纪律只允许三处且技术债注释仅限人工CONVENTIONS.md 第二条规则全文只有一句话却是整个仓库最鲜明、也最容易被自动化验证的特色代码中只允许添加以下三类注释标注技术债的区域且只能由人工添加、#endif的结尾、命名空间的结尾。换言之AnyPS5 默认禁止一切代码注释——不写作者署名、不写解释性注释、不写 TODO。这一政策的背后是 CONTRIBUTING.md 中“Code”一节的总原则每个函数要么精确地做它该做的事要么抛异常未实现路径统一调用NotImplemented_nid_no_patch(__func__)可参考 libSceAudioIn/Export.cpp 及遍布core/libs/prx的Unimplemented.cpp。既然行为边界已经由“实现或抛异常”这条铁律划清注释就没有存在空间唯一被允许的注释类型是技术债标记并且必须与 docs/dev/TechnicalDebt.md 联动——该文件按 Build、Silent stubs、Unknown function info、Functional 等小节逐项记录“当前实现与真实主机的差异”和“未验证的假设”每条都附源码文件链接。检查器把这条规范编译成了精确的正则白名单。在 tools/check_conventions.py 中STRINGS re.compile(r(?:\\.|[^\\])*|\(?:\\.|[^\\\])*\) ALLOWED_COMMENT re.compile(r^\s*(#\s*endif\b|}\s*;?\s*//\s*(end\s)?namespace\b))其含义逐一对应规范原文先剥离字符串字面量STRINGS把代码中的.../...替换为空串后再检测//和/*因此字符串里出现//比如 URL 文本不会被误判为注释白名单仅两种形态#endif行含#后可有空白以及}加可选;再跟// namespace或// end namespace——恰好就是规范允许的“#endif结尾”与“命名空间结尾”适用范围比 C 更广code()方法除 C/C 文件.c/.cc/.cpp/.cxx/.h/.hh/.hpp/.hxx/.inl/.ipp外还对新增的.py、.cmake和CMakeLists.txt行做同类检查#开头的行shebang 除外与 TechnicalDebt 的同 PR 联动检查逻辑中只有当该 PR 同时改动了docs/dev/TechnicalDebt.md时才清空本次运行收集到的全部comment告警。这正是规范中“技术债注释only by a human”的机器化表达——注释必须与技术债清单在同一次 PR 中一起提交二者缺一不可。RULES表中comment规则的提示语也明说了这一点“Comments are only for technical debt, so they need a change to docs/dev/TechnicalDebt.md in the same pull request”。三、Conventional Commits提交与 PR 标题的双重校验CONVENTIONS.md 第三条规则只有一个词遵循 Conventional Commits v1.0.0规范原文以链接形式给出对应规范版本为 1.0.0。仓库把这条规则落实在两个层面提交commit subject。检查器中的标准正则为CONVENTIONAL re.compile(r^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\([^)]\))?!?: \S)即type(scope)?: 非空描述type 限定为feat/fix/docs/style/refactor/perf/test/build/ci/chore/revert十一种scope 可选、!破坏性标记可选。commits()方法遍历base..head之间所有非合并提交git log --no-merges任一不符合者即报commit-subject错误。PR 标题。pull_request()用同一个正则校验 PR title不符合报pr-title。此外它还检查 PR 模板 的三个###小节What / Tested / Checklist必须非空、Checklist 不得存在未勾选项且必须显式回答AI-assisted: yes/no与Depends on: #N/none。模板原文位于 .github/pull_request_template.md其每个勾选项都反向链接到 CONTRIBUTING.md 的对应条款形成“模板—规范—检查器”三层一致。一个符合规范的 PR 标题示例即feat(prx): implement scePadInit提交则可以是fix(relinker): handle empty TLS segment。四、仓库文件纪律只收 UTF-8 文本图片与笔记一律外置CONVENTIONS.md 的最后一条规定了仓库的文件构成仓库中不需要添加图片文件。图片放到 gist 评论里把链接贴进 md 文件即可。“仓库只存 UTF-8 文本”这一条在 tools/check_conventions.py 的repository()方法中被强化为硬规则IMAGES {.png, .jpg, .jpeg, .gif, .bmp, .svg, .webp, .ico, .tga, .dds}对base..head的 numstat 中每个未删除文件新增行数标记为-二进制文件的特征、扩展名在IMAGES集合中、或git show head:path的内容无法按 UTF-8 解码三者居其一即报binary错误。与之配套的notes-file规则规定了笔记类文件的合法去向.md/.markdown/.rst/.log/.patch/.diff以及AGENTS.md、CLAUDE.md、GEMINI.md、.cursorrules、copilot-instructions.md等代理配置文件只允许出现在白名单位置——仓库根目录的README.md、CONTRIBUTING.md.github/docs/dev/与docs/user/。其余位置的新增笔记一律报错提示“笔记、调查过程与代理文件应放进 PR而不是仓库”。CONTRIBUTING.md 的“Branches and pull requests”一节与之呼应调查笔记、报告、截图、日志都附加在 PR 描述里文档要用的图片放 gist 评论md 文件里只留链接。五、自动执行check_conventions.py 的全量规则与 CI 接入以上规范之所以能长期维持关键在于 tools/check_conventions.py 把规范文本编译成了 11 条可执行的机器规则RULES表每条都指明违反时应查阅的文档与修复方向。以origin/main为 base 与HEAD求merge-base随后对git diff的新增行做逐行扫描3rdparty/子模块目录整体豁免规则触发点规范出处comment非白名单注释行CONVENTIONS.md技术债注释commit-subject/pr-title提交/PR 标题不符合 Conventional CommitsCONVENTIONS.mdpr-templatePR 模板小节缺失、勾选未全勾、AI-assisted / Depends on 未填PR 模板binary非 UTF-8 文件、图片入库CONVENTIONS.mdgist 规则notes-file笔记/代理文件出现在白名单之外CONTRIBUTING.mdbranches-and-pull-requestsdoc-linkmd 中的相对链接指向不存在的文件/目录CONTRIBUTING.mddocumentationsilent-stubAPS5_VABI导出函数体仅为(void)arg;/常量返回等静默桩且未登记在 TechnicalDebt.md 的 silent stubs 小节CONTRIBUTING.mdcodeduplicate-export同一导出符号在多个 prx 库中重复定义CONTRIBUTING.mdcodesystem-dependencyCMake 用find_packagePython3/Threads/Git 除外、pkg_check_modules等向系统找第三方依赖CONTRIBUTING.mdcode第三方必须是3rdparty/子模块并从源码构建title-specific核心代码中出现PPSA\d{5}/CUSA\d{5}具体游戏编号CONTRIBUTING.mdcode实现通用行为单游戏特例放进其sce_moduleextension__attribute__、__declspec、非 once 的#pragmaCONTRIBUTING.mdcode几个值得注意的实现细节静默桩检测依赖函数体抽取function_body()从APS5_VABI导出函数起点起剥离字符串与注释后用花括号配对取出整个函数体再与STUB_BODY正则比对(void)x;序列或返回常量/nullptr/*_OK。silent-stub还通过listed()检查该函数或其所在库目录是否已在 TechnicalDebt.md 中被链接——这与规范中“静默桩只允许用于解锁某个标题且只影响 UI且必须登记”完全一致重复导出用git grep交叉验证duplicates()把本次 PR 新增的导出名拼成正则在core/libs/prx全库搜索跨库重名即报错并提示“若无实质内容可用APS5_DUMMY_FUN”文档链接闭环docs()解析 md 新增行中的所有](target)跳过 URL 与锚点把相对路径解析到仓库树中比对不存在即报doc-link。这保证仓库内相对链接永不 404结果输出双通道本地运行打印path:line: error: [rule] 说明在 GitHub Actions 中GITHUB_ACTIONStrue改用::error file...,line...::注解语法并把完整结果表写入 step summaryGITHUB_STEP_SUMMARY因为 GitHub 单文件最多显示 10 条错误注解。CI 侧的接入极其精简全部在 .github/workflows/conventions.ymlon: pull_request: types: [opened, synchronize, reopened, edited] ... - run: python3 tools/check_conventions.py --base ${{ github.event.pull_request.base.sha }} --head ${{ github.event.pull_request.head.sha }}在 PR 的 opened/synchronize/reopened/edited 事件上以双方 head SHA 精确比对permissions只读、并发组按 ref 去重、5 分钟超时。CONTRIBUTING.md 同时给出本地预检命令要求推送前自行跑通python3 tools/check_conventions.py --base origin/main六、实践清单一个符合规范的 PR 应该长什么样把上述规范与 .github/pull_request_template.md 合并可得到一份可直接核对的提交前检查表命名类与公有方法 PascalCase接口I前缀私有成员与参数 camelCase模板参数TKey/TValue风格注释除#endif、// namespace收尾外不写任何注释确需标注技术债时同一 PR 内更新 docs/dev/TechnicalDebt.md且由人工撰写未实现路径调用NotImplemented_nid_no_patch(__func__)抛异常确需静默桩则登记到 TechnicalDebt 的 Silent stubs 小节行为取向实现函数的通用语义不针对某个PPSA/CUSA编号做特判标题自带模块由 relinker 转换加载宿主不重复实现依赖第三方代码以 git 子模块放入3rdparty/并从源码构建CMake 不向系统find_package提交与标题全部符合 Conventional CommitsPR 标题同规模板三小节填实、勾选全勾、明确Depends on与AI-assisted文件只提交 UTF-8 文本截图与调查笔记放 PR 描述文档图片链接指向 gist 评论验证本地运行python3 tools/check_conventions.py --base origin/main与ctest确认全部通过后再推送。从源码结构看这套体系的分工是CONVENTIONS.md 提供“人读的规则”check_conventions.py 提供“机器执行的等价物”PR 模板提供“提交前的自检界面”TechnicalDebt.md 提供“注释与桩函数的登记簿”。四者相互链接、互为校验构成 AnyPS5 在多人含 AI 辅助协作下维持代码一致性的完整闭环对贡献者而言读懂这四份文件就等于读懂了该仓库的全部协作契约。赞分享逆向工程图形学【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址https://gitcode.com/GitHub_Trending/an/AnyPS5点击查看免费下载相关推荐ReactXP 跨平台开发库完全指南基于 React 与 React Native 的统一抽象层ReactXP 跨平台开发库完全指南基于 React 与 React Native 的统一抽象层 ReactXP 是微软开源的一个基于 React 与 Rea人工智能AI AgentAgent记忆MCP服务dotnet/runtime C 编码风格规范20 条规则详解与 .editorconfig 自动执行机制dotnet/runtime C 编码风格规范20 条规则详解与 .editorconfig 自动执行机制 本篇技术文章以 dotnet/runtime 仓库语言运行时标准库JIT编译编译器php-jwt编码规范详解命名、注释与代码组织php jwt编码规范详解命名、注释与代码组织 引言为什么编码规范对JWT库至关重要 JSON Web TokenJWTJSON网络令牌作为一种紧凑且后端安全上一篇如何5分钟内将位图转换为无限放大的矢量图vectorizer深度解析下一篇深入解析 KSUIDSegment 开源的时间有序全局唯一 ID 生成库Go 实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

js:关于箭头函数this指向和bind

js:关于箭头函数this指向和bind

1.bind方法注意事项: 调用 f.bind(someObject) 会创建一个新函数,这个新函数具有与 f 相同的函数体和作用域,但 this 的值永久绑定到 bind 的第一个参数,无论函数如何被调用。 function f() {return this.a; }const g f.bind({…

2026/10/9 1:21:56 阅读更多 →
TurboQuant+ 对 DFlash 自草稿投机解码的 31 组实验调查:GDN 混合架构的验证瓶颈、tape-replay 回滚与可行路径

TurboQuant+ 对 DFlash 自草稿投机解码的 31 组实验调查:GDN 混合架构的验证瓶颈、tape-replay 回滚与可行路径

【免费下载链接】turboquant_plus 项目地址: https://gitcode.com/gh_mirrors/tu/turboquant_plus 点击查看 免费下载 本文基于 TurboQuant 仓库研究文档《Speculative Decoding on GDN Hybrid Architectures: A 31-Experiment Investigation》整理。核心主题是&am…

2026/10/9 1:21:56 阅读更多 →
Dinero.js 金额变更(Mutations)深入指南:加减乘与分配的不变式与源码实现

Dinero.js 金额变更(Mutations)深入指南:加减乘与分配的不变式与源码实现

金融科技 【免费下载链接】dinero.js Create, calculate, and format money in JavaScript and TypeScript 项目地址: https://gitcode.com/gh_mirrors/di/dinero.js 点击查看 免费下载 导读 本文聚焦 Dinero.js 中用于操作(变更)货币金额的…

2026/10/9 1:21:56 阅读更多 →

最新新闻

沁恒微 RISC-V 蓝牙芯片低功耗测试

沁恒微 RISC-V 蓝牙芯片低功耗测试

做一下沁恒微 RISC-V 蓝牙芯片低功耗测试 ...... 矜辰所致 ... 增加 内部DCDC 的说明 2025/11/12 ... 增加 CH592 BLE 低功耗测试说明 2026/7/6 ... 增加 CH572 BLE 低功耗测试说明 2026/10/8前言 作为一款 ble 蓝牙芯片,低功耗…

2026/10/9 1:50:14 阅读更多 →
react-day-picker 的 ModifiersStyles 类型详解:按匹配器为日期单元格注入内联样式

react-day-picker 的 ModifiersStyles 类型详解:按匹配器为日期单元格注入内联样式

UI组件前端 【免费下载链接】react-day-picker DayPicker is a customizable date picker component for React. Add date pickers, calendars, and date inputs to your web applications. 项目地址: https://gitcode.com/gh_mirrors/re/react-day-picker 点击查看…

2026/10/9 1:50:14 阅读更多 →
k3d 底层基石:深入 Docker Engine API 的 Go 客户端(vendor 版 client 包解析)

k3d 底层基石:深入 Docker Engine API 的 Go 客户端(vendor 版 client 包解析)

云原生容器编排 【免费下载链接】k3d Little helper to run CNCFs k3s in Docker 项目地址: https://gitcode.com/gh_mirrors/k3/k3d 点击查看 免费下载 导读:k3d 的核心能力是"在 Docker 中运行 CNCF k3s",而它操作容器、拉取镜像…

2026/10/9 1:50:14 阅读更多 →
Superpowers:LLM驱动的智能编程增强工具链实战指南

Superpowers:LLM驱动的智能编程增强工具链实战指南

1. 项目概述:Superpowers 不是超能力,而是开发者工作流的“智能增强套件”你最近在 GitHub、Hacker News 或国内技术社区刷到 “superpowers” 这个词,大概率不是漫威新片预告,而是一群工程师在讨论如何把日常编码体验从“手动挡”…

2026/10/9 1:50:14 阅读更多 →
CodePilot Memory Runtime 解耦实战:跨 Claude/Codex/Native 的 Runtime 中立记忆架构与辅助调用修复

CodePilot Memory Runtime 解耦实战:跨 Claude/Codex/Native 的 Runtime 中立记忆架构与辅助调用修复

人工智能AI 应用AI Agent交互助手MCP Clients本地部署 【免费下载链接】CodePilot A multi-model AI agent desktop client — connect any AI provider, extend with MCP & skills, control from your phone. Built with Electron Next.js. 项目地址: https:/…

2026/10/9 1:50:14 阅读更多 →
飞桨模型库社区临床模型 emilyalsentzer/Bio_Discharge_Summary_BERT 的获取与加载指南

飞桨模型库社区临床模型 emilyalsentzer/Bio_Discharge_Summary_BERT 的获取与加载指南

人工智能深度学习计算机视觉NLP语音 【免费下载链接】models Officially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on. 项目地址: https://gitcode.com/gh_mirrors/mo/models 点击查看 免费下载 本文围绕飞…

2026/10/9 1:49:14 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →