home search a-z help
University of Cambridge Computer Laboratory
Computer Science Syllabus - Concepts in Programming Languages
Computer Laboratory > Computer Science Syllabus - Concepts in Programming Languages

Concepts in Programming Languages next up previous contents
Next: Digital Communication I Up: Lent Term 2007: Part Previous: Computer Graphics and Image   Contents


Concepts in Programming Languages

Lecturer: Dr M.P. Fiore

No. of lectures: 8

Aims

The general aim of this course is to provide an overview of the basic concepts that appear in modern programming languages, the principles that underlie the design of programming languages, and their interaction.

Lectures

  • Introduction, motivation, and overview. What is a programming language? Application domains in language design. Program execution models. Theoretical foundations. Language standardisation. History.

  • The first procedural language: FORTRAN (1954-58). Execution model. Data types. Control structures. Storage. Subroutines and functions. Parameter passing.

  • The first declarative language: LISP (1958-62). Expressions, statements, and declarations. S-expressions and lists. Recursion. Static and dynamic scope. Abstract machine. Garbage collection. Programs as data. Parameter passing. Strict and lazy evaluation.

  • Block-structured procedural languages: Algol (1958-68), BCPL (1967), Pascal (1970), C (1971-78). Block structure. Parameters and parameter passing. Stack and heap storage. Data types. Arrays and pointers.

  • Object-oriented languages -- Concepts and origins: Simula (1964-67), Smalltalk (1971-80). Dynamic lookup. Abstraction. Subtyping. Inheritance. Object models.

  • Types, data abstraction, and modularity: C++ (1983-98), SML (1984-97). Types in programming. Type systems. Type checking and type inference. Polymorphism. Overloading. Type equivalence. Information hiding. Modularity. SML module system: signatures, structures, and functors. [2 lectures]

  • State of the art.

Objectives

At the end of the course students should

  • be familiar with several language paradigms and how they relate to different application domains

  • understand the design space of programming languages, including concepts and constructs from past languages as well as those that may be used in the future

  • develop a critical understanding of the programming languages that we use by being able to identify and compare the same concept as it appears in different languages

Recommended reading

Books:

* Mitchell, J.C. (2003). Concepts in programming languages. Cambridge University Press.
* Pratt, T.W. & Zelkowitz, M.V. (2001). Programming languages: design and implementation. Prentice Hall.

Papers:

Kay, A.C. (1993). The early history of Smalltalk. ACM SIGPLAN Notices, Vol. 28, No. 3.
Kerninghan, B. (1981). Why Pascal is not my favorite programming language. AT&T Bell Laboratories. Computing Science Technical Report No. 100.
Koenig, A. (1994). An anecdote about ML type inference. USENIX Symposium on Very High Level Languages.
McCarthy, J. (1960). Recursive functions of symbolic expressions and their computation by machine. Communications of the ACM, 3(4):184-195.
Stroustrup, B. (1991). What is Object-Oriented Programming? (1991 revised version). Proceedings 1$^\mathrm{st}$ European Software Festival.



next up previous contents
Next: Digital Communication I Up: Lent Term 2007: Part Previous: Computer Graphics and Image   Contents
Christine Northeast
Tue Sep 12 09:56:33 BST 2006