SlideShare a Scribd company logo
Deriving a Uniform
 Compiler and VM
       with
 Low-Level Code
   Generation

                 Jaiyalas
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                            type Compt =                              Compt
Term
                              Int -> Env -> Cont -> Val
                                               VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                        eval :: Term -> Compt                     Term
                            appK :: Cont -> Val -> Val                Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
            evaluator                                                  Term
Val
                  type Compt = [Inst]                                  Val
           Defunctionalizing
            Continuations
                                         eval appK appC                Cont
                    data Inst = Number Int                             Compt
Term                               | Access Int
                                                     VM
Val       eval             appK | Lambda Compt        for
                                           Low-Level Code Generation
Cont
                                   | Push Compt                        Term
                                   | Enter
                                                                       Val
                Currying &         | Leave
       Primitive Recursive Evaluator     eval appK appC                Cont
Term                                                                   Compt
                                         Defunctionalizing
Val       eval           appK          Run-Time Computation

Cont
Term
            evaluator                                                 Term
Val    eval        Source Code                                        Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
  VM Instructions
                                                                      Compt
Term
       appC High-Level Code appK                    VM
Val       eval    appK                               for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val      eval
       eval               appK
                         Source Code                 for
                                          Low-Level Code Generation
Cont                                                                  Term
   VM Instructions                                                    Val
                Currying &
                             eval
       Primitive Recursive Evaluator             appK appC Cont
       appC VM Instructions appK
Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
eval      Source Code

                  VM Instructions
               (Run-Time Computation)

   Level
Environment            appC VM Instructions appK
Continuation
                  VM Instructions
               (Run-Time Computation)
   Level
Environment            appC VM Instructions appK
Continuation
Demo
                               feval3.hs
                           compile exp6
                     run $ compile exp6
run $ compile $ deq $ run $ compile exp6

                              feval42.hs
                           compile exp6
                     run $ compile exp6
         run $ deq $ run $ compile exp6
Non-Uniform
    Compilation
        and
Failure of Low-Level
  Code Generation
eval       Source Code, Level

                  VM Instructions
               (Run-Time Computation)

   Level
Environment            appC VM Instructions appK
Continuation
                  VM Instructions
               (Run-Time Computation)
   Level
Environment            appC VM Instructions appK
Continuation
Term
             evaluator                 Uniform                        Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                            type Compt =                              Compt
Term
                              Int -> Env -> Cont -> Val
                                               VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                        eval :: Term -> Compt                     Term
                            appK :: Cont -> Val -> Val                Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
             evaluator                                                   Term
Val
                                       Non-Uniform                       Val
            Defunctionalizing
             Continuations
                                           eval     appK appC Cont
                                                                         Compt
Term                       type Compt =     VM
Val       eval            appK -> Cont -> Val
                             Env            for
                                             Low-Level Code Generation
Cont                        eval :: Term -> Int ->Compt                  Term
                            appK :: Cont -> Val -> Val                   Val
                Currying &
       Primitive Recursive Evaluator       eval     appK appC Cont

Term                                                                     Compt
                                            Defunctionalizing
Val       eval            appK            Run-Time Computation

Cont
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term   type Compt = [Inst]
             evaluator                                              Term
Val    data Inst = Number Int                                       Val
                | Access Int
            Defunctionalizing         eval appK appC                Cont
              Continuations
                | Lambda Compt
                | Push Compt                                        Compt
Term
                | Enter                L = 0 VM
Val       eval LeaveappK                            for
                |                       Low-Level Code Generation
Cont            | Plus Compt                                        Term
                | QLit Int                                          Val
                Currying &
       Primitive|Recursive Evaluator
                  QVar Int            eval appK appC                Cont
                | PushQAbs Compt Int L > 0
Term            | PushQApp Compt                                    Compt
Val        eval | PushQNextappK        Defunctionalizing
                                     Run-Time Computation
                | PushQPrev
Cont            | PushQAdd Compt
Enter   compiler   Next , 0




