メインコンテンツまでスキップ

概要

このガイドでは、標準的なコンパイラーのフロントエンド工程が用いられます。

ソースコード --> 字句解析 --> トークン --> 構文解析 --> 抽象構文木 (AST)

JavaScript のパーサーを書くことは難しくありません。 アーキテクチャー上の意思決定が 10%、きめ細かい詳細におけるハードワークが 90%です。

アーキテクチャー上の意思決定は主に 2 つのカテゴリーへ影響します。

  • パーサーのパフォーマンス
  • AST を扱うのがどれくらい素晴らしいものか

Rust でパーサーを作る前にすべての選択肢とトレードオフについて知っておくことで、私たちの旅はより快適なものになるでしょう。

パフォーマンス

高いパフォーマンスの Rust プログラムへの鍵は、メモリーの割り当てを減らすことCPU サイクルを減らすこと にあります。

VecBoxStringのようなヒープに割り当てられたオブジェクトを探すだけでメモリーの割り当てがほとんど透過的に行われます。 それらの使用量を推し量ることにより、プログラムがどれほどの速さか分かります。割り当てが増えるにつれて、プログラムは遅くなるでしょう。

Rust のゼロコスト抽象化のおかげで、抽象化によってパフォーマンスの低下が起こることをあまり心配する必要はありません。 アルゴリズムの複雑性に注意すれば問題はないでしょう。

備考

The Rust Performance Bookも読むと良いでしょう。

Rust のソースコード

関数呼び出しのパフォーマンスについて推し量ることができない時はいつでも、Rust のドキュメントの"ソース"ボタンを恐れることなくクリックしてソースコードを読んでみると、ほとんど場合簡単に理解できるでしょう。

備考

Rust のソースコードを読むとき、シンプルにfn function_namestruct struct_nameenum enum_nameといったものの定義箇所を探します。 これは一貫した文法を持つ Rust(JavaScript と比べて 😉)における利点の 1 つです。