Course Outline

Programming Languages are regarded by many as the crowning achievement of the discipline of Computer Science. No wonder, since almost all of the subfields of Computer Science are involved in language design and implementation. In addition, a large part of computer science can be viewed as an engineering discipline that tries to create software artifacts. These “software artifacts” are built using computer languages, much in the way that literature is “built” using natural languages. The language thus becomes the primary tool of the computer scientist's trade. Knowing what your tools are capable of is of primary importance in software construction.

This course aim at providing an overview of the principles on which programming languages are built. You have undoubtedly seen at least one (and probably two or even more) programming languages. Chances are, they are all similar, coming from a particular programming paradigm called imperative programming. Special emphasis will therefore be given to the other two mainstream programming paradigms (namely, functional and logic programming).

The main objectives of the course thus are to introduce the paradigms, features and methods of definition of modern programming languages, to provide the student with the necessary tools for the critical evaluation of existing and future programming languages and programming language constructs, and to provide an understanding of the formal methods used in the definition of languages.

We base the course on the following however tentative schedule:

Introduction; history and evolution of major programming languages (1 week)
An introduction to functional programming using Haskell (3 weeks)
An introduction to logic programming using Prolog (2 weeks)
Formal description of programming languages
  • Syntax (BNF, EBNF, diagrams)
  • Semantics (abstract machine, lambda calculus)
(2 weeks)
The compilation process (recursive descent) (1 week)
A more in-depth look at the procedural paradigm
  • Primitive data types
  • Variables (names, binding, type checking, strong typing, scope, lifetime)
  • Modelling objects (storage, modification, pointers, storage management)
  • Subprograms and parameters (arguments, parameter passing, higher order functions)
(3 weeks)