PushQNext    compiler   Next , 1
Enter         compiler
                              o r m
                                  Next , 0

                        n if
                n - U
PushQNext
             N o   compiler       Next , 1
eval         Source Code, Level

 L=0      L>0
VM Instructions



appC     appCQ High-Level Code appK      appKQ




High-Level Code
                              /Jainon/nonnifeval3.hs
VM Instructions




    appC            appCQ




    appK            appKQ

Interpretation    Compilation   VM
Demo


                  Jainon/nonnifeval3.hs
                           compile exp6
                     run $ compile exp6
run $ compile $ deq $ run $ compile exp6
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing          eval      appK appC Cont




                                                 ?
             Continuations

                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
compiler       Source Code, Level

 L=0    L>0

VM Instructions

     VM
                        | QLit Int
        L>0             | QVar Int
                        | PushQAbs Compt Int
                        | PushQApp Compt
                        | PushQNext
                        | PushQPrev
                        | PushQAdd Compt
compiler        Source Code, Level

 L=0     L>0

VM Instructions

     VM
           o r m
       n if              | QLit Int
                         | QVar Int
     U   L>0
                         | PushQAbs Compt Int
                         | PushQApp Compt
                         | PushQNext
                         | PushQPrev
                         | PushQAdd Compt
data Inst = Lv0Numer Int
          | Lv0Access Int
          | Lv0Lambda Compt
          | Lv0...
          | Lv1Number Int
          | Lv1Access Int
          | Lv1...
          | ...
          | LvnNumber Int
          | Lvn ...
data Inst = Lv0Numer Int
          | Lv0Access Int
          | Lv0Lambda Compt
          | Lv0...
          | Lv1Number Int
          | Lv1Access Int
          | Lv1...
          | ...
          | LvnNumber Int
          | Lvn ...
Source Code, Level


         compiler


Instructions            VMn



                VM


               Result
Term
             evaluator                                                Term
Val
                                                                      Val
            Defunctionalizing
             Continuations
                                       eval      appK appC Cont
                                                                      Compt
Term
                                                    VM
Val       eval            appK                       for
                                          Low-Level Code Generation
Cont                                                                  Term
                                                                      Val
                Currying &
       Primitive Recursive Evaluator    eval     appK appC Cont

Term                                                                  Compt
                                         Defunctionalizing
Val       eval            appK         Run-Time Computation

Cont
(Next (Next (Add (Lit 2) (Lit 3))))


                 Compiler


[Enter,PushQNext,PushQAdd [QLit 2],QLit 3]


                    VM


Quot [PushQNext,PushQAdd [QLit 2],QLit 3]
(Next (Next (Add (Lit 2) (Lit 3))))


                 Compiler


[Enter,PushQNext,PushQAdd [QLit 2],QLit 3]


                    VM
                             ? ? ?
                     l =
                v e
             e
Quot [PushQNext,PushQAdd [QLit 2],QLit 3]
           L
dmdq   =   demote   +    deq




                    /Jainon/nonnifeval42o.hs
Quot [PushQNext,PushQAdd [QLit 2],QLit 3]


                   dmdq


      [Enter,PushQAdd [QLit 2],QLit 3]


                    VM


      Quot [PushQAdd [QLit 2],QLit 3]
Quot [PushQAdd [QLit 2],QLit 3]


             dmdq


   [Plus [Number 2],Number 3]


              VM


              Val 5
Demo


exp7 = (Next (Next (App
   (Abs (Prev (Prev (Add (Lit 11) (Lit 13)))))
   (Prev (App
       (Abs (Var 0))
       (Next (Add (Lit 1) (Lit 3))))))))
Demo

                     Jainon/nonnifeval42o.hs
                               compile exp7
                          run $ compile exp7
             run $ dmdq $ run $ compile exp7
run $ dmdq $ run $ dmdq $ run $ compile exp7
END

More Related Content

