akasaka_34の日記

ネトウヨと呼ばれた男の日記。しかし頻度から言えば週報ぐらい。

遅延評価によるコンパイラの1パス化

Haskellの構文解析 - ヴィアシュビニッヒ!?を考えていたとき
「Haskellで実装されたコンパイラというのは設計上何パスであろうとも
遅延評価のおかげで常に実質1パスになる」
と思っていたのだけど
よく考えてみれば、そんなに甘くない。

たとえば字句解析の戻り値がMaybeで

  • 成功すれば、Just [Token]
  • 失敗すれば、Nothing

を返す場合
最初のTokenが取得される前に、処理系は全体の字句解析を済ませて
戻り値がNothingでないことを確認しなければならない。

そうすると、ソースサイズに比例してメモリを消費するし
並列性も低くなる。