jhc禅

Posted on February 19, 2013 / Tags: haskell, compiler, jhc

Table of contents


jhcのコンパイルパイプラインの調査にちょっと疲れたでゲソ。 なんかで遊んでみたいでゲソ! 一番簡単なHaskellコードをjhcコンパイラに書けるとどんなC言語が吐かれるでゲソ? 思い付いたら気になってきたじゃなイカ。

-- Zen.hs
main :: IO ()
main = return ()

この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 Disqus