はじめに

この資料は Rust 製のコマンドラインツール tac について紹介するものです。

Rustの環境構築やツールのインストール方法については以下を参照してください

Rust開発環境を整える

tac について

tac は Coreutils 由来の GNU tac ユーティリティを高速化し、 クロスプラットフォームに書き直したツールです。 tac はファイルや標準入力読み、行ごとに逆に出力します。

GitHub - neosmart/tac: A high-performance, cross-platform file reverse utility

なぜ高速な tac が必要なのか?

数ギガバイトのウェブアクセスログファイルを逆時系列でgrepしたいときなどに便利です。

実装に関する注意事項

現在、arm64 (aarch64) の NEON アクセラレーションはナイトリーコンパイラーでのみ利用可能です。これを使用する場合は、cargo に --features nightly フラグを指定して、サポートを有効にしてください。

この tac の実装では、SIMD 命令セット (AVX2, NEON) を使用して、改行検出を高速化します。メモリマップドファイルの使用により、投機実行の緩和が有効な場合、入力から読み込む際のコンテキストスイッチによるスローダウンを回避し、さらに性能を向上させることができます。GNU Coreutilsに同梱されているtacのバージョンよりも大幅に(緩和策を無効にした場合は2.55倍、それ以外はもっと)高速であり、さらに自由なライセンスとなっています。

最大の性能を得るために

ドキュメント