Concepts in Programming Languages Past Paper
I. Introduction and motivation
- design, methods, paradigms; Foundations; Standardisation.
- y2006p6q7 (a)
- motivating application domains, abstract machines, theoretical understanding
- y2012p3q6 (a)
- Execution models (abstract machines)
- Storage allocation and deallocation
- y2015p3q5 (a, b)
- Programming-language concepts, innovations, influences
- y2007p6q7 (b,c)
- Parameter passing, value, reference, value/result, name
- Aliasing
II. FORTRAN: Sequential procedural language
III. LISP: Declarative, Functions, recursion, and lists
IV. Algol, Pascal: Block-structured procedural languages
V. SIMULA, Smalltalk: Object-oriented languages
- Subtyping vs. inheritance; SIMULA; Classes, objects and activation records; Subclasses and inheritance; Smalltalk; Dynabook; Syntax; Abstraction; Messages; Methods; Instance variables; Interfaces as types; Subtyping.
- y2010p3q5 (b), y2013p3q6 (a.ii)
- y2011p3q6 (a.i)
- Algol and SIMULA, LISP and Smalltalk
- y2008p5q7 (c)
- Objects in SML (see SML module)
- y2006p6q7 (d)
- Dynamic lookup; Abstraction; Subtyping; Inheritance
- y2007p6q7 (d)
- SIMULA, Type checking and subtyping
- y2012p3q6 (f)
- Abstraction,
private
weakened by pointer / reflection
VI. Types
- Type checking in SML; Type equality; Type declarations; let-polymorphism;
- y2020p7q1 (a,b)
- y2009p3q2 (b)
- weakness of type system in any languages
- y2012p3q6 (b)
- y2015p3q5 (d,e)
- y2008p5q7 (b)
- static vs dynamic scoping, early LISP
- static vs dynamic type checking
- type-safe and counterexample
- y2020p7q1 (b.i, c)
- Type checking, static vs dynamic, Java
- y2010p3q5 (c)
- Type checking vs Type inference
- y2011p3q6 (b), y2013p3q6 (c)
- Type inference in SML, constraint
- y2012p3q6 (e)
- Type safety and counterexample
- Polymorphism in ML
- y2022p7q1 (c)
- y2018p7q1 (b)
- y2014p3q6 (c)
- y2021p7q1 (a)
- y2016p3q5 (d, e)
- y2019p7q1 (c)
- Java covariant arrays, invariant Generics
- y2015p3q5 (e, f)
VII. Scripting Languages – JavaScript
- Browser integration
- e.g.,
- “Scripting languages and dynamically typed languages are identical; discuss”
- “Discuss the notion of ‘class’ in relation to JavaScript”
- y2022p7q1 (d)
- JavaScript; Prototypal inheritance;
VIII. Data abstraction and modularity – SML Modules
IX. Concurrency, parallelism
- Theoretical models ; Programming-language support for parallelism and distribution. Internal and external iteration.
- y2014p3q6 (b)
- Threads, shared memory, message passing; Distributed memory, multi-core, cloud computing
X. Functional-style meets OOP
XI. Miscellaneous concepts