HN🔥 70
💬 46

RustからTypeScriptに書き換えたら3倍速くなった!?WASMパーサー開発の驚きの結果

zahlekhan
約11時間前

ディスカッション (11件)

0
zahlekhanOP👍 70
約11時間前

Rustで実装していたWASMパーサーをTypeScriptで書き直したところ、なんと3倍もの高速化に成功したという興味深い報告です。一般的にパフォーマンス面で有利とされるRustよりも、V8エンジンなどのランタイム最適化が効くケースではTypeScriptの方が優れた結果を出すこともあるという、エンジニアにとって非常に刺激的な事例となっています。

1
blundergoat
約10時間前

ここでの本当の収穫はRustよりTSが優れてることじゃなくて、ステートメントレベルのキャッシュによるO(N²)からO(N)へのストリーミング改善だよね。これ自体で言語に関係なく3.3倍も速くなってる。WASMの境界コストの解消は2〜4倍だけど、ストリーミング中の体感遅延にとって本当に重要なのはアルゴリズムの修正だよ。タイトルは、もっと興味深いエンジニアリングの部分を過小評価してる気がするな。

2
nine_k
約10時間前

「コードを言語Lから言語Mに書き換えたら良くなった!」ってのは、まあ当然だよね。こんがらがってた部分を整理したり、過去の悪い設計を避けたり、最新のより良い手法を適用するチャンスなんだから。これはL=M、つまり同じ言語でのリライトでも同じことが言える。スピードアップの要因は言語じゃなくて、書き換えと再設計にあるんだよ。

3
spankalee
約10時間前

なんでOpen UIがWASMで何かしてるって話を聞かないのか不思議だったんだけど。この新興企業、Open UIっていうW3Cコミュニティグループが5年以上使ってる名前と全く同じ、すごく紛らわしい名前を選んだんだね。https://open-ui.org/ こっちのOpen UIはHTMLのポップオーバーとかカスタマイズ可能なselect、インボーカーコマンド、アコーディオンとかを担当してる標準化団体。彼らは素晴らしい仕事をしてるよ。

4
evmar
約9時間前

ちなみに、Rust/JSの境界を越えてオブジェクトをシリアライズする問題について深掘りしてみたんだけど、serdeのアプローチはパフォーマンス的にあまり良くないことに気づいて、ここで改善を模索してみたよ:https://neugierig.org/software/blog/2024/04/rust-wasm-to-js....

5
nallana
約9時間前

なんで共有バッファを使わないんだろう?このホットパスでJSONにシリアライズするのは、本来なら完全に避けられるはずなんだけど。

6
joaohaas
約9時間前

ああ、AIが書いた文章って本当に嫌い。最後のベンチマークのまとめなんて何の意味もない。Rust実装の「Full-stream total」の「ベースライン」値に言及して、serde-wasm-bindgenが「+9〜29%遅い」なんて言ってるけど、肝心のベースライン値がどこにも出てこない。明らかにRustコードに対してやったベンチマークはコール単位のものだけだよね。それから「最終結果:1コールあたり2.2〜4.6倍高速、ストリーミング全体のコストは2.6〜3.3倍低下」って言ってるけど、その「2.6〜3.3倍」ってのは彼ら自身の定義によれば「ナイーブなTS実装」との比較だ。これ、Claudeに「適当に速くしてブログ記事にして」って投げただけなんじゃないかな。

7
rented_mule
約8時間前

1997年にバッチ処理コードをC++からPython 1.4に移植したとき、似たようなことがあったよ。バッチ完了が約10倍も速くなったんだ。最初は信じられなくて、ちゃんと処理されてるか確認し始めたくらい。Pythonが本番で使えるか試すために週末だけでやった移植で、C++版は数ヶ月かかってた。移植自体はかなり忠実に関数単位で行ったんだ。数人で丸一日かけて理由を探したら、プロファイリングの結果、キャッシュキーの生成と比較を行うコードにあった未知のバグが移植時に偶然直ってたことが判明した。その関数を見つけてからも、C++側で何が問題だったのか理解するのに相当苦労したよ。バグの詳細は覚えてないけど、その手のバグはPythonでは表現しにくい類のもので、だからこそ偶然直ったんだと思う。その後すぐにバックエンドをPythonに移行し始めたよ。大半は少し遅くなったけど、I/Oバウンドだったから大差なかった。むしろアルゴリズムの改善が爆速でできるようになったから、遅かった部分が以前よりずっと高速になったし、何より開発スピードが劇的に上がったのが一番の収穫だったね。

8
slopinthebag
約8時間前

この記事、明らかにAI生成だよね。読んでて違和感があるし、内容の妥当性もかなり疑わしい。構造化バイナリデータをパースすれば JSON.parse() より大幅に速くなるし、WASMからブラウザに渡すのもJSON文字列よりバイト配列の方が速い。たぶん記事だけじゃなくて、ベンチマークも実装自体もAIにやらせたんじゃないかな。

9
jeremyjh
約8時間前

「openui-langパーサーは、LLMが出力したカスタムDSLをReactコンポーネントツリーに変換する」「内部ASTをReactレンダラーが使う公開OutputNodeフォーマットに変換する」ってあるけど、なんでLLMに直接OutputNode用のJSONを出力させないんだろう?独自の「言語」とパーサーなんてそもそも必要なの?あとデータのマーシャリングにコストがかかるのは周知の事実だから、可能な限り避けるべきだし、避けられないなら大きな塊で一気にやるべきだよね。

10
envguard
約8時間前

WASMの話はセキュリティの観点からも面白い。WASMモジュールがホストのメモリモデルを継承するってことは、Rust側でバッファオーバーリードを起こすようなパースバグがあると、JSとの境界で監査が難しい形で表面化する可能性がある。ネイティブTSに移行すれば、理論上のメモリ安全性は下がるかもしれないけど、少なくとも攻撃対象領域を1つのランタイムに閉じ込めておけるからね。