| Why study programming languages? |
| |
- design and implementation of general purpose programming languages
- understand semantics of languages we use
- understand implementations of languages we use
- choose among general purpose languages
- design and implementation of special purpose languages
- language effect the way we think!
- imperative
- functional
- object oriented
- logic (not in this course)
- concurrent / parallel (not in this course)
- meta-linguistic abstraction
| Meta-linguistic abstraction |
| |
Meta-linguistic abstraction is the solution of problems through custom
programming languages.
If you are skilled in the use of meta-linguistic abstraction, and use a
programming language that is suited to this programming paradigm,
the only limits on the way you program are in your head!
To use meta-linguistic abstraction effectively, you must
- know what the standard semantic possibilities are
- know how to implement them
- use a language that provides good support for meta-linguistic
abstraction (makes it easy to implement custom languages)
Scheme is the best language we know of for this purpose.
It provides excellent support for the following means of implementing a
custom language:
- procedural abstraction (with first-class procedures)
- interpreters
- syntactic abstraction (macros)
- compilation
| Approaches to teaching programming languages |
| |
Traditional study of programming language involves
- first a descriptive survey course (organized around languages and/or
principles)
- then one or more courses taking an analytic (formal, precise,
mathematical) approach to the study of programming language semantics,
using a variety of notation and mathematical models
This course is
- analytic from the beginning
- uses a single metalanguage: Scheme
- uses a range of models and levels of abstraction
- from high level (formal semantics) to low level (assembly language), and
- derive the relation between high and low levels.
The meta-language (Scheme)
- plays the role of a variety of mathematical notations
- executable: ideas come alive, everything runs, test knowledge
- use our programming intuition
- programming assignments build mastery of material
- course not about Scheme (cf. goofy syntax in book)
We emphasize essential
- depth of understanding, at cost of breadth
- with solid foundation, can gain breadth by self study
END