unit -*- Outline -*- * introduction motivation for the course * designing-a-langauge we design a language together basic parts of a langauge: computation, abstraction, combination * Functional programming (in Scheme) ** basics basic concepts, tools for writing symbolic programs (Little Schemer, SICP 1) ** syntax-abstraction syntactic sugars, more of Scheme ** induction-recursion induction and recursion in programming (EOPL 1.1-1.2) ** scope scope, lambda calculus, lexical addresses (EOPL 1.3) ** data-abstraction data abstraction, inductive data (EOPL 2.1-2.2.1) abstract syntax (EOPL 2.2.2) alternative representations of data (EOPL 2.3) ** programming-help ideas to help make writing programs go faster * Language Essentials ** interpreters simple interpreters (EOPL 3.1) front ends (EOPL 3.2), conditionals (EOPL 3.3) local bindings (EOPL 3.4) procedures and closures (EOPL 3.5) recursion (EOPL 3.6) variable assignment (EOPL 3.7) statements (EOPL 3.9) ** parameters call by value, call by reference, lazy evaluation (EOPL 3.8) ** aop aspect-oriented programming, used in Spring 2004 ** types typed langauges, typing rules (EOPL 4.1), type checking (EOPL 4.2), enforcing data abstraction (EOPL 4.3) type inference (EOPL 4.4) ** object-oriented class and objects, inheritance, implementations (EOPL 5) ** oo-types types for OO languages, a type checker (EOPL 6) * summary-review summary of course, course evaluations