Principles of Programming Languages

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


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)

  • Part I: Introduction
    • I.1 Introduction and overview
    • I.2 Lambda Calculus

  • Part II: Programming language models and sample languages
    • II.1 Functional model incl. introduction to Lisp and Haskell
    • II.2 Imperative/procedural model incl. development history
    • II.3 Object-oriented model incl. introduction to Scala

  • Part III: Data types and type systems
    • III.1 Data types and type systems of imperative languages
    • III.2 Data types and type systems of object-oriented languages
    • III.3 Data types and type systems of functional languages
    • III.4 Generic types
    • III.5 Type extensions

  • Part IV: Further topics
    • IV.1 Pattern matching
    • IV.2 Lambda expressions and higher-order functions
    • IV.3 Non-strict execution semantics
    • IV.4 Dynamic languages (guest lecture on JavaScript)

  • Part V: Logic and rule-based programming [optional]

Script

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).

Exam

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

Exercises

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

Literature

Books

General
  • 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 Programming Languages
  • Harold Abelson, Gerald Jay Sussman: Structure and Interpretation of Computer Programs. 2nd Edition, MIT Press, 1996
  • M. Eisenberg: Programming in Scheme. MIT Press, 1988
  • Peter Norvig: Paradigms of Artificial Intelligence Programming: Case Studies in Common LISP. Morgan Kaufmann, 2001
  • 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