これは実際には Haskell に関する質問ではありませんが、Haskell タグをフォローしていて、これに対する答えを知っている人がたくさんいると思います...
私は現在、関数の入力と出力、およびローカル変数と一時的な値をすべて同じスタックに保持しながら、終了時に正しいスタック レイアウトになる方法について頭を悩ませようとしています。
通常、スタックは、最上位のスタック項目のみを変更するプッシュおよびプル操作を提供します。スタックのさらに下にあるアイテムへのランダム読み取りアクセスが許可されることもあります。(これは、そこに変数を保持し、それらにランダムアクセスする方法を説明しています。) しかし、通常、スタックのサイズを変更する唯一の方法は、そこから項目をプルすることです。スタックの一番上にアイテムを保持し、その下のものを削除したい場合、これはあまり良くありません。
実際のコンパイラはどのようにこれを行うのですか?