The Fitness Function For Programming Languages:

The Fitness Function
For Programming
Languages:
A Matter of Taste?
Gilad Bracha
SAP Labs
Tuesday, November 2, 2010
1
There are two kinds
of languages - those
that everyone
complains about and
those that aren’t
used
- Bjarne Stroustrup
Tuesday, November 2, 2010
2
Fitness: Success in the
Market?
Turelio
Tuesday, November 2, 2010
3
Examples
C
C++
Java
C#
Visual Basic
Perl
PHP
Javascript
Tuesday, November 2, 2010
4
Counter-Examples
Lisp
APL
Prolog
Beta
Smalltalk
Self
Tuesday, November 2, 2010
5
Today’s Market, or
Tomorrow’s?
Faustian Bargain: Success in this life, Oblivion
in the hereafter
Tuesday, November 2, 2010
6
Academic Criteria
Theory
Implementation
Empirical studies
Tuesday, November 2, 2010
7
What if Smalltalk was
Invented Today?
Jonathan Edwards:
Reviewer 1 comments: You propose three new
language features: encapsulation, polymorphism,
and inheritance. Even though your paper was the
maximum 12 pages, it discussed each of these
concepts only informally, and did not do any
rigorous evaluation.
Tuesday, November 2, 2010
8
What if Smalltalk was
Invented Today?
Reviewer 2 comments: You claim that object
orientation is in some sense more natural and
intuitive than procedural programming, but
offer only anecdotes and hand-picked
examples as justification.
Tuesday, November 2, 2010
9
So is it just Taste?
Tuesday, November 2, 2010
10
There is nothing so
practical as a good
theory
- Philip Wadler
Tuesday, November 2, 2010
11
Or so rare
- Gilad Bracha
Tuesday, November 2, 2010
12
How do we Judge a
Theory?
Meta-theory?
Implementation?
Popularity?
Tuesday, November 2, 2010
13
How do we Judge a
Theory?
Consistency, Comprehensiveness
Beauty and elegance
Predictive value
Tuesday, November 2, 2010
14
Language can be based
on Theory
Relational algebra
Functional programming
Parser combinators
Tuesday, November 2, 2010
15
Parser Combinators
BNF
id = letter (letter | digit) *
Tuesday, November 2, 2010
16
Parser Combinators
BNF
id = letter (letter | digit) *
Newspeak
id = letter, (letter | digit) star.
Tuesday, November 2, 2010
17
Parser Combinators
BNF
id = letter (letter | digit) *
Newspeak
id = letter, (letter | digit) star.
Javanese
id = letter().seq(letter().or(digit()).star());
Tuesday, November 2, 2010
18
How it Works
id = letter, (letter | digit) star.
Tuesday, November 2, 2010
19
How it Works
id = letter, (letter | digit) star.
Tuesday, November 2, 2010
20
How it Works
id = letter, (letter | digit) star.
Tuesday, November 2, 2010
21
How it Works
id = letter, (letter | digit) star.
Tuesday, November 2, 2010
22
How it Works
id = letter, (letter | digit) star.
letter
Tuesday, November 2, 2010
23
How it Works
id = letter, (letter | digit) star.
letter
Tuesday, November 2, 2010
24
How it Works
id = letter, (letter | digit) star.
letter
Tuesday, November 2, 2010
25
How it Works
id = letter, (letter | digit) star.
letter
Tuesday, November 2, 2010
26
How it Works
id = letter, (letter | digit) star.
letter
Tuesday, November 2, 2010
27
How it Works
id = letter, (letter | digit) star.
letter
Tuesday, November 2, 2010
28
How it Works
id = letter, (letter | digit) star.
letter
letter
Tuesday, November 2, 2010
29
How it Works
id = letter, (letter | digit) star.
letter
letter
Tuesday, November 2, 2010
30
How it Works
id = letter, (letter | digit) star.
letter
letter
Tuesday, November 2, 2010
digit
31
How it Works
id = letter, (letter | digit) star.
letter
|
letter
Tuesday, November 2, 2010
digit
32
How it Works
id = letter, (letter | digit) star.
letter
star
|
letter
Tuesday, November 2, 2010
digit
33
How it Works
id = letter, (letter | digit) star.
,
letter
star
|
letter
Tuesday, November 2, 2010
digit
34
Why is this Pretty?
id = letter, (letter | digit) star.
Tuesday, November 2, 2010
35
Why is this Ugly?
id = letter().seq(letter().or(digit()).star());
Tuesday, November 2, 2010
36
Why is this Ugly?
id = letter().seq(letter().or(digit()).star());
vs.
id = letter (letter | digit) *
vs.
id = letter, (letter | digit) star.
Tuesday, November 2, 2010
37
Why is this Ugly?
id = letter().seq(letter().or(digit()).star());
vs.
id = letter (letter | digit) *
vs.
id = letter, (letter | digit) star.
Tuesday, November 2, 2010
38
Why is it Ugly?
A programming language is low level when its
programs require attention to the irrelevant
- Alan Perlis
Tuesday, November 2, 2010
39
Compositionality
Uniform space of values
Operators that map this space into itself
Small core is a basis for infinite space
Tuesday, November 2, 2010
40
Pattern Matching
Joint work with Felix Geller and Robert
Hirschfeld at HPI, University of Potsdam
Tuesday, November 2, 2010
41
Pattern Literals
<1>
<ʻaʼ>
<_>
<num: n>
<multiply: left by: right>
Tuesday, November 2, 2010
42
Pattern Combinators
p1 | p2
p1 & p2
p1 >> p2
p => actionBlock
p not
Tuesday, November 2, 2010
43
Pattern Combinators
in Action
fib: n = (
n case: <1> | <2> => [^n-1]
otherwise:[^(fib: n-2) + (fib: n-1)]
)
Tuesday, November 2, 2010
44
Pattern Matching
class Term = ()()
class Num of: n = Term ( | val = n. | )
( match: pat = ( ^pat num: val. ))
class Var named: n = Term ( | name = n. | )
( match: pat = ( ^pat var: name. ) )
class Product of: n by: m = Term ( | left = n. right = m. | )
( match: pat = ( ^pat multiply: left by: right. ) )
Tuesday, November 2, 2010
45
Pattern Matching
simplify: expr = (
^expr case: <multiply: ?x by: <num: 1>> => [x]
otherwise: [expr].
)
Tuesday, November 2, 2010
46
Higher Order Patterns in
Action
simplify: expr = (
^expr case: <multiply: ?x by: <num: 1>> => [x]
otherwise: [expr].
)
Tuesday, November 2, 2010
47
Language can be based
on Theory
But, more importantly
Tuesday, November 2, 2010
48
Language may be the
Theory
APL: Vectors
Beta: Patterns
Smalltalk, Self : Objects
Tuesday, November 2, 2010
49
Programs are
Models; Languages
are Theories for
building Programs
Tuesday, November 2, 2010
50
Judge Languages as
Theories
Consistency
Comprehensiveness- does it model what I
want? How easily and how accurately
Beautiful/Elegant (compositional)
Predictive value
Can easily can I tell
What a program does
How hard it is to build a program
Tuesday, November 2, 2010
51
Good Aesthetics
makes Good
Software
Tuesday, November 2, 2010
52
This file is licensed under the Creative Commons
Attribution ShareAlike 3.0 License. In short: you are
free to share and make derivative works of the file
under the conditions that you appropriately attribute
it, and that you distribute it only under a license
identical to this one. Official license.
The Newspeak eye
used in the bullets, slide
background etc. was designed by Victoria Bracha
and is used by permission.
The image on slide 3 is by Turelio licensed under
CC-BY-SA-2.5 and originates on wikimedia
Tuesday, November 2, 2010
53