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 组织页展示的仓库;星数为撰写时页面所示。