$30 off During Our Annual Pro Sale. View Details »

Haskell でつくる VM 〜散りゆく Endomorphism〜

Haskell でつくる VM 〜散りゆく Endomorphism〜

関数型LT大会の LT です http://connpass.com/event/5795/

taiki45

May 11, 2014
Tweet

More Decks by taiki45

Other Decks in Programming

Transcript

  1. Haskell Ͱͭ͘Δ VM
    ʙࢄΓΏ͘ Endomorphisʙ
    taiki45

    View Slide

  2. ϓϩάϥϛϯάྺ2೥൒ͷ

    View Slide

  3. ϖϧγΞޠ͠Ό΂Δ

    View Slide

  4. ͓͔͞ͳ

    View Slide

  5. ε( ε^o^)э

    View Slide

  6. hs-vm
    Simple Virtual Machine written in Haskell.
    !
    https://github.com/taiki45/hs-vm

    View Slide

  7. Why VM

    View Slide

  8. ܭࢉػͷ
    ιϑτ΢ΣΞ࣮૷

    View Slide

  9. Register Machine
    vs
    Stack Machine

    View Slide

  10. hs-vm has no StateT

    View Slide

  11. Endomorphism

    View Slide

  12. Endomorphism
    A
    ࢝ҬͱऴҬ͕ಉ͡୅਺ܥͰ͋ΔΑ͏ͳ४ಉܕࣸ૾

    View Slide

  13. Endomorphism
    A
    ࢝ҬͱऴҬ͕ಉ͡ू߹Ͱ͋ΔΑ͏ͳؔ਺

    View Slide

  14. VM ͱ໋ྩ
    V
    ͋ΔVMΛߟ͑Δ
    ͦͷVM͕ͱΔঢ়ଶͷू߹Λ V ͱ͢Δ
    [1,2]
    [3]
    [3,4,5]

    View Slide

  15. VM ͱ໋ྩ
    V
    [3,4]
    [1,2,4]
    Add

    View Slide

  16. VM ͱ໋ྩ
    VM ͷ໋ྩ͸ Endomorphism ͱߟ͑ΒΕΔ
    V

    View Slide

  17. ໋ྩͷ߹੒

    View Slide

  18. Monoid (M, ŋ)
    m ŋ i = m = i ŋ m
    m ŋ (m ŋ m) = (m ŋ m) ŋ m

    View Slide

  19. ਖ਼ͷ੔਺ (N, ×)
    3 × 1 = 3 = 3 × 1
    3 × (4 × 5) = (3 × 4) × 5

    View Slide

  20. Ϧετ (L, ++)
    [1, 2] ++ [] = [1, 2] = [] ++ [1, 2]
    [1] ++ ([2] ++ [3]) = ([1] ++ [2]) ++ [3]

    View Slide

  21. Endomorphism as Monoid
    A
    id
    f
    g
    f . id = f = id . f
    (h . g) . f = h . (g . f)
    h

    View Slide

  22. VM ͱ໋ྩ
    V
    f f: VM → VM
    f: ॳظঢ়ଶ → ऴྃঢ়ଶ

    View Slide

  23. VM ͷ࣮ߦͱ͸

    View Slide

  24. ͻͱͭͷࣸ૾Λ
    ୳͢͜ͱͩͬͨΜͩʂ

    View Slide

  25. ͋Γ͠೔ͷ VM ͷ࣮ߦ
    Dual ͸૒ର
    Endo ͷ૒ର͸ͦͷ߹੒ॱং͕ٯ
    144c3a3dbdb

    View Slide

  26. ৚݅δϟϯϓ

    View Slide

  27. ݱࡏͷ VM ࣮ߦ
    V
    Endo Λॱ࣍ద༻͍ͯ͘͠ελΠϧ
    ࣍ʹద༻͢Δࣸ૾Λ program counter Λ΋ͱʹ୳͢

    View Slide

  28. ֶͼ
    • ػցޠ(ΞηϯϒϦݴޠ)ͱͷରԠ
    • call convention

    View Slide