Perry TypeScript ベンチマーク (2026-05-21)
「Perryは速度に難があるので競プロにおけるジャッジ環境の選択肢として検討する理由はないね」という記事を書いたのですが、公開後にPerryの開発者であるRalph (@realamlug)から連絡がありました。その内容に関する追記です。
引用ブロックはその連絡の文章を引用したものです。
GC最適化
The actual cause here was a GC block-reclaim trade-off.
どうやら純粋な速度差というわけではなく、GCの最適化ミスを引いちゃってたみたい。
ごめんねPerry。
Statistical tie with Bun, 1.28× faster than Deno.
まじですか、本当か確認してみましょう
Perryのバージョンを記事執筆時点最新のv0.5.1008に上げて再度ベンチマークを実行してみました。
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
./abc451d-perry < abc451d-input.txt |
336.2 ± 11.1 | 329.0 | 384.4 | 1.15 ± 0.06 |
deno run --quiet --allow-all abc451d-deno.ts < abc451d-input.txt |
368.2 ± 10.4 | 358.7 | 420.8 | 1.27 ± 0.06 |
bun run abc451d-bun.ts < abc451d-input.txt |
291.1 ± 11.7 | 278.6 | 349.1 | 1.00 |
Summary
bun run abc451d-bun.ts < abc451d-input.txt ran
1.15 ± 0.06 times faster than ./abc451d-perry < abc451d-input.txt
1.27 ± 0.06 times faster than deno run --quiet --allow-all abc451d-deno.ts < abc451d-input.txt
お〜〜〜〜〜
Bun・Denoと大差ないくらいの速度になっています。
BigInt関連
BigInt itself was a real problem and we fixed that separately in v0.5.736.
すいませんこっちの検証してないんですけどBigIntも直ったらしいです。すごい
Re:まとめ
かなり頑張っているみたいです。まだv1になってないものなので不安定なのはそりゃそうって感じなんですけど、速度面でのビハインドはほぼ消えたと考えていいでしょう。
ただ、競技プログラミングに関して言えばまだ採用するに値すると評価するのは少々むずかしい気もします。
最大の理由はまだベータ版であることですが、速度面でももうちょっと速くなってほしい気がします。
例えばPythonに目を向けると、2025年10月のAtCoderジャッジ環境アップデートにより新たに使えるようになったCodonは、それまでのPython環境で使われていたPyPyの約3倍くらいの速度が出るらしいです。
もしPerry(あるいは他のコンパイル環境)がDenoやBunの2〜3倍程度の速度を出せればそれはかなり利点となるでしょう。「マイナー環境にも関わらず採用するだけの理由」になるような気がします。
理想的にはACLPC K - Range Affine Range Sumをwasm不使用の順当な解法で通せるようになったらアツいと思います。応援しています。
Discussion