Principles of Programming Languages

339.019 2KV Herbert Prähofer Do 15:30-17:00 HS 19 Start: 7.10.2021

This course covers a wide range of paradigms and concepts of pragramming languages, in particular those beyond Java. The concepts are presented in the context of their historical background, the design decisions behind them, and implementation issues in various programming languages. The students shall get to know a broader spectrum of programming languages, in order to see how specific languages influence not only programming techniques and style, but also in which way they affect how programmers think.

Contents (planned)

  1. Introduction
    - Classification of languages
    - Thinking models
    - History of languages
    - Lambda Calculus
  2. Statements and Expressions
    - Imperative model
    - Functional model
  3. Type System
    - Fundamental concepts and mechanisms
    - Type systems of imperative languages
    - Type systems of object-oriented languages
    - Type systems of functional languages
    - Type extensions
  4. Pattern Matching
  5. Execution Models
    - Strict evaluation
    - Non-strict and lazy evaluation
  6. Macro-Programming and Domain-specific Languages
    - Mocros in Lisp, C and other languages
    - Domain-specific Languages
  7. Logical and Rule-based Languages (Prähofer)
    - Foundations
    - Unification
    - Prolog


The script (collected slides in PDF format) is available to registered students from the KUSSS pages for the course.
See Extended Infos (Erweiterte Infos) / Files (Dateien).


The exam takes place in written form at the end of the term.
For a positive grade, the exercises must be completed as well.


A set of exercise will accompany the lectures. The exercises are integral part of the course.



  • Sebesta, R.W.: Concepts of Programming Languages. 7th ed., Addison-Wesley 2006
  • Maclennan B.J.: Principles of Programming Languages. Oxford University Press, 1999
  • Henning, P.A., Vogelsang H. (Hrsg.): Handbuch Programmiersprachen. Hanser 2007
History Scheme and Common Lisp
  • Harold Abelson, Gerald Jay Sussman: Structure and Interpretation of Computer Programs. 2nd Edition, MIT Press, 1996
  • M. Eisenberg: Programming in Scheme. MIT Press, 1988
  • R. Kent Dybvig: The Scheme Programming Language. 3rd Edition, MIT Press, 2003
  • Patrick H. Winston und Berthold K. Horn: LISP. Addison-Wesley, 1989
  • Peter Norvig: Paradigms of Artificial Intelligence Programming: Case Studies in Common LISP. Morgan Kaufmann, 2001
  • Sonya Keene: Object-Oriented Programming in Common LISP: A Programmer's Guide to Clos. Addison-Wesley, 1989
  • Gregor Kiczales: The Art of the Meta-object Protocol. MIT Press, 1991
Programming Languages
  • M. Odersky, L. Spoon, B. Venners: Programming in Scala, Third edition. artima, 2016
  • D. Jemerov, S. Isakova: Kotlin in Action , Manning, 2017
  • J Blandy, J. Orendorff : Programming Rust , O'Reilly, 2018
  • Simon Thompson: Haskell: The Craft of Functional Programming. Second Edition, Addison-Wesley, 1999
  • Richard Bird: Introduction to Functional Programming using Haskell. 2nd edition, Prentice Hall Press, 1998
  • Graham Hutton: Programming in Haskell. Paperback: 200 pages, Cambridge University Press
  • Paul Hudak: The Haskell School of Expression: Learning Functional Programming through Multimedia. Cambridge University Press, New York, 2000
  • Don Syme, Adam Granicz, Antonio Cisternino: Expert F#. Apress, Berkeley, 2007
  • Meyer, B.: Eiffel - The Language. Prentice Hall 1992
  • Barnes J.G.P.: Programming in Ada 95. Addison-Wesley 1998
  • Wheeler, D.A.: Ada 95 - The Lovelace Tutorial. Springer-Verlag 1997
  • Goldberg A., Robson D.: Smalltalk-80: The Language and Its Implementation, Addison-Wesley 1983
  • Cox B, Novobilski A.: Object-Oriented Programming: An Evolutionary Approach (describes Objective C). Addison-Wesley 1991
  • Stroustrup, B.: The C++ Programming Language. 3rd edition, Addison Wesley 2000
  • Strasser, T.: C++ - Programmieren mit Stil. dpunkt.verlag 2003
  • Hejlsberg, A., Wiltamuth, S., Golde, P.: The C# Programming Language. Addison-Wesley 2004
  • Mössenböck, H.: Softwareentwicklung mit C# 2.0. dpunkt.verlag 2006
Logical Programming
  • William F. Clocksin and Christopher S. Mellish: Programming in Prolog, 4th Edition, Springer-Verlag, 2003.

Online Sources