Slide 1

Slide 1 text

Challenge the future 1 `Programming Languages shape Computational Thinking’ Intreerede prof. dr. Eelco Visser Hoogleraar Programming Languages 17 Januari 2014

Slide 2

Slide 2 text

repeat n times variation-of(same-argument) for(p in important-people) thank-you(p) for(p in audience) individual-quiz(p) def same-argument = “Programming Languages shape Computational Thinking” This Lecture

Slide 3

Slide 3 text

Automatisering beperkt wachttijd rijexamen Kosten automatisering overheid stijgen snel Artsen bekijken nut computer Automatisering landbouw teveel zaak van koplopers De PC, een algemeen gebruikt, maar toch ingewikkeld gereedschap Grote behoefte aan personeel automatisering Ondernemingsraden  in  banksector  willen   automatisering  onder  controle  krijgen Automatisering politie is verkapte bezuiniging Vrouw en computer Werknemers onvoldoende bij automatisering betrokken Automatisering  mislukt  bij  helft  bedrijven Mensen zijn geen verlengstuk van de computer Source: http://kranten.kb.nl

Slide 4

Slide 4 text

Software systems are the engines of modern information society

Slide 5

Slide 5 text

Software systems are for people

Slide 6

Slide 6 text

Software should ‘just work’ easy to use safe cheap (free!) responsive scale reliable don’t lose data keep data private help catch terrorists

Slide 7

Slide 7 text

Software is encoded computational thinking software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret

Slide 8

Slide 8 text

Software engineers are the architects and mechanics of modern information society computer user software engineer software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret

Slide 9

Slide 9 text

Software engineering provides the tools that let software engineers do a good job design patterns best practices coding standards code reviews pair programming (unit) testing debugging computer user software engineer software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret

Slide 10

Slide 10 text

Programming languages are the key tools in the encoding process computer user software engineer software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret programming language _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret

Slide 11

Slide 11 text

Programming languages are software systems too computer user software engineer software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret programming language _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret compiler interpreter type checker editor (IDE) refactorings bug finders

Slide 12

Slide 12 text

Programming languages should ‘just work’ computer user software engineer software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret programming language _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret easy to use safe cheap (free!) responsive scale reliable

Slide 13

Slide 13 text

Language designers create programming languages computer user software engineer language designer software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret programming language _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret

Slide 14

Slide 14 text

computer user software engineer language designer software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret programming language _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret Language engineering provides the tools that let language designers do a good job

Slide 15

Slide 15 text

computer user software engineer language designer software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret programming language meta- language Meta-languages support the encoding of language designs language engineer

Slide 16

Slide 16 text

computer user software engineer language designer software _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret programming language Language engineers eat their own dogfood language engineer meta- language

Slide 17

Slide 17 text

Software is encoded computational thinking _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret

Slide 18

Slide 18 text

Alan Turing 1912 - 1954 Software is encoded computational thinking modeling mechanical computation _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret

Slide 19

Slide 19 text

$ 0 1 0 0 $ 1 1 0 0 $ 0 0 0 0 $ 1 0 1 0 $ 0 1 $ 0 1 1 2 2 2 3 3 $ 0 1 $ 0 1 R R L R L L 2 2 3 H 3 3 $ 3 $ R 4 Alan Turing 1936 Turing Machine current state current symbol new symbol move tape next state 2 3 state tape current Church-Turing Thesis: Any effective computation can be expressed with a Turing Machine

Slide 20

Slide 20 text

$ 0 1 0 0 $ 1 1 0 0 0 1 $ 1 0 4 4 4 5 5 1 0 $ 0 1 R R L L L 4 4 5 5 0 1 $ 0 1 $ 6 6 6 7 7 7 0 1 $ 1 0 $ L L R R R R 6 6 7 7 7 8 subtract one 6 $ 0 0 0 0 $ 1 0 1 0 $ 0 1 $ 0 1 1 2 2 2 3 3 $ 0 1 $ 0 1 R R L R L L 2 2 3 H 3 3 $ 3 $ R 4 is zero? 0 1 $ 1 0 8 8 8 9 9 0 1 $ 0 1 R R L L L 8 8 9 9 10 add one 0 10 0 L 10 1 10 1 L 10 $ 10 $ L 11 0 11 0 L 11 1 11 1 L 11 $ 12 $ R 2 back repeat Add two binary numbers 1 H Alan Turing 1936 Turing Machine Church-Turing Thesis: Any effective computation can be expressed with a Turing Machine

Slide 21

Slide 21 text

Alan Turing 1936 Universal Turing Machine $ program S data Universal Program (Turing Machine Interpreter) Halting problem: given a Turing Machine program P, does P halt for any input data? Undecidable!

Slide 22

Slide 22 text

Von Neumann Simple Instructions add, subtract fetch, store … data bus program memory CPU registers control unit ALU world Alan Turing

Slide 23

Slide 23 text

Example: a procedure for computing Fibonacci numbers n n-th fibonacci 0 1 1 1 2 2 = 1 + 1 3 3 = 1 + 2 4 5 = 2 + 3 5 8 = 3 + 5 6 13 = 5 + 8 7 21 = 8 + 13 8 34 = 13 + 21

Slide 24

Slide 24 text

Example: a procedure for computing Fibonacci numbers n n-th fibonacci 0 1 1 1 2 2 = 1 + 1 3 3 = 1 + 2 4 5 = 2 + 3 5 8 = 3 + 5 6 13 = 5 + 8 7 21 = 8 + 13 8 34 = 13 + 21

Slide 25

Slide 25 text

by calling _fib _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret compute n-th fibonacci number compute (n-2)-nd fibonacci number compute (n-1)-th fibonacci number add the results return to caller n n-th fibonacci 0 1 1 1 2 2 = 1 + 1 3 3 = 1 + 2 4 5 = 2 + 3 5 8 = 3 + 5 6 13 = 5 + 8 7 21 = 8 + 13 8 34 = 13 + 21 by calling _fib if n less or equal to 1 result is 1

Slide 26

Slide 26 text

_fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret call procedure procedure call pass argument(s) get return value procedure entry set up stack frame unwind stack return to caller return value get argument(s) procedure definition call procedure procedure call pass argument(s) get return value procedure has label _fib pass argument in %edi register pass return value in %eax register use 16 bytes for stack frame The Procedure Design Pattern

Slide 27

Slide 27 text

_fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret procedure entry call procedure procedure call set up stack frame unwind stack return to caller return value get argument(s) pass argument(s) get return value procedure definition call procedure procedure call pass argument(s) get return value design patterns best practices coding standards code reviews pair programming (unit) testing bug finders program annotations debugging

Slide 28

Slide 28 text

int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Procedural Abstraction The C Programming Language - Kernighan & Ritchie (1988) A declarative language for specifying procedures

Slide 29

Slide 29 text

int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Procedural Abstraction Procedure design pattern captured in linguistic abstraction procedure definition procedure call

Slide 30

Slide 30 text

int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Procedural Abstraction compute n-th fibonacci number compute (n-2)-th fibonacci number compute (n-1)-th fibonacci number add results return to caller Self explanatory code! n n-th fibonacci 0 1 1 1 2 2 = 1 + 1 3 3 = 1 + 2 4 5 = 2 + 3 5 8 = 3 + 5 6 13 = 5 + 8 7 21 = 8 + 13 8 34 = 13 + 21

Slide 31

Slide 31 text

int fib(int n) { if(n <= 1) return “1”; else return fib(n, 2) + fob(n - 1); } Procedural Abstraction Automatic consistency checks! There is no procedure ‘fob’ Should return int not string Expecting 1 argument, not 2

Slide 32

Slide 32 text

int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Procedural Abstraction _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret gcc Automatic generation of correct code!

Slide 33

Slide 33 text

Procedural Abstraction Reasoning about behaviour! int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Yes, but it is not a very responsive implementation of Fibonacci; its complexity is O(2^n) design patterns best practices coding standards code reviews pair programming (unit) testing bug finders program annotations debugging Is this a correct implementation of Fibonacci?

Slide 34

Slide 34 text

Problem Domain Solution Domain

Slide 35

Slide 35 text

Intermediate Language linguistic abstraction | liNGˈgwistik abˈstrakSHən | noun 1. a programming language construct that captures a programming design pattern the linguistic abstraction saved a lot of programming effort he introduced a linguistic abstraction for page navigation in web programming 2. the process of introducing linguistic abstractions linguistic abstraction for name binding removed the algorithmic encoding of name resolution Problem Domain Solution Domain

Slide 36

Slide 36 text

Procedural abstraction Structured control-flow Automatic memory management Data abstraction Modules and many more

Slide 37

Slide 37 text

Church-Turing Thesis++: Any effective computation can be expressed with a C program

Slide 38

Slide 38 text

“A programming language is low level when its programs require attention to the irrelevant”. -- Alan Perlis, 1982

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

“The enormous growth in data leads to large underlying graphs which require huge amounts of computational power to analyze. While modern commodity computer systems provide a significant amount of computational power measured in the tera-flops, efficient execution of graph analysis algorithms on large datasets remains difficult on these systems [26]. ... it is often challenging to implement a graph analysis algorithm in an efficient way.” Sungpack Hong et al. (2012)

Slide 41

Slide 41 text

Zef Hemel, Danny M. Groenewegen, Lennart C. L. Kats, Eelco Visser. Static consistency checking of web applications with WebDSL. Journal of Symbolic Computation, 46(2):150-182, 2011. Late Failure Detection in Web Applications browser server database Java SQL HTML, JS, CSS Data Persistence Access Control Injection Attacks Search XSS Data Validation Data Binding Routing ... ...

Slide 42

Slide 42 text

parallel programming (multi-core machines) distributed systems (web, mobile) data persistence / services / invariants security / authentication / authorization / access control embedded software (resource constraints) big data analytics (scalability) programming quantum computers

Slide 43

Slide 43 text

“A programming language is low level when its programs require attention to the irrelevant”. -- Alan Perlis, 1982 Problem Domain Solution Domain General- Purpose Language

Slide 44

Slide 44 text

Solution Domain Problem Domain Domain-specific language (DSL) noun 1. a programming language that provides notation, analysis, verification, and optimization specialized to an application domain 2. result of linguistic abstraction beyond general-purpose computation General- Purpose Language Domain- Specific Language

Slide 45

Slide 45 text

Markus Püschel

Slide 46

Slide 46 text

Green-Marl: A DSL for Easy and Efficient Graph Analysis Sungpack Hong, Hassan Chafi, Eric Sedlar, Kunle Olukotun (ASPLOS 2012)

Slide 47

Slide 47 text

WebDSL: tier-less web programming Separation of Concerns & Linguistic Integration entity Status { text : WikiText author : Person validate(text.length() <= 140, "Message can only be 140 characters") } extend entity Person { following : Set } data model with invariants (automatic data persistence) function searchPerson(name: String, lim: Int) : List { return select p from Person as p where p.name like ~("%" + name + "%") limit ~lim; } integrated queries (prevent injection attacks) template output(p: Person) { navigate profile(p) { output(p.name) } } page profile(p: Person) { // page body } statically checked navigation template update() { var status := Status{ author := principal() } form{ input(status.text) submit action{} { "Share" } } } model-view pattern (no controllers)

Slide 48

Slide 48 text

Solution Domain Problem Domain General- Purpose Language Domain- Specific Language

Slide 49

Slide 49 text

Making programming languages is probably very expensive? Solution Domain Problem Domain General- Purpose Language Domain- Specific Language

Slide 50

Slide 50 text

General- Purpose Language Making programming languages is probably very expensive? Solution Domain Problem Domain General- Purpose Language Domain- Specific Language Language Design Compiler + Editor (IDE)

Slide 51

Slide 51 text

Compiler + Editor (IDE) Meta-Linguistic Abstraction Language Design General- Purpose Language Declarative- Meta Languages Solution Domain Problem Domain General- Purpose Language Domain- Specific Language Language Design

Slide 52

Slide 52 text

Compiler + Editor (IDE) Language Design Declarative- Meta Languages

Slide 53

Slide 53 text

Language Workbench Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms Meta-DSLs Compiler + Editor (IDE)

Slide 54

Slide 54 text

Spoofax Language Workbench Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms SDF3 Stratego Transformation Language Compiler + Editor (IDE) declarative rule-based language definition

Slide 55

Slide 55 text

Spoofax Language Workbench Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms Syntax Definition with SDF3 Stratego Transformation Language Compiler + Editor (IDE)

Slide 56

Slide 56 text

int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Syntax: Phrase Structure of Programs

Slide 57

Slide 57 text

Syntax: Phrase Structure of Programs } int fib ( int n ) { if ( n <= 1 ) return 1 ; else return fib ( n - 2 ) + fib ( n - 1 ) ;

Slide 58

Slide 58 text

Exp.Int Exp.Int Exp.Leq Statement.Return Exp.Sub Exp.Sub Exp.Call Exp.Call Exp.Add Statement.Return Param.Param IntType Definition.Function Statement.If ID } int fib ( int n ) { if ( n <= 1 ) return 1 ; else return fib ( n - 2 ) + fib ( n - 1 ) ; Exp.Int Exp.Var Exp.Int Exp.Var Exp.Var IntType Syntax: Phrase Structure of Programs

Slide 59

Slide 59 text

Function IntType IntType Param Var Int Int Leq Return Return Call Add Var Int Sub Var Int Sub Call If fib n n 1 1 fib n 2 fib n 1 Abstract Syntax Tree

Slide 60

Slide 60 text

Function( IntType() , "fib" , [Param(IntType(), "n")] , [ If( Leq(Var("n"), Int("1")) , Int("1") , Add( Call("fib", [Sub(Var("n"), Int("2"))]) , Call("fib", [Sub(Var("n"), Int("1"))]) ) ) ] ) int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Abstract Syntax Term Text parse

Slide 61

Slide 61 text

Type Definition.Function ID } ( ) { Param* Statement* Exp Statement.Return return ; Statement.If if ( ) else Exp Statement Statement Exp.Add + Exp Exp Exp.Var ID Understanding Syntax = Understanding Tree Structure parse(prettyprint(t)) = t No need to understand how parse works!

Slide 62

Slide 62 text

Type Definition.Function ID } ( ) { Param* Statement* Exp Statement.Return return ; Statement.If if ( ) else Exp Statement Statement Exp.Add + Exp Exp templates Definition.Function = < () { } > Statement.If = < if() else > Statement.Return = ;> Exp.Add = < + > Exp.Var = <> Exp.Var ID The Syntax Definition Formalism SDF3

Slide 63

Slide 63 text

Demo: Syntax Definition in the Spoofax Language Workbench

Slide 64

Slide 64 text

Statement.If = < if() else > Parser Abstract syntax tree schema Pretty-Printer Syntactic completion templates Folding rules Error recovery rules Syntactic coloring Outline rules Syntax Definition Multi-Purpose Declarative Syntax Definition

Slide 65

Slide 65 text

Chomsky Backus, Naur Tomita Heering, Hendriks, Klint, Rekers Rekers Visser Visser van den Brand, Scheerder, Vinju, Visser Bravenboer, Visser Kalleberg Bravenboer, Dolstra, Visser Kats, Visser Erdweg, Rendel, Kästner, Ostermann De Jonge, Kats, Visser, Söderberg Vollebregt, Kats, Visser Erdweg, Rendel, Kästner, Ostermann Context-free Grammars BNF Tomita parsing The Syntax Definition Formalism SDF Generalized LR Parsing Character level grammars (SDF2) Scannerless Generalized LR Parsing Disambiguation filters Language embedding SGLR in Java (JSGLR) Preventing injection attacks The Spoofax Language Workbench Library-based syntactic language extensibility (SugarJ) Error recovery for SGLR Template-based grammar productions (SDF3) Layout sensitive generalized parsing A very incomplete history of SDF 1956 1963 1985 1988 1992 1995 1997 2002 2004 2006 2010 2010 2011 2012 2012 2012

Slide 66

Slide 66 text

Spoofax Language Workbench Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms Syntax Definition with SDF3 Stratego Transformation Language Compiler + Editor (IDE)

Slide 67

Slide 67 text

Spoofax Language Workbench Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms incremental analysis & transformation SDF3 Stratego Transformation Language Compiler + Editor (IDE) verification of language design consistency

Slide 68

Slide 68 text

A Language Designer’s Workbench Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms SDF3 Stratego Consistency Proof NaBL TS DynSem Responsive Editor (IDE) Tests Incremental Compiler more declarative meta-languages automatic verification

Slide 69

Slide 69 text

A Language Designer’s Workbench Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms SDF3 Stratego Consistency Proof TS DynSem Tests Responsive Editor (IDE) Incremental Compiler Name Binding with NaBL

Slide 70

Slide 70 text

Name Binding & Scope Rules int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } what does this variable refer to? Our contribution - declarative language for name binding & scope rules - generation of incremental name resolution algorithm - Konat, Kats, Wachsmuth, Visser (SLE 2012) - Wachsmuth, Konat, Vergu, Groenewegen, Visser (SLE 2013) which function is being called here? Needed for - checking correct use of names and types - lookup in interpretation and compilation - navigation in IDE - code completion State-of-the-art - programmatic encoding of name resolution algorithms

Slide 71

Slide 71 text

Definitions and References int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } binding rules Param(t, name) : defines Variable name Var(name) : refers to Variable name Var(“n”) Param(IntType(), “n”)

Slide 72

Slide 72 text

Definitions and References int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Call(“fib”, […]) Function(IntType(), “fib”, […], If(…)) binding rules Param(t, name) : defines Variable name Var(name) : refers to Variable name Function(t, name, param*, s) : defines Function name Call(name, exp*) : refers to Function name

Slide 73

Slide 73 text

int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } int power(int x, int n) { if(x <= 0) return 1; else return x * power(x, n - 1); } Scope binding rules Param(t, name) : defines Variable name Var(name) : refers to Variable name Function(t, name, param*, s) : defines Function name Call(name, exp*) : refers to Function name

Slide 74

Slide 74 text

int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } int power(int x, int n) { if(x <= 0) return 1; else return x * power(x, n - 1); } Scope binding rules Param(t, name) : defines Variable name Var(name) : refers to Variable name Function(t, name, param*, s) : defines Function name Call(name, exp*) : refers to Function name Same name!

Slide 75

Slide 75 text

Scope int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } int power(int x, int n) { if(x <= 0) return 1; else return x * power(x, n - 1); } binding rules Param(t, name) : defines Variable name Var(name) : refers to Variable name Function(t, name, param*, s) : defines Function name Call(name, exp*) : refers to Function name Wrong!

Slide 76

Slide 76 text

Scope int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } int power(int x, int n) { if(x <= 0) return 1; else return x * power(x, n - 1); } binding rules Param(t, name) : defines Variable name Var(name) : refers to Variable name Function(t, name, param*, s) : defines Function name scopes Variable Call(name, exp*) : refers to Function name

Slide 77

Slide 77 text

Scope int power(int x, int n) { int power(int n) { if(n <= 0) return 1; else return power(n - 1) * x; } return power(n); } binding rules Param(t, name) : defines Variable name Var(name) : refers to Variable name Function(t, name, param*, s) : defines Function name scopes Variable, Function Call(name, exp*) : refers to Function name

Slide 78

Slide 78 text

Demo: Name Binding in the Spoofax Language Workbench

Slide 79

Slide 79 text

Declarative Name Binding and Scope Rules binding rules Param(t, name) : defines Variable name Var(name) : refers to Variable name Function(t, name, param*, s) : defines Function name scopes Variable, Function Call(name, exp*) : refers to Function name Incremental name resolution algorithm Name checks Semantic code completion Reference resolution

Slide 80

Slide 80 text

Semantics of Name Binding? binding rules Param(t, name) : defines Variable name Var(name) : refers to Variable name Function(t, name, param*, s) : defines Function name scopes Variable, Function Call(name, exp*) : refers to Function name Research: how to characterize correctness of the result of name resolution without appealing to the algorithm itself? Analogy: declarative semantics of syntax definition

Slide 81

Slide 81 text

Language Designer’s Workbench Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms SDF3 Stratego Consistency Proof TS DynSem Tests Name Binding with NaBL Responsive Editor (IDE) Incremental Compiler

Slide 82

Slide 82 text

Language Designer’s Workbench Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms SDF3 Stratego Consistency Proof NaBL TS DynSem Tests Responsive Editor (IDE) Incremental Compiler

Slide 83

Slide 83 text

Consistency Proof Tests Spoofax 2.0: Prototype the Language Designer’s Workbench templates // statements Statement.Return = ;> Statement.If = < if() else > binding rules Param(t, name) : defines Variable name of type t Var(name) : refers to Variable name type rules Call(name, exp*) : t where definition of name : (t*, t) and exp* : t_exp* and t_exp* == t* rules e --> True(), s1 --> v ---------------------- If(e, s1, s2) --> v e --> False(), s2 --> v ----------------------- If(e, s1, s2) --> v rules translate : Call(f, e*) -> [ e*, Callq(f), Movl(Reg("r"), Reg("t")) ] capturing understanding of language definition Responsive Editor (IDE) Incremental Compiler

Slide 84

Slide 84 text

software computer user software engineer language designer _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret _fib: ! pushq %rbp ! movq %rsp, %rbp ! subq $16, %rsp ! movl %edi, -4(%rbp) ! movl -4(%rbp), %eax ! cmpl $1, %eax ! jg LBB1_2 ! movl $1, -12(%rbp) ! jmp LBB1_3 LBB1_2: ! movl -4(%rbp), %eax ! subl $2, %eax ! movl %eax, %edi ! callq _fib ! movl %eax, %ecx ! movl -4(%rbp), %edx ! subl $1, %edx ! ! movl %ecx, -16(%rbp) ! movl %edx, %edi ! callq _fib ! movl %eax, %ecx ! movl -16(%rbp), %edx ! addl %ecx, %edx ! movl %edx, -12(%rbp) LBB1_3: ! movl -12(%rbp), %eax ! movl %eax, -8(%rbp) ! movl -8(%rbp), %eax ! addq $16, %rsp ! popq %rbp ! ret programming language language engineer meta- language Spoofax, SDF3, Stratego NaBL, TS, DynSem WebDSL, KeyBridge, Green-Marl, SugarJ WebLab, researchr, YellowGrass, ...

Slide 85

Slide 85 text

Education

Slide 86

Slide 86 text

A computer science education should prepare its students to co-evolve with the changing language landscape, learn new technologies as they emerge, contribute to their development, and apply them in new contexts Software languages are the instruments that allow us to turn computational thinking into computation That requires students to develop an understanding of the fundamentals of computing, rather than just acquire a set of specific skills

Slide 87

Slide 87 text

Concepts of Programming Languages - Study modern programming languages - Functional + OO (Scala) - Prototype based inheritance (JavaScript) - Connections with other disciplines Modernizing Programming Education Compiler Construction - Using language workbench - Complete compiler + IDE in one semester - Connection with research Model-Driven Software Development - Language design project Extending Curriculum - program analysis, formal semantics, verification, ...

Slide 88

Slide 88 text

‘ICT in Education’ Improving efficiency and effectiveness of organization EvaTool: automate the course evaluation workflow WebLab: learning management system for programming education researchr: bibliography management for literature surveys

Slide 89

Slide 89 text

Automatic grading with unit testing Instructor uses same environment Program in browser Compile on server Programming education in the browser WebLab

Slide 90

Slide 90 text

Thanks!

Slide 91

Slide 91 text

Family Connie Visser Wim Visser Jelle Visser Bente Visser Janine Mets

Slide 92

Slide 92 text

Paul Klint (UvA) Andrew Tolmach (OGI) Doaitse Swierstra (UU) Board TU Delft EEMCS Faculty AvL Committee Employers Arie van Deursen Henk Sips Rob Fastenau Karel Luyben

Slide 93

Slide 93 text

Sander van der Burg Eelco Dolstra Danny Groenewegen Maartje de Jonge Zef Hemel Lennart Kats Rob Vermaas Sander Vermolen Guido Wachsmuth Stratego/XT Nix (1998-2006) Luís Amorim Elmer van Chastelet Danny Groenewegen Gabriël Konat Pierre Neron Augusto Passalaqua Vlad Vergu Guido Wachsmuth Richard Vogelij Oskar van Rest Chris Gersen Elmer van Chastelet Nathan Bruning Ricky Lindeman André Miguel Simões Dias Vieira Tobi Vollebregt Vlad Vergu Gabriël Konat Sverre Rabbelier Nami Nasserazad Ruben Verhaaf Wouter Mouw Michel Weststrate Jippe Holwerda Nicolas Pierron Jonathan Joubert Sander Mak Roy van den Broek Armijn Hemel Jory van Zessen Bogdan Dumitriu Remko van Beusekom Rene de Groot Niels Janssen Arthur van Dam Jozef Kruger Jonne van Wijngaarden Alan van Dam Robert Anisko Lennart Swart Hedzer Westra Arne de Bruijn Anya Bagge Martin Bravenboer Eelco Dolstra Merijn de Jonge Karl Kalleberg Karina Olmos Rob Vermaas Spoofax WebDSL DisNix Hydra (2006-2013) Language Designer’s Workbench (2013-2018) Mircea Voda Daco Harkes Research Group

Slide 94

Slide 94 text

Oracle Labs Philips Research SERC Sponsors Jacquard, Open Competition, VICI

Slide 95

Slide 95 text

The Future of Programming John Hughes Manuel Serrano Markus Püschel Markus Völter Sebastian Erdweg Stefan Hanenberg Tiark Rompf Arie van Deursen Brandon Hill Daan Leijen Erik Meijer Guido Wachsmuth Harry Buhrman Herman Geuvers