Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
The Fitness Function For Programming
Languages:A Matter of Taste?
Gilad BrachaSAP Labs
1Tuesday, November 2, 2010
There are two kinds of languages - those that everyone complains about and those that aren’t used- Bjarne Stroustrup
2Tuesday, November 2, 2010
Fitness: Success in the Market?
Turelio
3Tuesday, November 2, 2010
ExamplesC
C++
Java
C#
Visual Basic
Perl
PHP
Javascript4Tuesday, November 2, 2010
Counter-Examples
Lisp
APL
Prolog
Beta
Smalltalk
Self
5Tuesday, November 2, 2010
Today’s Market, or Tomorrow’s?
Faustian Bargain: Success in this life, Oblivion in the hereafter
6Tuesday, November 2, 2010
Academic Criteria
Theory
Implementation
Empirical studies
7Tuesday, November 2, 2010
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.
8Tuesday, November 2, 2010
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.
9Tuesday, November 2, 2010
So is it just Taste?
10Tuesday, November 2, 2010
There is nothing so practical as a good theory- Philip Wadler
11Tuesday, November 2, 2010
Or so rare- Gilad Bracha
12Tuesday, November 2, 2010
How do we Judge a Theory?
Meta-theory?
Implementation?
Popularity?
13Tuesday, November 2, 2010
How do we Judge a Theory?
Consistency, Comprehensiveness
Beauty and elegance
Predictive value
14Tuesday, November 2, 2010
Language can be based on Theory
Relational algebra
Functional programming
Parser combinators
15Tuesday, November 2, 2010
BNF
id = letter (letter | digit) *
Parser Combinators
16Tuesday, November 2, 2010
BNF
id = letter (letter | digit) *
Newspeak
id = letter, (letter | digit) star.
Parser Combinators
17Tuesday, November 2, 2010
BNF
id = letter (letter | digit) *
Newspeak
id = letter, (letter | digit) star.
Javanese
id = letter().seq(letter().or(digit()).star());
Parser Combinators
18Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
19Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
20Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
21Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
22Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
23Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
24Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
25Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
26Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
27Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
28Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
letter
29Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
letter
30Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
digitletter
31Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter
|
digitletter
32Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter star
|
digitletter
33Tuesday, November 2, 2010
How it Works id = letter, (letter | digit) star.
letter star
|
digitletter
,
34Tuesday, November 2, 2010
Why is this Pretty?
id = letter, (letter | digit) star.
35Tuesday, November 2, 2010
Why is this Ugly?
id = letter().seq(letter().or(digit()).star());
36Tuesday, November 2, 2010
Why is this Ugly?
id = letter().seq(letter().or(digit()).star());
vs.
id = letter (letter | digit) *
vs.
id = letter, (letter | digit) star.
37Tuesday, November 2, 2010
Why is this Ugly?
id = letter().seq(letter().or(digit()).star());
vs.
id = letter (letter | digit) *
vs.
id = letter, (letter | digit) star.
38Tuesday, November 2, 2010
Why is it Ugly?
A programming language is low level when its programs require attention to the irrelevant
- Alan Perlis
39Tuesday, November 2, 2010
Compositionality
Uniform space of values
Operators that map this space into itself
Small core is a basis for infinite space
40Tuesday, November 2, 2010
Pattern Matching
Joint work with Felix Geller and Robert Hirschfeld at HPI, University of Potsdam
41Tuesday, November 2, 2010
Pattern Literals
<1><ʻaʼ><_><num: n><multiply: left by: right>
42Tuesday, November 2, 2010
Pattern Combinators
p1 | p2p1 & p2p1 >> p2p => actionBlockp not
43Tuesday, November 2, 2010
Pattern Combinatorsin Action
fib: n = (n case: <1> | <2> => [^n-1] otherwise:[^(fib: n-2) + (fib: n-1)]
)
44Tuesday, November 2, 2010
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. ) )
45Tuesday, November 2, 2010
Pattern Matching
simplify: expr = ( ^expr case: <multiply: ?x by: <num: 1>> => [x]
otherwise: [expr].)
46Tuesday, November 2, 2010
Higher Order Patterns in Action
simplify: expr = ( ^expr case: <multiply: ?x by: <num: 1>> => [x]
otherwise: [expr].)
47Tuesday, November 2, 2010
Language can be based on Theory
But, more importantly
48Tuesday, November 2, 2010
Language may be the Theory
APL: Vectors
Beta: Patterns
Smalltalk, Self : Objects
49Tuesday, November 2, 2010
Programs are Models; Languages are Theories for building Programs
50Tuesday, November 2, 2010
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 program51Tuesday, November 2, 2010
Good Aesthetics makes Good Software
52Tuesday, November 2, 2010
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
53Tuesday, November 2, 2010