Your SlideShare is downloading. ×
0
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Programming languages shape computational thinking
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Programming languages shape computational thinking

721

Published on

Slides for the inaugural address of Eelco Visser on the occasion of his appointment as Antoni van Leeuwenhoek Professor at Delft University of Technology on Friday, January 17, …

Slides for the inaugural address of Eelco Visser on the occasion of his appointment as Antoni van Leeuwenhoek Professor at Delft University of Technology on Friday, January 17, 2014.

http://eelcovisser.org/wiki/future-of-programming/eelco-visser

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
721
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
45
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. `Programming Languages shape Computational Thinking’ Intreerede prof. dr. Eelco Visser Hoogleraar Programming Languages 17 Januari 2014 Challenge the future 1
  • 2. This Lecture 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”
  • 3. Automatisering beperkt wachttijd rijexamen Automatisering landbouw teveel zaak van koplopers Ondernemingsraden  in  banksector  willen   automatisering  onder  controle  krijgen Automatisering  mislukt  bij  helft  bedrijven Grote behoefte aan personeel automatisering De PC, een algemeen gebruikt, maar toch ingewikkeld gereedschap Artsen bekijken nut computer Mensen zijn geen verlengstuk van de computer Kosten automatisering overheid stijgen snel Vrouw en computer Automatisering politie is verkapte bezuiniging Werknemers onvoldoende bij automatisering betrokken Source: http://kranten.kb.nl
  • 4. Software systems are the engines of modern information society
  • 5. Software systems are for people
  • 6. Software should ‘just work’ easy to use safe cheap (free!) responsive scale reliable don’t lose data keep data private help catch terrorists
  • 7. Software is encoded computational thinking software _fib: ! pushq ! movq ! subq ! movl ! movl ! cmpl ! jg ! movl ! jmp LBB1_2: ! movl ! subl ! movl ! callq ! movl ! movl ! subl ! movl ! movl ! callq ! movl ! movl ! addl ! movl LBB1_3: ! movl ! movl ! movl ! addq ! popq ! ret %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp
  • 8. Software engineers are the architects and mechanics of modern information society computer user software _fib: ! pushq ! movq ! subq ! movl ! movl ! cmpl ! jg ! movl ! jmp LBB1_2: ! movl ! subl ! movl ! callq ! movl ! movl ! subl ! movl ! movl ! callq ! movl ! movl ! addl ! movl LBB1_3: ! movl ! movl ! movl ! addq ! popq ! ret %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp software engineer
  • 9. 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 _fib: ! pushq ! movq ! subq ! movl ! movl ! cmpl ! jg ! movl ! jmp LBB1_2: ! movl ! subl ! movl ! callq ! movl ! movl ! subl ! movl ! movl ! callq ! movl ! movl ! addl ! movl LBB1_3: ! movl ! movl ! movl ! addq ! popq ! ret %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp software engineer
  • 10. Programming languages are the key tools in the encoding process computer user software _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp programming language software engineer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp
  • 11. Programming languages are software systems too computer user software _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp programming language software engineer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp compiler interpreter type checker editor (IDE) refactorings bug finders
  • 12. Programming languages should ‘just work’ computer user software _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp programming language software engineer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp easy to use safe cheap (free!) responsive scale reliable
  • 13. Language designers create programming languages computer user software _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp programming language software engineer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp language designer
  • 14. Language engineering provides the tools that let language designers do a good job computer user software _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp programming language software engineer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp language designer
  • 15. Meta-languages support the encoding of language designs computer user software _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp programming language software engineer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp metalanguage language designer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp language engineer
  • 16. Language engineers eat their own dogfood computer user software _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp programming language software engineer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp metalanguage language designer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp language engineer
  • 17. Software is encoded computational thinking _fib: ! pushq ! movq ! subq ! movl ! movl ! cmpl ! jg ! movl ! jmp LBB1_2: ! movl ! subl ! movl ! callq ! movl ! movl ! subl ! ! movl ! movl ! callq ! movl ! movl ! addl ! movl LBB1_3: ! movl ! movl ! movl ! addq ! popq ! ret %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp
  • 18. Software is encoded computational thinking _fib: ! pushq ! movq ! subq ! movl ! movl ! cmpl ! jg ! movl ! jmp LBB1_2: ! movl ! subl ! movl ! callq ! movl ! movl ! subl ! ! movl ! movl ! callq ! movl ! movl ! addl ! movl LBB1_3: ! movl ! movl ! movl ! addq ! popq ! ret %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp modeling mechanical computation Alan Turing 1912 - 1954
  • 19. Turing Machine current tape state $ 0 0 1 0 $ 0 0 1 1 2 $ 0 0 0 0 $ 0 1 0 1 3 1 $ $ R 2 2 0 0 R 2 Alan Turing 1936 2 1 1 L 3 2 $ $ R H current state Church-Turing Thesis: Any effective computation can be expressed with a Turing Machine current symbol 3 0 0 L 3 3 1 1 L 3 3 $ $ R 4 new symbol next state move tape
  • 20. Turing Machine 1 $ 0 0 0 0 $ 0 1 0 1 Add two binary numbers $ 0 0 1 0 $ 0 0 1 1 H 1 $ $ R 2 41 0 R 4 8 1 1 R 8 2 1 1 L 3 4$ $ L 5 8 $ $ L 9 2 $ $ R H 5 1 0 L 5 9 1 0 L 9 3 0 0 L 3 5 0 1 L 6 9 0 1 L 10 3 1 1 L 3 6 0 0 L 6 10 0 0 L 10 3 $ $ R 4 Church-Turing Thesis: Any effective computation can be expressed with a Turing Machine 8 0 0 R 8 2 0 0 R 2 is zero? 40 1 R 4 6 1 1 L 6 10 1 1 L 10 6 $ $ R 7 10 $ $ L 11 7 0 1 R 7 11 0 0 L 11 7 1 0 R 7 11 1 1 L 11 7 $ $ R 8 12 $ $ R 2 subtract one add one back repeat Alan Turing 1936
  • 21. Universal Turing Machine program $ data S Universal Program (Turing Machine Interpreter) Halting problem: given a Turing Machine program P, does P halt for any input data? Undeci dable! Alan Turing 1936
  • 22. world bus Von Neumann control unit data ALU Simple Instructions add, subtract fetch, store … registers program CPU memory Alan Turing
  • 23. n 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 Example: a procedure for computing Fibonacci numbers n-th fibonacci 34 = 13 + 21
  • 24. n 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 Example: a procedure for computing Fibonacci numbers n-th fibonacci 34 = 13 + 21
  • 25. compute n-th fibonacci number if n less or equal to 1 result is 1 compute (n-2)-nd fibonacci number compute (n-1)-th fibonacci number add the results return to caller _fib: ! pushq ! movq ! subq ! movl ! movl ! cmpl ! jg ! movl ! jmp LBB1_2: ! movl ! subl ! movl ! callq ! movl ! movl ! subl ! movl ! movl ! callq ! movl ! movl ! addl ! movl LBB1_3: ! movl ! movl ! movl ! addq ! popq ! ret %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp 0 1 2 2=1+1 3 3=1+2 4 5=2+3 5 by calling _fib 1 1 by calling _fib n-th fibonacci 8=3+5 6 13 = 5 + 8 7 21 = 8 + 13 8 -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) n 34 = 13 + 21
  • 26. procedure has label _fib pass argument in %edi register The Procedure Design Pattern pass return value in %eax register use 16 bytes for stack frame _fib: ! pushq ! movq ! subq ! movl ! movl ! cmpl ! jg ! movl ! jmp LBB1_2: ! movl ! subl ! movl ! callq ! movl ! movl ! subl ! movl ! movl ! callq ! movl ! movl ! addl ! movl LBB1_3: ! movl ! movl ! movl ! addq ! popq ! ret %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp procedure entry set up stack frame get argument(s) procedure definition pass argument(s) call procedure get return value procedure call pass argument(s) call procedure get return value procedure call return value unwind stack return to caller
  • 27. design patterns best practices coding standards code reviews pair programming (unit) testing bug finders program annotations debugging _fib: ! pushq ! movq ! subq ! movl ! movl ! cmpl ! jg ! movl ! jmp LBB1_2: ! movl ! subl ! movl ! callq ! movl ! movl ! subl ! movl ! movl ! callq ! movl ! movl ! addl ! movl LBB1_3: ! movl ! movl ! movl ! addq ! popq ! ret %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp procedure entry set up stack frame get argument(s) procedure definition pass argument(s) call procedure get return value procedure call pass argument(s) call procedure get return value procedure call return value unwind stack return to caller
  • 28. Procedural Abstraction int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } The C Programming Language - Kernighan & Ritchie (1988) A declarative language for specifying procedures
  • 29. Procedural Abstraction procedure definition int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } procedure call Procedure design pattern captured in linguistic abstraction
  • 30. Procedural Abstraction n 0 compute (n-2)-th compute (n-1)-th fibonacci number fibonacci number add results return to caller Self explanatory code! 1 2 2=1+1 3 3=1+2 4 5=2+3 5 8=3+5 6 int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } 1 1 compute n-th fibonacci number n-th fibonacci 13 = 5 + 8 7 21 = 8 + 13 8 34 = 13 + 21
  • 31. Procedural Abstraction Should return int not string int fib(int n) { if(n <= 1) return “1”; else return fib(n, 2) + fob(n - 1); } Expecting 1 argument, not 2 Automatic consistency checks! There is no procedure ‘fob’
  • 32. Procedural Abstraction int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Automatic generation of correct code! gcc _fib: ! pushq ! movq ! subq ! movl ! movl ! cmpl ! jg ! movl ! jmp LBB1_2: ! movl ! subl ! movl ! callq ! movl ! movl ! subl ! movl ! movl ! callq ! movl ! movl ! addl ! movl LBB1_3: ! movl ! movl ! movl ! addq ! popq ! ret %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp
  • 33. Procedural Abstraction Is this a correct implementation of Fibonacci? design patterns best practices coding standards code reviews pair programming (unit) testing bug finders program annotations debugging 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) Reasoning about behaviour!
  • 34. Problem Domain Solution Domain
  • 35. Problem Domain Intermediate Language Solution Domain 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
  • 36. Procedural abstraction Structured control-flow Automatic memory management Data abstraction Modules and many more
  • 37. Church-Turing Thesis++: Any effective computation can be expressed with a C program
  • 38. “A programming language is low level when its programs require attention to the irrelevant”. -- Alan Perlis, 1982
  • 39. “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)
  • 40. Late Failure Detection in Web Applications browser server database HTML, JS, CSS Java SQL Data Persistence Routing Search Injection Attacks Access Control 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. Data Binding XSS Data Validation ... ...
  • 41. 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
  • 42. Problem Domain GeneralPurpose Language Solution Domain “A programming language is low level when its programs require attention to the irrelevant”. -- Alan Perlis, 1982
  • 43. Problem Domain DomainSpecific Language GeneralPurpose Language 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 Solution Domain
  • 44. Markus Püschel
  • 45. Green-Marl: A DSL for Easy and Efficient Graph Analysis Sungpack Hong, Hassan Chafi, Eric Sedlar, Kunle Olukotun (ASPLOS 2012)
  • 46. 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<Person> } template output(p: Person) { navigate profile(p) { output(p.name) } } page profile(p: Person) { // page body } statically checked navigation data model with invariants (automatic data persistence) function searchPerson(name: String, lim: Int) : List<Person> { return select p from Person as p where p.name like ~("%" + name + "%") limit ~lim; } integrated queries (prevent injection attacks) template update() { var status := Status{ author := principal() } form{ input(status.text) submit action{} { "Share" } } } model-view pattern (no controllers)
  • 47. Problem Domain DomainSpecific Language GeneralPurpose Language Solution Domain
  • 48. Problem Domain DomainSpecific Language Making programming languages is probably very expensive? GeneralPurpose Language Solution Domain
  • 49. Problem Domain DomainSpecific Language GeneralPurpose Language Solution Domain GeneralPurpose Language Compiler + Editor (IDE) Making programming languages is probably very expensive? Language Design
  • 50. Problem Domain DomainSpecific Language GeneralPurpose Language Solution Domain GeneralPurpose Language Compiler + Editor (IDE) Meta-Linguistic Abstraction Language Design DeclarativeMeta Languages
  • 51. Language Design DeclarativeMeta Languages Compiler + Editor (IDE)
  • 52. Language Design Syntax Definition Name Binding Type System Language Workbench Meta-DSLs Compiler + Editor (IDE) Dynamic Semantics Transforms
  • 53. Language Design Syntax Definition Name Binding Type System Dynamic Semantics Spoofax Language Workbench SDF3 declarative rule-based language definition Stratego Transformation Language Compiler + Editor (IDE) Transforms
  • 54. Language Design Syntax Definition Syntax Definition with SDF3 Name Binding Type System Dynamic Semantics Spoofax Language Workbench Stratego Transformation Language Compiler + Editor (IDE) Transforms
  • 55. Syntax: Phrase Structure of Programs int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); }
  • 56. Syntax: Phrase Structure of Programs int fib ( int if ( n <= return n) { 1) 1 ; else return } fib ( n - 2 ) + fib ( n - 1 ) ;
  • 57. Definition.Function Syntax: Phrase Structure of Programs Statement.If Statement.Return Exp.Add Exp.Call ID Param.Param IntType int IntType fib ( int n) Exp.Leq Exp.Var { if ( n Statement.Return Exp.Int <= 1) Exp.Sub Exp.Int return 1 ; Exp.Var else Exp.Call return Exp.Sub Exp.Int Exp.Var Exp.Int fib ( n - 2 ) + fib ( n - 1 ) ; }
  • 58. Function Abstract Syntax Tree If Return Add Call Call Param IntType fib IntType n Leq Return Sub Var Int Int n 1 1 Var fib n Sub Var Int 2 fib n Int 1
  • 59. int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Text parse Function( IntType() , "fib" , [Param(IntType(), , [ If( Leq(Var("n"), , Int("1") , Add( Call("fib", , Call("fib", ) ) ] ) "n")] Int("1")) [Sub(Var("n"), Int("2"))]) [Sub(Var("n"), Int("1"))]) Abstract Syntax Term
  • 60. Definition.Function Type ID ( Param* ) { Statement* } Understanding Syntax = Understanding Tree Structure Statement.If if ( Exp ) Statement else Statement Statement.Return return Exp parse(prettyprint(t)) = t ; Exp.Add Exp + Exp Exp.Var ID No need to understand how parse works!
  • 61. Definition.Function The Syntax Definition Formalism SDF3 Type ID ( Param* ) { Statement* } Statement.If if ( Exp ) Statement else Statement Statement.Return return Exp ; Exp.Add templates Definition.Function = < <Type> <ID>(<Param*; separator=",">) { <Statement*; separator="n"> } > Statement.If = < if(<Exp>) <Statement> else <Statement> > Statement.Return = <return <Exp>;> Exp + Exp Exp.Var ID Exp.Add = <<Exp> + <Exp>> Exp.Var = <<ID>>
  • 62. Demo: Syntax Definition in the Spoofax Language Workbench
  • 63. Multi-Purpose Declarative Syntax Definition Parser Error recovery rules Statement.If = < if(<Exp>) <Statement> else <Statement> > Syntax Definition Pretty-Printer Abstract syntax tree schema Syntactic coloring Syntactic completion templates Folding rules Outline rules
  • 64. A very incomplete history of SDF Context-free Grammars 1956 Chomsky BNF 1963 Backus, Naur Tomita parsing 1985 Tomita The Syntax Definition Formalism SDF 1988 Heering, Hendriks, Klint, Rekers Generalized LR Parsing 1992 Rekers Character level grammars (SDF2) 1995 Visser Scannerless Generalized LR Parsing 1997 Visser Disambiguation filters 2002 van den Brand, Scheerder, Vinju, Visser Language embedding 2004 Bravenboer, Visser SGLR in Java (JSGLR) 2006 Kalleberg Preventing injection attacks 2010 Bravenboer, Dolstra, Visser The Spoofax Language Workbench 2010 Kats, Visser Library-based syntactic language extensibility (SugarJ) 2011 Erdweg, Rendel, Kästner, Ostermann Error recovery for SGLR 2012 De Jonge, Kats, Visser, Söderberg Template-based grammar productions (SDF3) 2012 Vollebregt, Kats, Visser Layout sensitive generalized parsing 2012 Erdweg, Rendel, Kästner, Ostermann
  • 65. Language Design Syntax Definition Syntax Definition with SDF3 Name Binding Type System Dynamic Semantics Spoofax Language Workbench Stratego Transformation Language Compiler + Editor (IDE) Transforms
  • 66. Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms Spoofax Language Workbench SDF3 incremental analysis & transformation Stratego Transformation Language Compiler + Editor (IDE) verification of language design consistency
  • 67. Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms automatic verification more declarative meta-languages A Language Designer’s Workbench SDF3 Incremental Compiler NaBL Responsive Editor (IDE) TS DynSem Consistency Proof Stratego Tests
  • 68. Language Design Syntax Definition Name Binding Type System Dynamic Semantics Name Binding Language Designer’s Workbench A with NaBL TS SDF3 Incremental Compiler Responsive Editor (IDE) DynSem Consistency Proof Transforms Stratego Tests
  • 69. Name Binding & Scope Rules Needed for what does this variable refer to? int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } which function is being called here? - 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 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)
  • 70. Definitions and References binding rules Param(IntType(), “n”) Param(t, name) : defines Variable name int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Var(“n”) Var(name) : refers to Variable name
  • 71. Definitions and References binding rules Function(IntType(), “fib”, […], If(…)) int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Call(“fib”, […]) 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
  • 72. Scope binding rules 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); } 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
  • 73. Scope binding rules int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Param(t, name) : defines Variable name Var(name) : refers to Variable name Same name! int power(int x, int n) { if(x <= 0) return 1; else return x * power(x, n - 1); } Function(t, name, param*, s) : defines Function name Call(name, exp*) : refers to Function name
  • 74. Scope binding rules int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); } Param(t, name) : defines Variable name Var(name) : refers to Variable name Wrong! int power(int x, int n) { if(x <= 0) return 1; else return x * power(x, n - 1); } Function(t, name, param*, s) : defines Function name Call(name, exp*) : refers to Function name
  • 75. Scope binding rules 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); } 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
  • 76. Scope binding rules int power(int x, int n) { int power(int n) { if(n <= 0) return 1; else return power(n - 1) * x; } Param(t, name) : defines Variable name Var(name) : refers to Variable name Function(t, name, param*, s) : defines Function name scopes Variable, Function return power(n); } Call(name, exp*) : refers to Function name
  • 77. Demo: Name Binding in the Spoofax Language Workbench
  • 78. 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 Reference resolution Semantic code completion
  • 79. Semantics of Name Binding? binding rules Research: how to characterize correctness of the result of name resolution without appealing to the algorithm itself? 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 Analogy: declarative semantics of syntax definition
  • 80. Language Design Syntax Definition Name Binding Type System Dynamic Semantics Name Binding Language Designer’s Workbench with NaBL TS SDF3 Incremental Compiler Responsive Editor (IDE) DynSem Consistency Proof Transforms Stratego Tests
  • 81. Language Design Syntax Definition Name Binding Type System Dynamic Semantics Transforms Language Designer’s Workbench SDF3 Incremental Compiler NaBL Responsive Editor (IDE) TS DynSem Consistency Proof Stratego Tests
  • 82. Spoofax 2.0: Prototype the Language Designer’s Workbench capturing understanding of language definition templates // statements Statement.Return = <return <Exp>;> Statement.If = < if(<Exp>) <Statement> else <Statement> > binding rules type rules Param(t, name) : defines Variable name of type t Var(name) : refers to Variable name Incremental Compiler rules Call(name, exp*) : t where definition of name : (t*, t) and exp* : t_exp* and t_exp* == t* Responsive Editor (IDE) rules e --> True(), s1 --> v ---------------------If(e, s1, s2) --> v e --> False(), s2 --> v ----------------------If(e, s1, s2) --> v Consistency Proof Tests translate : Call(f, e*) -> [ <translate> e*, Callq(f), Movl(Reg("r"), Reg("t")) ]
  • 83. computer user WebLab, researchr, YellowGrass, ... WebDSL, KeyBridge, Green-Marl, SugarJ Spoofax, SDF3, Stratego NaBL, TS, DynSem software _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp programming language software engineer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp metalanguage language designer _fib: ! ! ! ! ! ! ! ! ! LBB1_2: ! ! ! ! ! ! ! ! ! ! ! ! ! ! LBB1_3: ! ! ! ! ! ! pushq movq subq movl movl cmpl jg movl jmp %rbp %rsp, %rbp $16, %rsp %edi, -4(%rbp) -4(%rbp), %eax $1, %eax LBB1_2 $1, -12(%rbp) LBB1_3 movl subl movl callq movl movl subl movl movl callq movl movl addl movl -4(%rbp), %eax $2, %eax %eax, %edi _fib %eax, %ecx -4(%rbp), %edx $1, %edx ! %ecx, -16(%rbp) %edx, %edi _fib %eax, %ecx -16(%rbp), %edx %ecx, %edx %edx, -12(%rbp) movl movl movl addq popq ret -12(%rbp), %eax %eax, -8(%rbp) -8(%rbp), %eax $16, %rsp %rbp language engineer
  • 84. Education
  • 85. Software languages are the instruments that allow us to turn computational thinking into computation 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 That requires students to develop an understanding of the fundamentals of computing, rather than just acquire a set of specific skills
  • 86. Modernizing Programming Education Concepts of Programming Languages - Study modern programming languages - Functional + OO (Scala) - Prototype based inheritance (JavaScript) - Connections with other disciplines Model-Driven Software Development - Language design project Compiler Construction - Using language workbench - Complete compiler + IDE in one semester - Connection with research Extending Curriculum - program analysis, formal semantics, verification, ...
  • 87. ‘ICT in Education’ EvaTool: automate the course evaluation workflow researchr: bibliography management for literature surveys WebLab: learning management system for programming education Improving efficiency and effectiveness of organization
  • 88. WebLab Programming education in the browser Program in browser Compile on server Automatic grading with unit testing Instructor uses same environment
  • 89. Thanks!
  • 90. Family Connie Visser Wim Visser Janine Mets Jelle Visser Bente Visser
  • 91. Employers Board TU Delft Paul Klint (UvA) EEMCS Faculty Andrew Tolmach (OGI) AvL Committee Doaitse Swierstra (UU) Arie van Deursen Henk Sips Rob Fastenau Karel Luyben
  • 92. Research Group (1998-2006) Anya Bagge Martin Bravenboer Eelco Dolstra Merijn de Jonge Karl Kalleberg Karina Olmos Rob Vermaas Sander Mak Roy van den Broek Armijn Hemel Jory van Zessen Bogdan Dumitriu Remko van Beusekom Rene de Groot Niels Janssen Arthur van Dam Spoofax WebDSL DisNix Hydra Sander van der Burg Eelco Dolstra Danny Groenewegen Maartje de Jonge Zef Hemel Lennart Kats Rob Vermaas Sander Vermolen 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 Luís Amorim Elmer van Chastelet Danny Groenewegen Gabriël Konat Pierre Neron Augusto Passalaqua Vlad Vergu Guido Wachsmuth Stratego/XT Nix (2006-2013) Language Designer’s Workbench (2013-2018) Mircea Voda Daco Harkes Jozef Kruger Jonne van Wijngaarden Alan van Dam Robert Anisko Lennart Swart Hedzer Westra Arne de Bruijn Gabriël Konat Sverre Rabbelier Nami Nasserazad Ruben Verhaaf Wouter Mouw Michel Weststrate Jippe Holwerda Nicolas Pierron Jonathan Joubert
  • 93. Sponsors Oracle Labs Philips Research Jacquard, Open Competition, VICI SERC
  • 94. The Future of Programming Arie van Deursen Brandon Hill Daan Leijen Erik Meijer Guido Wachsmuth Harry Buhrman Herman Geuvers John Hughes Manuel Serrano Markus Püschel Markus Völter Sebastian Erdweg Stefan Hanenberg Tiark Rompf

×