SlideShare ist ein Scribd-Unternehmen logo
1 von 95
Downloaden Sie, um offline zu lesen
`Programming Languages shape
Computational Thinking’
Intreerede prof. dr. Eelco Visser
Hoogleraar Programming Languages
17 Januari 2014

Challenge the future

1
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”
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
Software systems are the engines
of modern information society
Software systems are for people
Software should ‘just work’
easy to use
safe
cheap (free!)
responsive
scale
reliable
don’t lose data
keep data private
help catch terrorists
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
world

bus

Von Neumann

control
unit
data
ALU

Simple Instructions
add, subtract
fetch, store
…

registers

program

CPU

memory

Alan Turing
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
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
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
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
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
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
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
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
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’
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
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!
Problem
Domain

Solution
Domain
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
Procedural abstraction
Structured control-flow
Automatic memory management
Data abstraction
Modules
and many more
Church-Turing Thesis++: Any
effective computation can be
expressed with a C program
“A programming language is low level when its programs
require attention to the irrelevant”. -- Alan Perlis, 1982
“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)
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
...

...
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
Problem
Domain

GeneralPurpose
Language

Solution
Domain

“A programming language is low level when its programs
require attention to the irrelevant”. -- Alan Perlis, 1982
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
Markus Püschel
Green-Marl: A DSL for Easy and Efficient Graph Analysis
Sungpack Hong, Hassan Chafi, Eric Sedlar, Kunle Olukotun (ASPLOS 2012)
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)
Problem
Domain

DomainSpecific
Language

GeneralPurpose
Language

Solution
Domain
Problem
Domain

DomainSpecific
Language

Making programming languages
is probably very expensive?

GeneralPurpose
Language

Solution
Domain
Problem
Domain

DomainSpecific
Language

GeneralPurpose
Language

Solution
Domain

GeneralPurpose
Language

Compiler +
Editor (IDE)

Making programming languages
is probably very expensive?

Language
Design
Problem
Domain

DomainSpecific
Language

GeneralPurpose
Language

Solution
Domain

GeneralPurpose
Language

Compiler +
Editor (IDE)

Meta-Linguistic Abstraction

Language
Design

DeclarativeMeta
Languages
Language
Design

DeclarativeMeta
Languages

Compiler +
Editor (IDE)
Language Design
Syntax
Definition

Name
Binding

Type
System

Language Workbench
Meta-DSLs

Compiler +
Editor (IDE)

Dynamic
Semantics

Transforms
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
Language Design
Syntax
Definition

Syntax Definition
with SDF3

Name
Binding

Type
System

Dynamic
Semantics

Spoofax Language Workbench
Stratego Transformation Language

Compiler +
Editor (IDE)

Transforms
Syntax: Phrase Structure of Programs

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

int

fib ( int

if ( n

<=

return

n)

{

1)
1 ;

else
return
}

fib ( n - 2 )

+

fib ( n - 1 ) ;
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 ) ; }
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
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
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!
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>>
Demo: Syntax Definition in the Spoofax Language
Workbench
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
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
Language Design
Syntax
Definition

Syntax Definition
with SDF3

Name
Binding

Type
System

Dynamic
Semantics

Spoofax Language Workbench
Stratego Transformation Language

Compiler +
Editor (IDE)

Transforms
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
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
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
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)
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
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
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
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
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
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
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
Demo: Name Binding in the Spoofax Language Workbench
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
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
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
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
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"))
]
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
Education
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
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, ...
‘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
WebLab
Programming education
in the browser

Program in browser
Compile on server
Automatic grading
with unit testing
Instructor uses
same environment
Thanks!
Family
Connie Visser
Wim Visser
Janine Mets
Jelle Visser
Bente Visser
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
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
Sponsors

Oracle Labs
Philips Research
Jacquard, Open Competition, VICI

SERC
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

Weitere ähnliche Inhalte

Ähnlich wie Programming languages shape computational thinking

Owf 2013 rii moose speaker 2
Owf 2013 rii moose speaker 2Owf 2013 rii moose speaker 2
Owf 2013 rii moose speaker 2Patrick MOREAU
 
The Mystery of Natural Language Processing
The Mystery of Natural Language ProcessingThe Mystery of Natural Language Processing
The Mystery of Natural Language ProcessingMahmood Aijazi, MD
 
Python Intro For Managers
Python Intro For ManagersPython Intro For Managers
Python Intro For ManagersAtul Shridhar
 
Large Scale Text Processing
Large Scale Text ProcessingLarge Scale Text Processing
Large Scale Text ProcessingSuneel Marthi
 
Large Scale Processing of Unstructured Text
Large Scale Processing of Unstructured TextLarge Scale Processing of Unstructured Text
Large Scale Processing of Unstructured TextDataWorks Summit
 
Better problem solving through scripting: How to think through your #eprdctn ...
Better problem solving through scripting: How to think through your #eprdctn ...Better problem solving through scripting: How to think through your #eprdctn ...
Better problem solving through scripting: How to think through your #eprdctn ...BookNet Canada
 
YAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses PerlYAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses PerlCosimo Streppone
 
Julia: compiler and community
Julia: compiler and communityJulia: compiler and community
Julia: compiler and communityJiahao Chen
 
Big Data Spain 2017 - Deriving Actionable Insights from High Volume Media St...
Big Data Spain 2017  - Deriving Actionable Insights from High Volume Media St...Big Data Spain 2017  - Deriving Actionable Insights from High Volume Media St...
Big Data Spain 2017 - Deriving Actionable Insights from High Volume Media St...Apache OpenNLP
 
Lecture1 compilers
Lecture1 compilersLecture1 compilers
Lecture1 compilersAftab Ahmad
 
Rrw02 Week 1 Assignment
Rrw02 Week 1 AssignmentRrw02 Week 1 Assignment
Rrw02 Week 1 AssignmentSheri Elliott
 
Evaluation of morden computer & system attributes in ACA
Evaluation of morden computer &  system attributes in ACAEvaluation of morden computer &  system attributes in ACA
Evaluation of morden computer & system attributes in ACAPankaj Kumar Jain
 
Computer program, computer languages, computer software
Computer program, computer languages, computer softwareComputer program, computer languages, computer software
Computer program, computer languages, computer softwareSweta Kumari Barnwal
 
Introduction to computer software
Introduction to computer softwareIntroduction to computer software
Introduction to computer softwareManvendra Singh
 
Introduction to computer software
Introduction to computer softwareIntroduction to computer software
Introduction to computer softwareDeepu Chaudhary
 
Operating system concepts
Operating system conceptsOperating system concepts
Operating system conceptsGreen Ecosystem
 

Ähnlich wie Programming languages shape computational thinking (20)

Owf 2013 rii moose speaker 2
Owf 2013 rii moose speaker 2Owf 2013 rii moose speaker 2
Owf 2013 rii moose speaker 2
 
The Mystery of Natural Language Processing
The Mystery of Natural Language ProcessingThe Mystery of Natural Language Processing
The Mystery of Natural Language Processing
 
Python Intro For Managers
Python Intro For ManagersPython Intro For Managers
Python Intro For Managers
 
Php performance-talk
Php performance-talkPhp performance-talk
Php performance-talk
 
Large Scale Text Processing
Large Scale Text ProcessingLarge Scale Text Processing
Large Scale Text Processing
 
Large Scale Processing of Unstructured Text
Large Scale Processing of Unstructured TextLarge Scale Processing of Unstructured Text
Large Scale Processing of Unstructured Text
 
Pooja H
Pooja H Pooja H
Pooja H
 
Better problem solving through scripting: How to think through your #eprdctn ...
Better problem solving through scripting: How to think through your #eprdctn ...Better problem solving through scripting: How to think through your #eprdctn ...
Better problem solving through scripting: How to think through your #eprdctn ...
 
YAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses PerlYAPC::EU::2009 - How Opera Software uses Perl
YAPC::EU::2009 - How Opera Software uses Perl
 
Julia: compiler and community
Julia: compiler and communityJulia: compiler and community
Julia: compiler and community
 
IN4308 1
IN4308 1IN4308 1
IN4308 1
 
Big Data Spain 2017 - Deriving Actionable Insights from High Volume Media St...
Big Data Spain 2017  - Deriving Actionable Insights from High Volume Media St...Big Data Spain 2017  - Deriving Actionable Insights from High Volume Media St...
Big Data Spain 2017 - Deriving Actionable Insights from High Volume Media St...
 
Lecture1 compilers
Lecture1 compilersLecture1 compilers
Lecture1 compilers
 
Rrw02 Week 1 Assignment
Rrw02 Week 1 AssignmentRrw02 Week 1 Assignment
Rrw02 Week 1 Assignment
 
Evaluation of morden computer & system attributes in ACA
Evaluation of morden computer &  system attributes in ACAEvaluation of morden computer &  system attributes in ACA
Evaluation of morden computer & system attributes in ACA
 
Computer program, computer languages, computer software
Computer program, computer languages, computer softwareComputer program, computer languages, computer software
Computer program, computer languages, computer software
 
Machine Tanslation
Machine TanslationMachine Tanslation
Machine Tanslation
 
Introduction to computer software
Introduction to computer softwareIntroduction to computer software
Introduction to computer software
 
Introduction to computer software
Introduction to computer softwareIntroduction to computer software
Introduction to computer software
 
Operating system concepts
Operating system conceptsOperating system concepts
Operating system concepts
 

Mehr von Eelco Visser

CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term RewritingCS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term RewritingEelco Visser
 
CS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic ServicesCS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic ServicesEelco Visser
 
CS4200 2019 | Lecture 3 | Parsing
CS4200 2019 | Lecture 3 | ParsingCS4200 2019 | Lecture 3 | Parsing
CS4200 2019 | Lecture 3 | ParsingEelco Visser
 
CS4200 2019 | Lecture 2 | syntax-definition
CS4200 2019 | Lecture 2 | syntax-definitionCS4200 2019 | Lecture 2 | syntax-definition
CS4200 2019 | Lecture 2 | syntax-definitionEelco Visser
 
CS4200 2019 Lecture 1: Introduction
CS4200 2019 Lecture 1: IntroductionCS4200 2019 Lecture 1: Introduction
CS4200 2019 Lecture 1: IntroductionEelco Visser
 
A Direct Semantics of Declarative Disambiguation Rules
A Direct Semantics of Declarative Disambiguation RulesA Direct Semantics of Declarative Disambiguation Rules
A Direct Semantics of Declarative Disambiguation RulesEelco Visser
 
Declarative Type System Specification with Statix
Declarative Type System Specification with StatixDeclarative Type System Specification with Statix
Declarative Type System Specification with StatixEelco Visser
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionEelco Visser
 
Domain Specific Languages for Parallel Graph AnalytiX (PGX)
Domain Specific Languages for Parallel Graph AnalytiX (PGX)Domain Specific Languages for Parallel Graph AnalytiX (PGX)
Domain Specific Languages for Parallel Graph AnalytiX (PGX)Eelco Visser
 
Compiler Construction | Lecture 15 | Memory Management
Compiler Construction | Lecture 15 | Memory ManagementCompiler Construction | Lecture 15 | Memory Management
Compiler Construction | Lecture 15 | Memory ManagementEelco Visser
 
Compiler Construction | Lecture 14 | Interpreters
Compiler Construction | Lecture 14 | InterpretersCompiler Construction | Lecture 14 | Interpreters
Compiler Construction | Lecture 14 | InterpretersEelco Visser
 
Compiler Construction | Lecture 13 | Code Generation
Compiler Construction | Lecture 13 | Code GenerationCompiler Construction | Lecture 13 | Code Generation
Compiler Construction | Lecture 13 | Code GenerationEelco Visser
 
Compiler Construction | Lecture 12 | Virtual Machines
Compiler Construction | Lecture 12 | Virtual MachinesCompiler Construction | Lecture 12 | Virtual Machines
Compiler Construction | Lecture 12 | Virtual MachinesEelco Visser
 
Compiler Construction | Lecture 11 | Monotone Frameworks
Compiler Construction | Lecture 11 | Monotone FrameworksCompiler Construction | Lecture 11 | Monotone Frameworks
Compiler Construction | Lecture 11 | Monotone FrameworksEelco Visser
 
Compiler Construction | Lecture 10 | Data-Flow Analysis
Compiler Construction | Lecture 10 | Data-Flow AnalysisCompiler Construction | Lecture 10 | Data-Flow Analysis
Compiler Construction | Lecture 10 | Data-Flow AnalysisEelco Visser
 
Compiler Construction | Lecture 9 | Constraint Resolution
Compiler Construction | Lecture 9 | Constraint ResolutionCompiler Construction | Lecture 9 | Constraint Resolution
Compiler Construction | Lecture 9 | Constraint ResolutionEelco Visser
 
Compiler Construction | Lecture 8 | Type Constraints
Compiler Construction | Lecture 8 | Type ConstraintsCompiler Construction | Lecture 8 | Type Constraints
Compiler Construction | Lecture 8 | Type ConstraintsEelco Visser
 
Compiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type CheckingCompiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type CheckingEelco Visser
 
Compiler Construction | Lecture 6 | Introduction to Static Analysis
Compiler Construction | Lecture 6 | Introduction to Static AnalysisCompiler Construction | Lecture 6 | Introduction to Static Analysis
Compiler Construction | Lecture 6 | Introduction to Static AnalysisEelco Visser
 
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingCompiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingEelco Visser
 

Mehr von Eelco Visser (20)

CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term RewritingCS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
 
CS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic ServicesCS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic Services
 
CS4200 2019 | Lecture 3 | Parsing
CS4200 2019 | Lecture 3 | ParsingCS4200 2019 | Lecture 3 | Parsing
CS4200 2019 | Lecture 3 | Parsing
 
CS4200 2019 | Lecture 2 | syntax-definition
CS4200 2019 | Lecture 2 | syntax-definitionCS4200 2019 | Lecture 2 | syntax-definition
CS4200 2019 | Lecture 2 | syntax-definition
 
CS4200 2019 Lecture 1: Introduction
CS4200 2019 Lecture 1: IntroductionCS4200 2019 Lecture 1: Introduction
CS4200 2019 Lecture 1: Introduction
 
A Direct Semantics of Declarative Disambiguation Rules
A Direct Semantics of Declarative Disambiguation RulesA Direct Semantics of Declarative Disambiguation Rules
A Direct Semantics of Declarative Disambiguation Rules
 
Declarative Type System Specification with Statix
Declarative Type System Specification with StatixDeclarative Type System Specification with Statix
Declarative Type System Specification with Statix
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler Construction
 
Domain Specific Languages for Parallel Graph AnalytiX (PGX)
Domain Specific Languages for Parallel Graph AnalytiX (PGX)Domain Specific Languages for Parallel Graph AnalytiX (PGX)
Domain Specific Languages for Parallel Graph AnalytiX (PGX)
 
Compiler Construction | Lecture 15 | Memory Management
Compiler Construction | Lecture 15 | Memory ManagementCompiler Construction | Lecture 15 | Memory Management
Compiler Construction | Lecture 15 | Memory Management
 
Compiler Construction | Lecture 14 | Interpreters
Compiler Construction | Lecture 14 | InterpretersCompiler Construction | Lecture 14 | Interpreters
Compiler Construction | Lecture 14 | Interpreters
 
Compiler Construction | Lecture 13 | Code Generation
Compiler Construction | Lecture 13 | Code GenerationCompiler Construction | Lecture 13 | Code Generation
Compiler Construction | Lecture 13 | Code Generation
 
Compiler Construction | Lecture 12 | Virtual Machines
Compiler Construction | Lecture 12 | Virtual MachinesCompiler Construction | Lecture 12 | Virtual Machines
Compiler Construction | Lecture 12 | Virtual Machines
 
Compiler Construction | Lecture 11 | Monotone Frameworks
Compiler Construction | Lecture 11 | Monotone FrameworksCompiler Construction | Lecture 11 | Monotone Frameworks
Compiler Construction | Lecture 11 | Monotone Frameworks
 
Compiler Construction | Lecture 10 | Data-Flow Analysis
Compiler Construction | Lecture 10 | Data-Flow AnalysisCompiler Construction | Lecture 10 | Data-Flow Analysis
Compiler Construction | Lecture 10 | Data-Flow Analysis
 
Compiler Construction | Lecture 9 | Constraint Resolution
Compiler Construction | Lecture 9 | Constraint ResolutionCompiler Construction | Lecture 9 | Constraint Resolution
Compiler Construction | Lecture 9 | Constraint Resolution
 
Compiler Construction | Lecture 8 | Type Constraints
Compiler Construction | Lecture 8 | Type ConstraintsCompiler Construction | Lecture 8 | Type Constraints
Compiler Construction | Lecture 8 | Type Constraints
 
Compiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type CheckingCompiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type Checking
 
Compiler Construction | Lecture 6 | Introduction to Static Analysis
Compiler Construction | Lecture 6 | Introduction to Static AnalysisCompiler Construction | Lecture 6 | Introduction to Static Analysis
Compiler Construction | Lecture 6 | Introduction to Static Analysis
 
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingCompiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
 

Kürzlich hochgeladen

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 

Kürzlich hochgeladen (20)

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

Programming languages shape computational thinking

  • 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!
  • 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.
  • 40. “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)
  • 41. 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 ... ...
  • 42. 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
  • 43. Problem Domain GeneralPurpose Language Solution Domain “A programming language is low level when its programs require attention to the irrelevant”. -- Alan Perlis, 1982
  • 44. 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
  • 46. Green-Marl: A DSL for Easy and Efficient Graph Analysis Sungpack Hong, Hassan Chafi, Eric Sedlar, Kunle Olukotun (ASPLOS 2012)
  • 47. 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)
  • 49. Problem Domain DomainSpecific Language Making programming languages is probably very expensive? GeneralPurpose Language Solution Domain
  • 54. 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
  • 55. Language Design Syntax Definition Syntax Definition with SDF3 Name Binding Type System Dynamic Semantics Spoofax Language Workbench Stratego Transformation Language Compiler + Editor (IDE) Transforms
  • 56. Syntax: Phrase Structure of Programs int fib(int n) { if(n <= 1) return 1; else return fib(n - 2) + fib(n - 1); }
  • 57. Syntax: Phrase Structure of Programs int fib ( int if ( n <= return n) { 1) 1 ; else return } fib ( n - 2 ) + fib ( n - 1 ) ;
  • 58. 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 ) ; }
  • 60. 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
  • 61. 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!
  • 62. 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>>
  • 63. Demo: Syntax Definition in the Spoofax Language Workbench
  • 64. 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
  • 65. 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
  • 66. Language Design Syntax Definition Syntax Definition with SDF3 Name Binding Type System Dynamic Semantics Spoofax Language Workbench Stratego Transformation Language Compiler + Editor (IDE) Transforms
  • 67. 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
  • 68. 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
  • 69. 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
  • 70. 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)
  • 71. 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
  • 72. 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
  • 73. 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
  • 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 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
  • 75. 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
  • 76. 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
  • 77. 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
  • 78. Demo: Name Binding in the Spoofax Language Workbench
  • 79. 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
  • 80. 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
  • 81. 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
  • 82. 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
  • 83. 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")) ]
  • 84. 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
  • 86. 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
  • 87. 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, ...
  • 88. ‘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
  • 89. WebLab Programming education in the browser Program in browser Compile on server Automatic grading with unit testing Instructor uses same environment
  • 91. Family Connie Visser Wim Visser Janine Mets Jelle Visser Bente Visser
  • 92. 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
  • 93. 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
  • 94. Sponsors Oracle Labs Philips Research Jacquard, Open Competition, VICI SERC
  • 95. 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