トップ «前の日記(2005-11-10) 最新 次の日記(2005-11-12)» 月表示 編集

日々の流転


2005-11-11 [長年日記]

λ. 人狼審問 : (950)湿地の村

今回は確定霊能者で初回襲撃されてずっと墓下だったけど、 ようやくエピローグで皆と再会。 全然活躍できなかったけど、久しぶりの勝利なので一応嬉しい。

関連リンク

Tags: 人狼

λ. 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
Tags: haskell