Haskellのプログラムの実行がGlasgow Haskell Compilerによるコンパイル後にどういう命令によって表現されているかに興味があったので調べてみました. 例えば関数がどのようにメモリ上に存在するかといった実装や, 数字がどうやって表現されているかをgdbを用いて調べてみます. この記事はpartake.inの12月24日分のものです。 Haskellのコンパイル順序 I know kung fu: learning STG by exampleによるとHaskellはGHCの中で次のような流れでコンパイルを進めます. Parse tree Core (Syntax sugarがなくなります) STG (Spineless Tagless G-machine language) C-- backend 下の中から一つ選ばれます LLVM IR (LLVM) Native
![Haskellのコンパイル中に現れるSTGと, GDBで見るC-backendなC-- - suztomoのはてなダイアリー](https://cdn-ak-scissors.b.st-hatena.com/image/square/1b1a3a584ad04956a0bdbaf4ac27ea3057955b24/height=288;version=1;width=512/http%3A%2F%2Fgyazo.com%2F9283e672aa1a8bd995f0e4d60c517558.png)