Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

ϖϧγΞޠ͠Ό΂Δ

Slide 4

Slide 4 text

͓͔͞ͳ

Slide 5

Slide 5 text

ε( ε^o^)э

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Why VM

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Register Machine vs Stack Machine

Slide 10

Slide 10 text

hs-vm has no StateT

Slide 11

Slide 11 text

Endomorphism

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

໋ྩͷ߹੒

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

VM ͷ࣮ߦͱ͸

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

৚݅δϟϯϓ

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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