コントリビューションガイドライン
このガイドは luna-complex を変更する際のルールをまとめたものです。プルリクエストを作成する前に ./ready_to_pr.sh を実行してください。
コードスタイル
- すべてのコードを
moon fmtで整形すること。 - 完全修飾名での呼び出しを繰り返すより、
src/alias.mbtとsrc/float_backend/alias.mbtにある共有のusingインポートを使ってください。 - コメントは短く技術的に保ってください。コメントでは数値安定性のための選択、分枝の選択、自明でない契約を説明し、コードの内容を繰り返さないでください。
- トレイトメソッドは
src/extends.mbtで明示的に昇格させてください。非推奨のメソッド形式は#deprecatedと#doc(hidden)を付けてそこに残します。
命名
- 束縛と関数:
pow_realのように、小文字とアンダースコア。 - 型とトレイト:
ComplexやFloatingBackendScalarのように、PascalCase。 - ファイル: 小文字とアンダースコアで、そのファイルが担う振る舞いにちなんだ名前を付けます。
utils.mbtのような何でも入れるファイルは避けてください。
パッケージの境界
- ルートパッケージはジェネリックな
Complex[T]を担います。構築、変更、代数演算、luna-genericインスタンスです。浮動小数点のセマンティクスは含みません。 src/float_backendは浮動小数点の能力トレイトと解析関数を担います。現在の MoonBit のルールでは、パッケージは他のパッケージの型にメソッドやトレイトインスタンスを追加できないため、これらは自由関数になっています。Complex[T]にインスタンスを追加するのは、明記された制約のもとでその構成が法則を満たす場合に限ります。core の設計 を参照してください。- 公開 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にある中国語と日本語のカタログを更新してください。 - マニュアル内のコード例は、現在のコードに対してコンパイルできなければなりません。
コミットとリリース
fix(float_backend): use pi on the negative real axisのような、英語の Conventional Commits を使ってください。- 1 つのコミットは 1 つの論理変更に集中させること。
- 公開する前に、
moon.modのバージョンを更新し、README.mdとCHANGELOG.mdを更新し、moon checkとmoon test --enable-coverageを実行してから、moon.modと正確に同じバージョンで公開ワークフローを起動してください。 - メンテナでない場合は、
moon.modの依存関係やバージョンの宣言を変更する前に確認してください。