PDF
Apache Big Data Europe 2016
PDF
A Graphical Language for Real-Time Critical Robot Commands
PPSX
Community Tech Days C# 4.0
PPTX
Android Auto instrumentation
PDF
Dev Tools State Of Union
PPTX
Compiler vs Interpreter-Compiler design ppt.
PDF
Tezos Taipei Meetup #2 - 15/06/2019
PDF
Traversing on Algebraic Datatype
Apache Big Data Europe 2016
A Graphical Language for Real-Time Critical Robot Commands
Community Tech Days C# 4.0
Android Auto instrumentation
Dev Tools State Of Union
Compiler vs Interpreter-Compiler design ppt.
Tezos Taipei Meetup #2 - 15/06/2019
Traversing on Algebraic Datatype

More from Yun-Yan Chi (11)

PDF
for "Parallelizing Multiple Group-by Queries using MapReduce"
PDF
Program Language - Fall 2013
PDF
Machine X Language
PDF
Examples for loopless
PDF
Insert 2 Merge
PDF
Any tutor
PDF
Data type a la carte
PDF
Genetic programming
PDF
Paper presentation: The relative distance of key point based iris recognition
PDF
Number System in Haskell
PDF
Constructing List Homomorphisms from Proofs
for "Parallelizing Multiple Group-by Queries using MapReduce"
Program Language - Fall 2013
Machine X Language
Examples for loopless
Insert 2 Merge
Any tutor
Data type a la carte
Genetic programming
Paper presentation: The relative distance of key point based iris recognition
Number System in Haskell
Constructing List Homomorphisms from Proofs
Ad

