← 文章 开发感想

用 Rust 编译易经:WebAssembly 与古典术数的奇妙相遇

记录将易经演算引擎编译为 WebAssembly 的开发历程,以及在这个过程中对「变」的一些感想。

術數工具

基于 WebAssembly,本地演算,无需联网

写这篇文章的时候,窗外正下着小雨。

我盯着终端里那行 wasm-pack build --target web,忽然觉得有些荒诞——一门诞生于三千年前的占卜之学,正在被编译成 WebAssembly 字节码,准备在全球各地的浏览器里运行。

为什么要做这件事

易经的演算逻辑并不复杂,核心不过是「蓍草法」的随机分组与阴阳判断。但市面上绝大多数的在线起卦工具,要么是纯前端的伪随机,要么是后端黑箱。我想做一个完全透明、可审计、本地运行的演算工具。

WebAssembly 是最合适的选择。它能将 Rust 的计算精度带入浏览器,同时保证所有演算在用户本地完成,不需要任何网络请求。

核心挑战:阴阳的数学表达

易经的阴阳爻有四种状态:

状态数值含义
老阳9阳极生阴,变爻
少阳7阳爻,不变
老阴6阴极生阳,变爻
少阴8阴爻,不变

蓍草法的关键在于三次分组操作,每次操作的余数决定了爻的状态。这个逻辑用 Rust 实现起来非常干净:

fn yarrow_stalk_operation(stalks: u32) -> u32 {
    let left = stalks / 2;
    let right = stalks - left;
    let remainder_left = if left % 4 == 0 { 4 } else { left % 4 };
    let remainder_right = if right % 4 == 0 { 4 } else { right % 4 };
    remainder_left + remainder_right + 1
}

三次操作的结果相加,得到 6、7、8、9 之一,对应四种爻的状态。

关于「变」

在调试这段代码的过程中,我反复思考一个问题:易经的核心是「变」,而程序的核心是「确定性」。

这两者并不矛盾。蓍草法的随机性来自于初始的随机分组,而演算过程本身是完全确定的。就像量子力学——测量之前是叠加态,测量之后坍缩为确定值。

也许这正是古人的智慧:承认随机性的存在,但在随机性之后寻找规律。


工具已经上线,可以在上方的「周易起卦」入口体验。如果你对实现细节感兴趣,欢迎继续关注。