パフォーマンス

技術解説

「秒に出ない」と書いた改行の数え方が、2回目の検索の4割を占めていました — Wide Field⑫:数え方を5倍速くして、hot でも ripgrep を追い越す(3GB 0.40→0.27秒)

【追記 2026-10-16】いまの速さ — v1.9.0 でも、2回目は ripgrep と同等のままです 本文の数字は 1.7.3.6.8・1.7.3.6.9(2026年10月3〜4日)のものです。同じ Mac で、…
技術解説

ripgrep にまだ負けているところを、全部並べます — Wide Field⑭:1.5倍を超える負けは Mac で2種類だけ(複数ファイルを初めて束ねる1回目が 1/1.59、`uvp` の2回目に乗る固定費 0.12秒が 1/2.93)

負けを全部並べます。ただ、負けだけでは全体の形が見えないので、勝ち・負けの全体を先に1枚にしました。 この連載は毎回、「先に、負けているところを書きます」から始めてきました。13回ぶんたまったので、散らばった負けを1枚に…
技術解説

改行を1.88倍速く数えられるようにしたのに、秒数は1秒も動きませんでした — 改善記⑪:メモリ上 1.74→3.27GB/s、外付け SSD からはどちらも 968MB/s

【追記 2026-10-04】続き:2回目(hot)では、改行の数え方が秒に出ました この記事の結論「改行を速く数えても、秒数は動かない」は、ディスクから読む1回目(cold)については今も正しいです。一方、ファイルが…
技術解説

画面が klogg に約2倍負けていた原因は mmap だった — 改善記⑩:表示は mmap・通し読みは pread に分けて、50GB を開く時間を100.6秒→50.44秒

6割しか出ていませんでした。 外付け USB SSD は dd で測ると 927MB/s 出ます。ところが同じ SSD から同じ 50GB を、mmap で 1MB ずつ読むと 551MB/s。半分強です。 なぜ遅いのか…
技術解説

小さい3GBでだけ ripgrep に1.48倍負けていた — 改善記⑦:律速は読み出しではなく固定費、JIT設定と外部コマンド廃止で hot 7項目 11.46秒→7.95秒

小さいほうが、負けました。 50GB では ripgrep と並んでいるのに、3GB では 1.48 倍遅い。ファイルが小さくなるほど成績が落ちる、という妙な形になっていました。 索引を持っているのだから、小さいファイル…
技術解説

「gz は検索できません」と書いていた — 改善記⑧:OS標準の zlib と8バイトCRCで 50GB の gz を 35.65秒→17.20秒、gzip と ripgrep をパイプでつないだ 22.06秒に並んだ

展開のほうが、速かった。 圧縮ファイルの検索を作っていて、いちばん意外だったのはここでした。遅いのは展開だと思い込んでいたのに、測ったら展開は間に合っていて、遅かったのは「壊れていないか確かめる工程」でした。 3GB の…
技術解説

自分に有利な数字を「差」と呼ばない基準を先に決めた — 改善記⑨:下限を2倍から1.5倍に下げたら、ripgrep 比の判定が6行ひっくり返った

1.28 倍は、勝ちではありません。 自分のツールが相手より 1.28 倍速い数字が出たとき、それを「速くなった」と書くかどうか。ここを測る前に決めておかないと、結果を見てから基準が動きます。 では、いくつからなら書いて…
技術解説

正規表現だけ遅い自作CLIを ripgrep と同じ性質にした — 改善記④:必須リテラルを「保守的に」取り出して 50GB の -E を 13.68秒→7.75秒

正規表現だけ遅い。 同じ 50GB のファイルを、同じ道具で探しています。違うのは -E を付けたかどうかだけ。それで秒数がほぼ倍になりました。比較相手の ripgrep には、この段差がありません。 段差を消す鍵は、正…
技術解説

CLIが探した結果を画面に渡して2回読みを1回にした — 改善記⑥:一時ファイル1つと「索引の目印」で、50GB の通しが klogg の 108.14秒に対して 50.76秒

探した結果を、捨てていた。 コマンドで 50GB を探して、当たった行を画面で開く。よくやる流れです。ところがこのとき、コマンドが見つけたヒットの位置は画面に渡っていませんでした。渡っていたのは検索語だけ。 つまり画面は…
技術解説

自作CLIの -i が ripgrep に4.3倍負けていた — 改善記③:文字に戻さずバイトのまま畳んで 2.72秒→0.66秒(例外は U+212A だけ)

-i を付けると4倍遅い。 同じファイル、同じ語、違うのは「大文字小文字を無視するかどうか」だけ。それだけで秒数が4倍になります。探し方の問題だと思って探索のコードを読んでいましたが、犯人はそこにいませんでした。 速い道…