Deriving a compiler and interpreter for a Multi-level

  • 1. Deriving a Uniform Compiler and VM with Low-Level Code Generation Jaiyalas
  • 2. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 3. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 4. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 5. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 6. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont type Compt = Compt Term Int -> Env -> Cont -> Val VM Val eval appK for Low-Level Code Generation Cont eval :: Term -> Compt Term appK :: Cont -> Val -> Val Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 7. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 8. Term evaluator Term Val type Compt = [Inst] Val Defunctionalizing Continuations eval appK appC Cont data Inst = Number Int Compt Term | Access Int VM Val eval appK | Lambda Compt for Low-Level Code Generation Cont | Push Compt Term | Enter Val Currying & | Leave Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 9. Term evaluator Term Val eval Source Code Val Defunctionalizing Continuations eval appK appC Cont VM Instructions Compt Term appC High-Level Code appK VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 10. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 11. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval eval appK Source Code for Low-Level Code Generation Cont Term VM Instructions Val Currying & eval Primitive Recursive Evaluator appK appC Cont appC VM Instructions appK Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 12. eval Source Code VM Instructions (Run-Time Computation) Level Environment appC VM Instructions appK Continuation VM Instructions (Run-Time Computation) Level Environment appC VM Instructions appK Continuation
  • 13. Demo feval3.hs compile exp6 run $ compile exp6 run $ compile $ deq $ run $ compile exp6 feval42.hs compile exp6 run $ compile exp6 run $ deq $ run $ compile exp6
  • 14. Non-Uniform Compilation and Failure of Low-Level Code Generation
  • 15. eval Source Code, Level VM Instructions (Run-Time Computation) Level Environment appC VM Instructions appK Continuation VM Instructions (Run-Time Computation) Level Environment appC VM Instructions appK Continuation
  • 16. Term evaluator Uniform Term Val Val Defunctionalizing Continuations eval appK appC Cont type Compt = Compt Term Int -> Env -> Cont -> Val VM Val eval appK for Low-Level Code Generation Cont eval :: Term -> Compt Term appK :: Cont -> Val -> Val Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 17. Term evaluator Term Val Non-Uniform Val Defunctionalizing Continuations eval appK appC Cont Compt Term type Compt = VM Val eval appK -> Cont -> Val Env for Low-Level Code Generation Cont eval :: Term -> Int ->Compt Term appK :: Cont -> Val -> Val Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 18. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 19. Term type Compt = [Inst] evaluator Term Val data Inst = Number Int Val | Access Int Defunctionalizing eval appK appC Cont Continuations | Lambda Compt | Push Compt Compt Term | Enter L = 0 VM Val eval LeaveappK for | Low-Level Code Generation Cont | Plus Compt Term | QLit Int Val Currying & Primitive|Recursive Evaluator QVar Int eval appK appC Cont | PushQAbs Compt Int L > 0 Term | PushQApp Compt Compt Val eval | PushQNextappK Defunctionalizing Run-Time Computation | PushQPrev Cont | PushQAdd Compt
  • 20. Enter compiler Next , 0 PushQNext compiler Next , 1
  • 21. Enter compiler o r m Next , 0 n if n - U PushQNext N o compiler Next , 1
  • 22. eval Source Code, Level L=0 L>0 VM Instructions appC appCQ High-Level Code appK appKQ High-Level Code /Jainon/nonnifeval3.hs
  • 23. VM Instructions appC appCQ appK appKQ Interpretation Compilation VM
  • 24. Demo Jainon/nonnifeval3.hs compile exp6 run $ compile exp6 run $ compile $ deq $ run $ compile exp6
  • 25. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 26. Term evaluator Term Val Val Defunctionalizing eval appK appC Cont ? Continuations Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 27. compiler Source Code, Level L=0 L>0 VM Instructions VM | QLit Int L>0 | QVar Int | PushQAbs Compt Int | PushQApp Compt | PushQNext | PushQPrev | PushQAdd Compt
  • 28. compiler Source Code, Level L=0 L>0 VM Instructions VM o r m n if | QLit Int | QVar Int U L>0 | PushQAbs Compt Int | PushQApp Compt | PushQNext | PushQPrev | PushQAdd Compt
  • 29. data Inst = Lv0Numer Int | Lv0Access Int | Lv0Lambda Compt | Lv0... | Lv1Number Int | Lv1Access Int | Lv1... | ... | LvnNumber Int | Lvn ...
  • 30. data Inst = Lv0Numer Int | Lv0Access Int | Lv0Lambda Compt | Lv0... | Lv1Number Int | Lv1Access Int | Lv1... | ... | LvnNumber Int | Lvn ...
  • 31. Source Code, Level compiler Instructions VMn VM Result
  • 32. Term evaluator Term Val Val Defunctionalizing Continuations eval appK appC Cont Compt Term VM Val eval appK for Low-Level Code Generation Cont Term Val Currying & Primitive Recursive Evaluator eval appK appC Cont Term Compt Defunctionalizing Val eval appK Run-Time Computation Cont
  • 33. (Next (Next (Add (Lit 2) (Lit 3)))) Compiler [Enter,PushQNext,PushQAdd [QLit 2],QLit 3] VM Quot [PushQNext,PushQAdd [QLit 2],QLit 3]
  • 34. (Next (Next (Add (Lit 2) (Lit 3)))) Compiler [Enter,PushQNext,PushQAdd [QLit 2],QLit 3] VM ? ? ? l = v e e Quot [PushQNext,PushQAdd [QLit 2],QLit 3] L
  • 35. dmdq = demote + deq /Jainon/nonnifeval42o.hs
  • 36. Quot [PushQNext,PushQAdd [QLit 2],QLit 3] dmdq [Enter,PushQAdd [QLit 2],QLit 3] VM Quot [PushQAdd [QLit 2],QLit 3]
  • 37. Quot [PushQAdd [QLit 2],QLit 3] dmdq [Plus [Number 2],Number 3] VM Val 5
  • 38. Demo exp7 = (Next (Next (App (Abs (Prev (Prev (Add (Lit 11) (Lit 13))))) (Prev (App (Abs (Var 0)) (Next (Add (Lit 1) (Lit 3))))))))
  • 39. Demo Jainon/nonnifeval42o.hs compile exp7 run $ compile exp7 run $ dmdq $ run $ compile exp7 run $ dmdq $ run $ dmdq $ run $ compile exp7
  • 40. END