2005-11-11 [長年日記]
λ. 人狼審問 : (950)湿地の村
今回は確定霊能者で初回襲撃されてずっと墓下だったけど、 ようやくエピローグで皆と再会。 全然活躍できなかったけど、久しぶりの勝利なので一応嬉しい。
関連リンク
- B1/950村 - 人狼ファンWiki
- 他の人の感想
λ. yhc - York Haskell Compiler
[Haskell] [ANNOUNCE] yhc - York Haskell Compiler , Thomas Davie より。
nhc98をベースにしたhaskellコンパイラ。
「λ」を上下反転した「y」がカッコいい。

試しに適当なコードをコンパイルしてみる。
% cat Fact.hs
module Fact where
fact :: Int -> Int
fact 0 = 1
fact n = n * fact (n-1)
main :: IO ()
main = putStrLn $ show $ fact 10
% yhc -bcodecompile Fact.hs
====== BCode after compilation:
FUN Fact;fact{188}(1/0) ["v215"]
STACK 2
{
PUSH_ARG 0 1 <["215"] | {"215"}>
EVAL 1 <[] | {}>
INT_CASE {0 -> L_2, _ -> L_4} 1 <[] | {}>
L_2 1 <[] | {}>
POP 1 0 <[] | {}>
PUSH_INT 1 1 <[] | {}>
JUMP L_3 1 <[] | {}>
L_4 1 <[] | {}>
POP 1 0 <[] | {}>
JUMP L_0 0 <[] | {}>
L_3 1 <[] | {}>
JUMP L_1 0 <[] | {}>
L_0 0 <[] | {}>
PUSH_INT 1 1 <[] | {}>
PUSH_ARG 0 2 <["215"] | {"215"}>
MK_AP 0 2 1 <[] | {}>
MK_AP 1 1 1 <[] | {}>
EVAL 1 <[] | {}>
PUSH_ARG 0 2 <["215"] | {"215"}>
EVAL 2 <[] | {}>
MUL_W 1 <[] | {}>
L_1 1 <[] | {}>
RETURN 1 <[] | {}>
}
---- ConstTable ---------------
0 FUN Prelude;Prelude.Num.Prelude.Int.-{213}
1 FUN Fact;fact{188}
-------------------------------
FUN Fact;main{189}(0/0) []
STACK 2
{
PUSH_INT 10 1 <[] | {}>
MK_AP 0 1 1 <[] | {}>
PUSH_CONST 1 2 <[] | {}>
MK_AP 2 2 1 <[] | {}>
PUSH_CONST 3 2 <[] | {}>
MK_AP 2 2 1 <[] | {}>
EVAL 1 <[] | {}>
RETURN 1 <[] | {}>
}
---- ConstTable ---------------
0 FUN Fact;fact{188}
1 FUN0 Prelude;Prelude.Show.Prelude.Int.show{214}
2 FUN Prelude;${43}
3 FUN0 Prelude;putStrLn{45}
-------------------------------
【2006-04-28追記】 Unicodeの文字はまだ扱えないようだ。hbcファイルのフォーマットがUnicodeの文字を扱えるようになっていない。
% cat UnicodeTest.hs
main = print ('\x10ffff')
$ yhc UnicodeTest.hs
Compiling Main ( UnicodeTest.hs )
yhc.exe: wUByte of 1114111
[ツッコミを入れる]
