多次元配列を扱うための小さな Rust ライブラリ matten を公開しました。このライブラリが生まれた背景を記載します。
Rust は数値計算やデータ処理に適した言語です。ただ、そういった作業を「始める」こと — 行列を用意して、足し算ができる状態にするだけ — が、プロトタイプの段階では必要以上に手間が掛かることがあります。
既存のライブラリは高機能で、しっかりとメンテナンスされています。パフォーマンスが必要なら ndarray や nalgebra を選ぶと良いでしょう。これらはプロダクション品質の数値計算コードに適したライブラリです。
ただしそこには学習コストが伴います。ジェネリクスの型パラメーター、ストレージの抽象化、ビュー型、ライフタイムの考慮。そのコストが見合う場面は多いです。しかし、概念実証の初日から常に見合うとは限りません。
matten が埋めようとしているのは、狭いけれど無視できないこともあるそのギャップです。初期段階の数値計算を、もう少し気軽に始められるようにする — 最初の 1 時間を、型システムではなく問題そのものに使えるように。
プロジェクトの説明で、これを「ファミリーカー」にたとえています。乗り込みやすく、運転が予測しやすく、日常のほとんどの用途に十分快適。レーシングカーではありません。そうなろうともしていません。
具体的には以下を意味します:
- ジェネリクスなしのシンプルな一つだけの公開型、
Tensor。 - 通常の使い方でユーザーがライフタイムを意識する場面は無し。
- シェイプが合わないときは人間にとってわかりやすいエラーメッセージ。
- JSON と CSV サポートがデフォルトで有効。データの入出力を手軽に。
- コード全体で
#![forbid(unsafe_code)]。
次のことは意味しません:ホットパスで既存ライブラリより速い。
この点はライブラリスコープ外です。このライブラリはその点を明示しています。プロトタイプが成熟してパフォーマンス要件を満たす必要が生じた時、その部分をより高性能なライブラリに移行するのが正しい判断です。
matten-ndarray はまさにそのための橋渡しとして存在しており、フラットな Vec<f64> のストレージ構造がデータの移動を簡単にしています。
P.S. — ライブラリ名の由来は “mathematical tensor” …ではありません 😜 方言「待ってん (待ったねん)」からとっています。私たちは時間をつくりながら開発しました。使う人にとっても自分の時間の中で楽な気持ちで使えるものでありますように。