PageSift(LLM パイプライン向けの Rust 製 Web コンテンツエンジン)を開発する中で、Base64 はブラウザスクリーンショット、MCP の画像リソース、プロキシ認証といった、スループットとメモリ確保が効く場所に何度も現れました。PageSift 内部で育ったそのコーデックを、独立した MIT ライセンスのライブラリとして切り出しました。それが yolow64 です。crates.io で公開済みです。
特徴
- 実行時にディスパッチされる SIMD:x86-64 では AVX2(Linux ではデコードのバルクループがアセンブリ)、AArch64 では NEON、それ以外はスカラーにフォールバック。CPU 機能の検出は一度だけ行いキャッシュします。
- ランタイム依存ゼロ、std のみ。Rust 1.89 以降。
- API は実利用に合わせて用意しました:スライスへの直接書き込み、既存 Vec への追加、検証のみ(デコードなし)、ストリーミングデコード、data URL の一括生成。
- 空白を許容するモードはスペース・タブ・CR・LF のみを 1 パスで無視します。76 文字ごとの CRLF が入る MIME 形式の入力が対象です。
ベンチマーク
条件:i7-10700、CPU 0 固定、同一プロセスで交互測定、完全な実行 3 回の中央値。方法・再現用プログラム・生 CSV はリポジトリにあり、README にはスループットの棒グラフがあります。
- 厳格モード、4 KiB–4 MiB:エンコード・デコードともに
base64クレートの約 6.5–9 倍、base64-simdの約 1.7–2.5 倍。 - CRLF 許容デコード:base64-simd の
forgiving_decodeの約 4 倍。 - Go の最速実装 moego と同一マシンでほぼ互角でした。
正直な注記を 2 点:128 バイト以下の短い入力では 3 ライブラリで勝敗が入れ替わります(ナノ秒単位の固定コストの差で、表にはそのまま掲載しています)。また空白許容の受理規則は 3 者で完全には同じではないため、比較は全員が受理できる正しいパディング付き CRLF 入力で行っています。
使い方
[dependencies]
yolow64 = "0.1"
リポジトリ:https://github.com/YOLOW92/yolow64
crates.io:https://crates.io/crates/yolow64
PageSift 本体はこちらです:https://github.com/YOLOW92/pagesift