arithmetic

Luna-Flow/arithmetic 定义 Luna Flow 数值类型的分析能力:初等函数;返回结构化错误的检查运算;在显式精度和舍入模式下报告结果如何被舍入的上下文运算;以及区间等包络之间的关系。它为 Float、Double 和整数类型提供默认实例,而把忠实遵循上下文的算术和经认证的算术留给实现同一组 trait 的后端。

本手册描述版本 0.5.0,以及 CHANGELOG.md 中列出的尚未发布的 MoonBit 0.10 迁移。

定位

luna-generic 说明一个类型是什么(Ring、Field 等)。arithmetic 说明它支持哪些分析运算以及这些运算如何失败。数值后端实现这些 trait,算法依赖这些 trait 而不是具体的数值类型。

层级示例返回适用场景
非检查Sqrt::sqrtSelf可以接受该类型自身的特殊值行为
检查SqrtChecked::sqrt_checkedResult[Self, ArithmeticError]无效输入必须变成可处理的错误
上下文SqrtContextual::sqrt_contextualResult[ArithmeticOutcome[Self], ArithmeticError]精度和舍入是显式的,且诊断很重要
包络关系DefinitelyLt::definitely_ltBool值是区间或球,而不是点

包

本模块只有一个包,位于源码根目录 src/,文档中称为 core。

包导入路径内容页面
coreLuna-Flow/arithmetic能力 trait、ArithmeticContext、诊断、错误与认证详情,以及 Float/Double/整数实例API、教程、设计

黑盒测试(src/*_test.mbt)和白盒测试(src/certification_error_wbtest.mbt)属于同一个包;验证指南列出了它们所确立的内容。

阅读路线

  • 初次接触本包: 先阅读入门,再阅读 core 教程。
  • 在库中使用它: 随手备好 core API;其中的表格说明了每个随包实例在边界情形(NaN、零、无穷、上溢)下的实际行为。
  • 实现后端或参与贡献: 阅读 core 设计了解契约及其数学,阅读架构了解代码布局,并在发起 pull request 之前阅读验证和约定。

安装

moon add Luna-Flow/arithmetic@0.5.0
import {
  "Luna-Flow/arithmetic" @lf_arith,
}

本包依赖 Kaida-Amethyst/math 来提供 Float 和 Double 的初等函数。其测试还用到 Luna-Flow/luna-generic。

工具链

代码面向 MoonBit moonc 0.10 或更高版本,使用 moon.mod 和 moon.pkg 清单,并在 wasm-gc、wasm、js 和 native 后端上进行检查。

指南

  • 入门:安装、第一个泛型函数、第一次检查调用和上下文调用。
  • 架构:源码布局、层级、错误与状态。
  • 验证:本地检查关卡、CI 以及测试所确立的内容。
  • 仓库约定:在 Luna Flow 标准之上适用于本手册的规则。