関数型LT大会の LT です http://connpass.com/event/5795/
Haskell Ͱͭ͘Δ VMʙࢄΓΏ͘ Endomorphisʙtaiki45
View Slide
ϓϩάϥϛϯάྺ2ͷ
ϖϧγΞޠ͠ΌΔ
͓͔͞ͳ
ε( ε^o^)э
hs-vmSimple Virtual Machine written in Haskell.!https://github.com/taiki45/hs-vm
Why VM
ܭࢉػͷιϑτΣΞ࣮
Register MachinevsStack Machine
hs-vm has no StateT
Endomorphism
EndomorphismA࢝ҬͱऴҬ͕ಉ͡ܥͰ͋ΔΑ͏ͳ४ಉܕࣸ૾
EndomorphismA࢝ҬͱऴҬ͕ಉ͡ू߹Ͱ͋ΔΑ͏ͳؔ
VM ͱ໋ྩV͋ΔVMΛߟ͑ΔͦͷVM͕ͱΔঢ়ଶͷू߹Λ V ͱ͢Δ[1,2][3][3,4,5]
VM ͱ໋ྩV[3,4][1,2,4]Add
VM ͱ໋ྩVM ͷ໋ྩ Endomorphism ͱߟ͑ΒΕΔV
໋ྩͷ߹
Monoid (M, ŋ)m ŋ i = m = i ŋ mm ŋ (m ŋ m) = (m ŋ m) ŋ m
ਖ਼ͷ (N, ×)3 × 1 = 3 = 3 × 13 × (4 × 5) = (3 × 4) × 5
Ϧετ (L, ++)[1, 2] ++ [] = [1, 2] = [] ++ [1, 2][1] ++ ([2] ++ [3]) = ([1] ++ [2]) ++ [3]
Endomorphism as MonoidAidfgf . id = f = id . f(h . g) . f = h . (g . f)h
VM ͱ໋ྩVf f: VM → VMf: ॳظঢ়ଶ → ऴྃঢ়ଶ
VM ͷ࣮ߦͱ
ͻͱͭͷࣸ૾Λ୳͢͜ͱͩͬͨΜͩʂ
͋Γ͠ͷ VM ͷ࣮ߦDual ରEndo ͷରͦͷ߹ॱং͕ٯ144c3a3dbdb
݅δϟϯϓ
ݱࡏͷ VM ࣮ߦVEndo Λॱ࣍ద༻͍ͯ͘͠ελΠϧ࣍ʹద༻͢Δࣸ૾Λ program counter Λͱʹ୳͢
ֶͼ• ػցޠ(ΞηϯϒϦݴޠ)ͱͷରԠ• call convention