CSE 505 Syllabus
Alan Borning
Autumn 1999
Goals
-
Understand the major concepts in programming languages
-
Gain some experience using advanced features of modern programming languages
-
Learn to use formal semantics as a tool for understanding and describing
language semantics precisely
-
Become aware of current open problems and active research areas in the
design of modern programming languages
-
Understand trade-offs in language design
History & some basic concepts (1 week max)
- Algol-60 and Simula
- Succinct discussion/review of some concepts common to many languages:
scoping;
types; static vs. dynamic typing;
parameter passing
Constraint Programming (3 weeks)
- Issues addressed:
- declarative and relational programming; constraints; constraint
satisfaction
- Languages studied:
- CLP(R), CHR, cc languages, HCLP
- Course work:
- two programming assignments and written homeworks
Functional Programming (2-3 weeks)
- Issues addressed:
- first-class functions; lexical scoping
- programming without side-effects
- polymorphic type systems; type inference; static vs. dynamic typing
- module systems
- lazy evaluation
- continuations
- Languages studied:
- Course work:
- small programming assignments and homework in each language
Object-Oriented Programming (2-3 weeks)
- Issues addressed:
- ADTs; inheritance; subclass polymorphism & dynamic binding
- static type systems; subclassing vs. subtyping
- polymorphic type systems
- other issues:
- single vs. multiple dispatching
- classes vs. prototypes
- Languages studied:
- Smalltalk
- Java and extensions (e.g. Pizza)
- Self, Cecil
- Kaleidoscope
- Course work:
- small programming assignments and homework in 2-3 languages
Formal Semantics (1 week)
- Issues addressed:
- operational semantics; natural semantics
- denotational semantics
- type deduction rules; soundness
- Languages studied:
- Course work:
- one simple homework assignment