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
© Copyright 2026 Paperzz