概要
このガイドでは、標準的なコンパイラーのフロントエンド工程が用いられます。
ソースコード --> 字句解析 --> トークン --> 構文解析 --> 抽象構文木 (AST)
JavaScript のパーサーを書くことは難しくありません。 アーキテクチャー上の意思決定が 10%、きめ細かい詳細におけるハードワークが 90%です。
アーキテクチャー上の意思決定は主に 2 つのカテゴリーへ影響します。
- パーサーのパフォーマンス
- AST を扱うのがどれくらい素晴らしいものか
Rust でパーサーを作る前にすべての選択肢とトレードオフについて知っておくことで、私たちの旅はより快適なものになるでしょう。
パフォーマンス
高いパフォーマンスの Rust プログラムへの鍵は、メモリーの割り当てを減らすこと と CPU サイクルを減らすこと にあります。
Vec
、Box
、String
のようなヒープに割り当てられたオブジェクトを探すだけでメモリーの割り当てがほとんど透過的に行われます。
それらの使用量を推し量ることにより、プログラムがどれほどの速さか分かります。割り当てが増えるにつれて、プログラムは遅くなるでしょう。
Rust のゼロコスト抽象化のおかげで、抽象化によってパフォーマンスの低下が起こることをあまり心配する必要はありません。 アルゴリズムの複雑性に注意すれば問題はないでしょう。
The Rust Performance Bookも読むと良いでしょう。
Rust のソースコード
関数呼び出しのパフォーマン スについて推し量ることができない時はいつでも、Rust のドキュメントの"ソース"ボタンを恐れることなくクリックしてソースコードを読んでみると、ほとんど場合簡単に理解できるでしょう。
Rust のソースコードを読むとき、シンプルにfn function_name
、struct struct_name
、enum enum_name
といったものの定義箇所を探します。
これは一貫した文法を持つ Rust(JavaScript と比べて 😉)における利点の 1 つです。