Python 的 NumPy 几乎成了数值计算的默认答案。但如果你用的是 D 语言,或者想要一种编译到原生代码、没有解释器开销的写法,Mir 是 D 生态里最成体系的一套数值计算库。它由 libmir 组织维护,组织下有 35 个仓库,全部用 D 编写。
Mir 想解决什么
Mir 的目标是让 D 语言在数值和科学计算里有“拿得出手”的基础设施:多维数组、线性代数、随机数、优化和序列化,并且保持接近 C 的性能。它的核心思路在博客《The Performance Model Behind Mir》里讲得比较清楚:
- 零拷贝的 ndslice 视图:切片、转置、重塑只是改变“怎么看数据”,不复制数据;
- 惰性的 map/reduce 融合:链式操作在最终求值时合并成一次遍历;
- 连续内存布局加 BLAS 绑定:需要重活儿时直接交给成熟的线性代数后端。
站点本身没有给出基准数据,“C 级性能”是作者的主张,选型时请自己跑一遍。
几个核心库
| 库 | 作用 | 备注 |
|---|---|---|
| mir-algorithm | 核心库:多维数组 ndslice、函数式迭代、数值算法 | 180 星,DUB 最新 v3.22.4 |
| mir-core | 代数类型(sumtype / tagged union / variant)、通用反射 API、基础数学 | 33 星 |
| mir-random | 高级随机数生成器与统计分布 | 32 星 |
| mir-stat | 统计包 | 12 星 |
| mir-optim | BetterC 非线性优化框架:非线性最小二乘、L-BFGS | 16 星 |
| mir-ion | Ion、JSON、YAML、CSV、CBOR、MessagePack 序列化框架 | 19 星 |
| asdf | 较早的 JSON 库 | 23 星 |
| mir-cpuid | BetterC 的 CPU 识别例程 | 26 星 |
| dcv | D 的计算机视觉库 | 94 星 |
| dcompute | 把 D 代码原生运行到 GPU 和其他加速器 | 143 星,文档站标注为休眠、不再维护 |
如果只学一个库,学 mir-algorithm。
怎么开始
在 DUB 项目里加依赖就行:
dependency "mir-algorithm" version="~>3.0"
dependency "mir-core" version="~>1.0"
文档站 libmir.org 是这套库的非官方文档档案(原站在 2026 年初下线,现在的站点用来恢复文档)。它的教程页按任务组织,可以按需挑着读,站点称教程里的代码示例都是按当前 Mir 源码编译过的:
| 教程 | 讲什么 |
|---|---|
| ndslice Cookbook | 创建、重塑、切片、映射、规约、融合多维数组的配方 |
| ndslice vs NumPy | 把 NumPy 的操作和 ndslice 一一对照,给从 Python 来的人 |
| Random Numbers & Distributions | 可复现的伪随机数,以及均匀、正态、指数、伽马分布的采样 |
| Serialization | 用 mir-ion 在 JSON / MessagePack / ION 之间切换 |
| Linear Algebra | 矩阵向量乘、矩阵乘、点积和 BLAS 操作 |
| BetterC guide | 写不依赖垃圾回收和运行时的 D 代码 |
API 查询用参考索引。想了解它的取舍,可以读博客里的《Why D for Numerical Computing?》,作者也谈了什么时候别的语言更合适。博客里还有一篇《Shipping Mir to WebAssembly》,演示用 LDC 加 -betterC 把 Mir 的数值代码编译到 WebAssembly,在浏览器里运行,和 BetterC 教程的写法刚好衔接。
适合谁,需要留意什么
适合已经在用 D、需要 NumPy 风格多维数组和数值算法的开发者,也适合想要原生性能又不愿意写 C/C++ 的数值开发者,以及有 NumPy 经验、想试试另一种编译型方案的人。
需要掂量的有三点:
- 生态比 Python 小得多,现成的第三方库和资料少;
- 各库活跃度不一:mir-algorithm、mir-core 在 2026 年 2 月仍有提交,mir-random 在 2026 年 6 月,lubeck 停在 2023 年 7 月,dcompute 已标休眠;
- 文档站是非官方档案,行为细节请以 GitHub 源码为准,许可条款以各库仓库里的 LICENSE 为准。
本文的信息来自 libmir.org 的首页、文档页、教程页、博客页,以及 GitHub 上 libmir 组织页展示的仓库;星数为撰写时页面所示。



