Computer Laboratory – Course pages 2011–12: Concepts in Programming Languages Skip to content | Access key help Search Advanced search A–Z Contact us Computer Laboratory Computer Laboratory Teaching Courses 2011–12 Concepts in Programming Languages Algorithms II Computer Design Concurrent and Distributed Systems ECAD and Architecture Practical Classes Further Java Logic and Proof Mathematical Methods for Computer Science Programming in C and C++ Prolog Semantics of Programming Languages Software Engineering Unix Tools Compiler Construction Complexity Theory Computation Theory Computer Graphics and Image Processing Computer Networking Databases Artificial Intelligence I Concepts in Programming Languages Economics and Law Security I Course pages 2011–12 Concepts in Programming Languages Syllabus Course materials Information for supervisors Principal lecturer: Prof Alan Mycroft Taken by: Part IB Past exam questions: Concepts in Programming Languages, Comparative Programming Languages Information for supervisors (contact lecturer for access permission) No. of lectures: 8 Prerequisite courses: None. 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 standardization. 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) and Pascal (1970). Block structure. Parameters and parameter passing. Stack and heap storage. Data types. Arrays and pointers. Object-oriented languages -- Concepts and origins: Simula (1964-67) and Smalltalk (1971-80). Dynamic lookup. Abstraction. Subtyping. Inheritance. Object models. Types. Types in programming languages. Type systems. Type safety. Type checking and type inference. Polymorphism. Overloading. Type equivalence. Data abstraction and modularity: SML Modules (1984-97). Information hiding. Modularity. Signatures, structures, and functors. Sharing. The state of the art: Scala (2004-06). Procedural and declarative aspects. Blocks and functions. Classes and objects. Generic types and methods. Variance annotations. Mixin-class composition. 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. * Scott, M.L. (2009). Programming language pragmatics. Morgan Kaufmann. Odersky, M. (2008). Scala by example. Programming Methods Laboratory, EPFL. 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. Kernighan, 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. Landin, P.J. (1966). The next 700 programming languages. Communications of the ACM, Vol. 9, Issue 3. Odersky, M. et al. (2006). An overview of the Scala programming language. Technical Report LAMP-REPORT-2006-001, Second Edition. 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 1st European Software Festival. © 2011 Computer Laboratory, University of Cambridge Information provided by Prof Alan Mycroft