jhcのコンパイルパイプラインの調査にちょっと疲れたでゲソ。 なんかで遊んでみたいでゲソ! 一番簡単なHaskellコードをjhcコンパイラに書けるとどんなC言語が吐かれるでゲソ? 思い付いたら気になってきたじゃなイカ。
このHaskellコードをC言語へjhcを使って変換するにはイカのコマンドだったでゲソ。
$ jhc -C -o Zen.c Zen.hs
さてさてどんなC言語になったでゲソか…
char jhc_c_compile[] = "gcc /tmp/jhc_E8ju7C/rts/profile.c /tmp/jhc_E8ju7C/rts/rts_support.c /tmp/jhc_E8ju7C/rts/gc_none.c /tmp/jhc_E8ju7C/rts/jhc_rts.c /tmp/jhc_E8ju7C/lib/lib_cbits.c /tmp/jhc_E8ju7C/rts/gc_jgc.c /tmp/jhc_E8ju7C/rts/stableptr.c -I/tmp/jhc_E8ju7C/cbits -I/tmp/jhc_E8ju7C Zen.c -o Zen.c '-std=gnu99' -D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-D_JHC_GC=_JHC_GC_JGC'";
char jhc_command[] = "jhc -C -o Zen.c Zen.hs";
char jhc_version[] = "jhc 0.8.1 (-0)";
#include "jhc_rts_header.h"
void jhc_hs_init(void) ;
void _amain(void) ;
static void b__main(gc_t gc) A_STD;
static void ftheMain(gc_t gc) A_STD;
/* CAFS */
const void * const nh_stuff[] = {
NULL
};
void
jhc_hs_init(void)
{
}
void
_amain(void)
{
return (void)b__main(saved_gc);
}
static void A_STD
b__main(gc_t gc)
{
return ftheMain(gc);
}
static void A_STD
ftheMain(gc_t gc)
{
return;
}
この基本となるC言語コードの形に対して、 様々なHaskellコードが落されることなんでゲソね。 なにか禅の世界を感じたでゲソー。
blog comments powered by