💨

Perry TypeScript ベンチマーク (2026-05-21)

に公開

https://zenn.dev/aya_koto/articles/553ce04b1d5ac4

「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.

まじですか、本当か確認してみましょう

https://github.com/AXT-AyaKoto/perry-ts-test-2026-0421/tree/9abe36f64c7f7470b61cf453713a5f55446788fa

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 Sumwasm不使用の順当な解法で通せるようになったらアツいと思います。応援しています。

Discussion