Metaprogramming These slides borrow heavily from Ben Woods - - PowerPoint PPT Presentation

metaprogramming
SMART_READER_LITE
LIVE PREVIEW

Metaprogramming These slides borrow heavily from Ben Woods - - PowerPoint PPT Presentation

Metaprogramming These slides borrow heavily from Ben Woods Fall 15 slides. CS251 Programming Languages Spring 2016, Lyn Turbak Department of Computer


slide-1
SLIDE 1

Metaprogramming ¡

CS251 ¡Programming ¡Languages ¡

Spring ¡2016, ¡Lyn ¡Turbak ¡

¡

Department ¡of ¡Computer ¡Science ¡ Wellesley ¡College ¡

These ¡slides ¡borrow ¡heavily ¡from ¡Ben ¡Wood’s ¡Fall ¡‘15 ¡slides. ¡

slide-2
SLIDE 2

Lisp/Racket ¡and ¡ImplementaCon ¡(2) ¡

InterpretaDon, ¡TranslaDon, ¡and ¡everything ¡in ¡between ¡ Programs ¡as ¡Data ¡ If ¡Dme: ¡ImplemenDng ¡Racket ¡in ¡Racket ¡ ¡ ¡ ¡ ¡-­‑ ¡hands-­‑on ¡ ¡ ¡ ¡ ¡-­‑ ¡how ¡Lisp ¡was ¡first ¡implemented ¡ ¡

slide-3
SLIDE 3

How ¡to ¡implement ¡a ¡programming ¡language ¡

InterpretaCon ¡

An ¡interpreter ¡wriNen ¡in ¡the ¡implementaCon ¡language ¡reads ¡ a ¡program ¡wriNen ¡in ¡the ¡source ¡language ¡and ¡evaluates ¡it. ¡

TranslaCon ¡(a.k.a. ¡compilaCon) ¡

An ¡translator ¡(a.k.a. ¡compiler) ¡wriNen ¡in ¡the ¡implementaCon ¡ language ¡reads ¡a ¡program ¡wriNen ¡in ¡the ¡source ¡language ¡and ¡ translates ¡it ¡to ¡an ¡equivalent ¡program ¡in ¡the ¡target ¡language. ¡ ¡

But ¡now ¡we ¡need ¡implementaCons ¡of: ¡ ¡implementaCon ¡language ¡ ¡target ¡language ¡

3

slide-4
SLIDE 4

How ¡to ¡implement ¡a ¡programming ¡language ¡

Interpreter ¡Rule ¡ P-­‑in-­‑L ¡program ¡L ¡interpreter ¡machine ¡ P ¡machine ¡ Translator ¡Rule ¡ P-­‑in-­‑S ¡program ¡S-­‑to-­‑T ¡translator ¡machine ¡ P-­‑in-­‑T ¡program ¡

¡

4

Can ¡describe ¡by ¡deriving ¡a ¡“proof” ¡of ¡the ¡implementaDon ¡ ¡ using ¡these ¡inference ¡rules: ¡

slide-5
SLIDE 5

ImplementaCon ¡DerivaCon ¡Example ¡

¡ Prove ¡how ¡to ¡implement ¡a ¡"251 ¡web ¡page ¡machine" ¡using: ¡

  • 251-­‑web-­‑page-­‑in-­‑HTML ¡program ¡(a ¡web ¡page ¡wriNen ¡in ¡HTML) ¡
  • HTML-­‑interpreter-­‑in-­‑C ¡program ¡(a ¡web ¡browser ¡wriNen ¡in ¡C) ¡
  • C-­‑to-­‑x86-­‑translator-­‑in-­‑x86 ¡program ¡(a ¡C ¡compiler ¡wriNen ¡in ¡x86) ¡
  • x86 ¡interpreter ¡machine ¡(an ¡x86 ¡computer) ¡

¡

No ¡peaking ¡ahead! ¡

5

slide-6
SLIDE 6

ImplementaCon ¡DerivaCon ¡Example ¡SoluCon ¡

6

We ¡can ¡omit ¡“program” ¡and ¡“machine”: ¡ ¡

slide-7
SLIDE 7

ImplementaCon ¡DerivaCon ¡Are ¡Trees ¡

7

And ¡so ¡we ¡can ¡represent ¡them ¡as ¡nested ¡structures, ¡like ¡nested ¡bulleted ¡lists: ¡ ¡

slide-8
SLIDE 8

Metacircularity ¡and ¡Bootstrapping ¡

Many ¡examples: ¡

  • Lisp ¡in ¡Lisp ¡/ ¡Racket ¡in ¡Racket: ¡eval ¡
  • Python ¡in ¡Python: ¡PyPy ¡
  • Java ¡in ¡Java: ¡Jikes ¡RVM, ¡Maxine ¡VM ¡
  • … ¡
  • C-­‑to-­‑x86 ¡compiler ¡in ¡C ¡

How ¡can ¡this ¡be ¡possible? ¡ ¡

¡

Key ¡insights ¡to ¡bootstrapping: ¡ ¡

  • The ¡first ¡implementaDon ¡of ¡a ¡language ¡cannot ¡be ¡in ¡

itself, ¡but ¡must ¡be ¡in ¡some ¡other ¡language. ¡

  • Once ¡you ¡have ¡one ¡implementaDon ¡of ¡a ¡language, ¡you ¡

