Study abroad in Edinburgh

Course finder

Semester 1

Elements of Programming Languages (INFR10061)

Course Website







Normal Year Taken


Delivery Session Year



Course Summary

Programming languages are unique forms of communication that play a dual role: not only as ways for programmers to instruct machines, but as ways for programmers to talk to each other about computation. Paradoxically, they are among the most permanent features of the computing landscape (Fortran, for example, is still widely used 60 years since its invention), and among the most energetic and innovative, with new programming languages introduced every few months, often aiming to simplify Web programming, parallel, or distributed computing.Although few computer scientists will ever design a new, general-purpose language like Java or C++, all computer scientists need the ability to learn new languages quickly, recognise and use (or avoid misusing) common language features, and even design new domain-specific languages for restricted problem domains. The design of programming languages involves many subtle choices and tradeoffs among performance, convenience, and elegance. This course covers the essential programming structures for managing data and controlling computation, as well as abstractions that facilitate decomposing large systems into modules. The course also covers pragmatics of programming languages, including abstract syntax, interpretation and domain-specific language implementation. You will not learn how to use any one language, but instead you will learn the basic elements you need to understand the next 700 programming languages, or even design your own.

Course Description

* Abstract syntax and name-binding; Lexical vs. dynamic scope* Modelling programming language features using inference rules* Interpreters as a way of defining and exploring language features* Domain specific languages, translators, and pragmatics of language processing* A selection of topics illustrated by case studies from current or historically important language designs: - data structures: pairs/record types; variant/union types; recursion - abstracting data: overloading; generics; ad hoc vs. parametric polymorphism - control structures: goto, loops, case/switch, exceptions - abstracting control: procedure call/return; function types; continuations - design dimensions: eager vs. lazy evaluation; purity vs. side-effects; state - object-oriented features: objects, classes, interfaces, subtyping, (multiple) inheritance* Advanced topics/guest lectures on concurrent, parallel, distributed programming, security, or verification (linking to UG4 year courses)

Assessment Information

Written Exam 75%, Coursework 25%, Practical Exam 0%

Additional Assessment Information

2 pieces of assessment for formative feedback, which will feed into assessed coursework.1 piece of assessed coursework (25%).1 exam (75%).

view the timetable and further details for this course


All course information obtained from this visiting student course finder should be regarded as provisional. We cannot guarantee that places will be available for any particular course. For more information, please see the visiting student disclaimer:

Visiting student disclaimer