diff_bench
diff_bench には Luna-Flow の MoonBit パッケージに対する差分による正しさと性能のベンチマークがあります。各ベンチマークは同じ入力で二つの十進ライブラリを動かし、両者を独立した BigInt オラクルで検査し、結果が正しい場合に限って Mare Mark で計測します。Luna-Flow 側の対象は floating の decimal_gda パッケージです。
このリポジトリは GitHub でのみ公開される参照用プロジェクトです。mooncakes には公開されておらず、実行時依存として使うことは想定していません。
パッケージ
| パッケージ | 役割 | API | チュートリアル | 設計 |
|---|---|---|---|---|
diff_bench(ルート) | テンプレートのプレースホルダー | API | チュートリアル | 設計 |
dzmingli_vs_floating | DzmingLi/decimal@0.2.2 対 floating GDA、厳密なオラクル、19 演算 | API | チュートリアル | 設計 |
dzmingli_vs_floating/bench | スケーリング用実行ファイル、1〜20,000 桁 | API | チュートリアル | 設計 |
dzmingli_vs_floating/bench_common | 一般的な桁数用実行ファイル、1〜28 桁 | API | チュートリアル | 設計 |
floating_vs_decmial_x | moonbitlang/x/decimal 対 floating GDA、二つの意味論グループ | API | チュートリアル | 設計 |
floating_vs_decmial_x/bench | スケーリング用実行ファイル、1〜4,096 桁 | API | チュートリアル | 設計 |
floating_vs_decmial_x/bench_common | 一般的な桁数用実行ファイル、1〜28 桁 | API | チュートリアル | 設計 |
性能の章では両方の比較の計測結果を報告しています(DzmingLi、X)。
読み進め方
はじめての方。 dzmingli_vs_floating のチュートリアルを読んでください。十数行で除算一つをオラクルと照合し、その後公開された実行を再現します。
結果を読み解く。 まず性能のページを、次に数値の意味について設計のページを読んでください。精度契約、対応のある統計、X との比較の意味論グループです。
貢献する。 二つの設計ページを読み、次に貢献ガイドラインを読んでください。新しい演算には、計時の前にオラクルの規則、証明付きの精度の上界、テストが必要です。
手法の要約
各入力は固定のシードから中立な十進数 として具体化され、計時の外で各ライブラリの表現に変換され、厳密な結果を保持できることが証明された精度で計算されます。結果は正準化され、オラクルと厳密な等価で比較されます。二つのライブラリの計時サンプルはデータセット、繰り返し、ブロックで対応付けられ、中央値で要約されます。
成果物とツール
生の JSONL レコード、HTML レポート、Plot IR、PNG・PDF・SVG の図はマニュアルの外の artifacts/<package>/ に置かれています。tools/ ディレクトリには Python の図のレイアウト(plot_dzmingli_benchmark.py、plot_dzmingli_supplementary_benchmark.py、layout_x_decimal.py。共通部分は mare_plot_ir.py)と公式の decTest 監査(run_dzmingli_dectest_audit.sh)があります。
ツールチェーン
コードは moon.mod と moon.pkg のマニフェストを使う MoonBit moonc 0.10 以降を対象としています。ライブラリパッケージはすべてのターゲットでビルドでき、実行ファイルと非同期の Mare Mark の実行には native が必要です(非同期ランナーは js でも動きます)。公開された計測は native のリリースビルドでの実行です。
moon check --target all
moon test --target native
native と js では一つのテストが失敗します。division precision follows the requested semantic contract は 4097 を期待していますが、これは moonbitlang/core の BigInt::from_string が長い入力を誤って解析する wasm-gc で記録された値です。正しい値は 4099 です。floating_vs_decmial_x の設計を参照してください。