|
Overview
Goals of this course:
- Better understanding of programming languages
- Which concepts are essential?
- Which are ephemeral?
- How can fundamental concepts encode derived ones?
- Better understanding of programming
- Fundamental composition principles
- Language as a means of abstraction
- Interpreters and compilers
- Better understanding of definitions of programming languages
- Which things can/should be formalized
- What techniques are available for formalization
- Overall: Increased competence as a programmer, language
implementor, library and language designer
The course is organized in three streams:
- Theory: Syntax and Semantics of Programming Languages
- Applications: Core languages which illustrate essential
concepts: Funnel and Oz
- Practice: Programming Examples, Interpreters
References:
Time Table
Week | Theory | Application | Practical Work |
1 |
Deduction Systems, Lambda Calculus |
Functional Funnel |
Using Funnel |
2 |
Lambda examples, Church encodings |
Combinators |
Combinators |
3 |
Operational Equivalence, Lambda-V |
Algebras |
Lambda Interpreter |
4 |
Join Calculus |
Join -> Funnel |
Lambda Interpreter |
5 |
CPS-Transform, Bisimulation |
Variables and Objects |
Lambda Interpreter |
6 |
Axiomatic Semantics |
Program Verification |
Exercises |
7 |
Axiomatic Semantics |
Program Verification |
Exercises |
8 |
Type Systems |
Synchronization |
Typechecker |
9 |
Subtyping, Genericity |
Sequences, Iterators |
Typechecker |
10 |
Type Inference |
Encoding Classes |
Encoding Classes |
11 |
Introduction to Logic Programming |
Examples |
Exercises |
12 |
Meta-Logic Programming |
Constraint Domains and Applications |
Exercises |
13 |
Constraint Handling Rules |
Constraint Handling Rules |
Exercises |
14 |
Concurrent Constraint Programming |
The Mozart Programming Environment |
OZ |
Schedule
Lectures: |
Tuesday 10:00-13:00, room IN010 |
Tutorials: |
Thursday 10:00-13:00, room INR319
|
Here are the final versions of the hand-outs for the last four weeks of the lecture:
Tutorials
Here are the slides to the tutorials on Thursdays:
Exercises:
Frameworks:
Contacts
- Martin Odersky,
Programming Methods Laboratory
martin.odersky@epfl.ch, INR 329,
tel. +41 21 693 6863
- Giovanni Coray,
Computer Science Theory Laboratory
giovanni.coray@epfl.ch, INF 340,
tel. +41 21 693 2572
- Vincenzo Pallotta,
Computer Science Theory Laboratory
pallotta@di.epfl.ch, INF 326,
tel. +41 21 693 5297
- Matthias Zenger,
Programming Methods Laboratory
matthias.zenger@epfl.ch, INR 321,
tel. +41 21 693 6864
Related Links
|