can ¡implement ¡it ¡in ¡itself. ¡ ¡

8

slide-9
SLIDE 9

Metacircularity ¡Example ¡1 ¡

Suppose ¡you ¡are ¡given: ¡ ¡

  • Racket-­‑in-­‑SML ¡interpreter ¡
  • SML ¡machine ¡
  • Racket-­‑in-­‑Racket ¡interpreter ¡

How ¡do ¡you ¡run ¡the ¡Racket-­‑in-­‑Racket ¡interpreter? ¡

9

slide-10
SLIDE 10

Metacircularity ¡Example ¡2 ¡

Suppose ¡you ¡are ¡given: ¡ ¡

  • C-­‑to-­‑x86-­‑translator-­‑in-­‑x86 ¡program ¡(a ¡C ¡compiler ¡wriNen ¡in ¡x86) ¡
  • x86 ¡interpreter ¡machine ¡(an ¡x86 ¡computer) ¡
  • C-­‑to-­‑x86-­‑translator-­‑in-­‑C ¡ ¡

How ¡do ¡you ¡compile ¡the ¡C-­‑to-­‑x86-­‑translator-­‑in-­‑C ¡? ¡ ¡

10

slide-11
SLIDE 11

11

¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ if (x == 0) { x = x + 1; } ... cmp (1000), $0 bne L add (1000), $1 L: ...

C Source Program C Compiler x86 Target Program

Compiler ¡

x86 Target Program x86 computer

Data Output

slide-12
SLIDE 12

12

Typical ¡Compiler ¡

Source Program Lexical Analyzer Syntax Analyzer Semantic Analyzer Intermediate Code Generator Code Optimizer Code Generator Target Program

Analysis ¡ ¡ Synthesis ¡

slide-13
SLIDE 13

13

Interpreters ¡

Data Output

Source Program

Interpreter = virtual machine

slide-14
SLIDE 14

Interpreters ¡vs ¡Compilers ¡

Interpreters ¡

No ¡work ¡ahead ¡of ¡Dme ¡ Incremental ¡ maybe ¡inefficient ¡ ¡

Compilers ¡

All ¡work ¡ahead ¡of ¡Dme ¡ See ¡whole ¡program ¡(or ¡more ¡of ¡program) ¡ Time ¡and ¡resources ¡for ¡analysis ¡and ¡opDmizaDon ¡ ¡

14

slide-15
SLIDE 15

15

Compilers... ¡whose ¡output ¡is ¡interpreted ¡

Target Program Java Virtual Machine

Data Output

Source Program Java Compiler Target Program

Doesn’t ¡this ¡look ¡familiar? ¡

slide-16
SLIDE 16

16

Java ¡Compiler ¡

if (x == 0) { x = x + 1; } ... load 0 ifne L load 0 inc store 0 L: ...

Source Program Java Compiler Target Program

(compare compiled C to compiled Java)

slide-17
SLIDE 17

17

Interpreters... ¡that ¡use ¡compilers. ¡

Target Program Virtual Machine

Data Output

Source Program Compiler

slide-18
SLIDE 18

18

JIT ¡Compilers ¡and ¡OpCmizaCon ¡

Target Program Virtual Machine

Data Output

Just In Time Compiler

Performance ¡ Monitor ¡

Source Program Compiler

  • HotSpot ¡JVM ¡
  • Jikes ¡RVM ¡
  • SpiderMonkey ¡
  • v8 ¡
  • Transmeta ¡
  • ... ¡
slide-19
SLIDE 19

Virtual ¡Machine ¡Model ¡

19 ¡

High-­‑Level ¡Language ¡Program ¡ ¡ Virtual ¡Machine ¡Language ¡ Bytecode ¡ compiler ¡ Virtual ¡machine ¡ (interpreter) ¡ JIT ¡ compiler ¡ run ¡Cme ¡ compile ¡Cme ¡ Ahead-­‑of-­‑Dme ¡ compiler ¡ NaDve ¡Machine ¡Language ¡

slide-20
SLIDE 20

Remember: ¡language ¡!= ¡implementaCon ¡

  • Easy ¡to ¡confuse ¡"the ¡way ¡this ¡language ¡is ¡usually ¡

implemented" ¡or ¡"the ¡implementaDon ¡I ¡use" ¡with ¡"the ¡ language ¡itself.” ¡ ¡

  • Java ¡and ¡Racket ¡can ¡be ¡compiled ¡to ¡x86 ¡
  • C ¡can ¡be ¡interpreted ¡in ¡Racket ¡
  • x86 ¡can ¡be ¡compiled ¡to ¡JavaScript ¡
  • Can ¡we ¡compile ¡C/C++ ¡to ¡Javascript? ¡

hNp://kripken.github.io/emscripten-­‑site/ ¡

20

slide-21
SLIDE 21

Next ¡Topic: ¡Metaprogramming ¡in ¡SML ¡

  • PostFix ¡in ¡SML ¡(see ¡postfix.sml) ¡
  • A ¡sequences ¡of ¡expression ¡languages ¡implemented ¡in ¡

SML ¡that ¡look ¡closer ¡and ¡closer ¡to ¡Racket: ¡

  • Intex ¡
  • Bindex ¡
  • Valex ¡
  • HOFL ¡(higher-­‑order ¡funcDonal ¡langauge) ¡

21