贡献指南
本指南汇集了修改 luna-complex 时应遵循的规则。提交拉取请求前请运行 ./ready_to_pr.sh。
代码风格
- 所有代码统一使用
moon fmt格式化。 - 优先使用
src/alias.mbt和src/float_backend/alias.mbt中共享的using导入,而不是反复写完全限定调用。 - 注释应简短且技术化。注释用于解释数值稳定性的取舍、分支选择或不明显的约定;不要复述代码。
- 在
src/extends.mbt中显式提升 trait 方法;已弃用的方法形式保留在那里,并带有#deprecated和#doc(hidden)。
命名
- 绑定与函数:小写加下划线,如
pow_real。 - 类型与 trait:PascalCase,如
Complex或FloatingBackendScalar。 - 文件:小写加下划线,按其负责的行为命名。避免
utils.mbt这类大杂烩文件。
包边界
- 根包负责泛型的
Complex[T]:构造、修改、代数运算以及luna-generic实例。它不包含任何浮点语义。 src/float_backend负责浮点能力 trait 与解析函数。按照当前 MoonBit 的规则,一个包不能为另一个包的类型添加方法或 trait 实例,因此这些都是自由函数。- 仅当该构造在所述约束下满足相应定律时,才为
Complex[T]添加实例;参见核心设计。 - 公开 API 的变更须经过深思熟虑;内部辅助函数保持私有。
数值相关的修改
- 在 float_backend 设计中写明公式以及任何重新缩放或特殊情形的理由,并在 float_backend API 中写明可观察到的分支与特殊值行为。
- 为每一项改变的数值行为添加回归测试:如
exp(log z) = z之类的恒等式、分支切割线上及其附近的值、极大与极小的输入,以及特殊值。
测试要求
- 黑盒测试位于代码旁的
*_test.mbt中,并使用限定名,如@luna-complex.Complex::new。 - 对所有行为发生变化的目标运行
moon test,提交前运行moon test --enable-coverage。 - 公开 API 变化时,用
moon info重新生成pkg.generated.mbti,并检查其差异。
文档
- 手册位于
doc/manual。修改英文页面后,运行lunadoc update并更新doc/locale中的中文和日文翻译目录。 - 手册中的代码示例必须能针对当前代码编译通过。
提交与发布
- 使用英文的 Conventional Commits,例如
fix(float_backend): use pi on the negative real axis。 - 每次提交只聚焦一个逻辑变更。
- 发布前,更新
moon.mod中的版本号,更新README.md和CHANGELOG.md,运行moon check和moon test --enable-coverage,并使用与moon.mod完全一致的版本号触发发布工作流。 - 如果你不是维护者,修改
moon.mod中的依赖或版本声明前请先询问。