Computing Science (faster route) BSc/MSci
Programming Languages (H) COMPSCI4016
- Academic Session: 2025-26
- School: School of Computing Science
- Credits: 10
- Level: Level 4 (SCQF level 10)
- Typically Offered: Semester 2
- Available to Visiting Students: Yes
- Collaborative Online International Learning: No
- Curriculum For Life: No
Short Description
This course covers the design and implementation of programming languages, introducing techniques for formally specifying the design of programming languages (BNF grammars, typing rules, and operational semantics), metatheory (type soundness), and techniques for implementing typecheckers, interpreters, and code generators for a representative set of core programming languages.
Timetable
In-person delivery. Two one-hour lectures and a one-hour lab each week.
Excluded Courses
None
Co-requisites
None
Assessment
Examination 70%, programming assignment 25%, weekly quizzes 5%.
Main Assessment In: April/May
Are reassessment opportunities available for all summative assessments? Not applicable
Reassessments are normally available for all courses, except those which contribute to the Honours classification. For non Honours courses, students are offered reassessment in all or any of the components of assessment if the satisfactory (threshold) grade for the overall course is not achieved at the first attempt. This is normally grade D3 for undergraduate students and grade C3 for postgraduate students. Exceptionally it may not be possible to offer reassessment of some coursework items, in which case the mark achieved at the first attempt will be counted towards the final course grade. Any such exceptions for this course are described below.
The coursework cannot be redone because the feedback provided to the students after the original coursework would give any students redoing the coursework an unfair advantage.
Course Aims
This course aims to introduce students to the concepts behind the design of programming languages in a variety of different paradigms (e.g., functional, object-oriented, and imperative), and to equip students with the tools needed to design and implement a programming language. Students will learn how to read and write formal descriptions of programming languages, including rigorous treatments of functions, variable binding, scoping, and variable substitution. Based on the formal descriptions, students will learn how to implement a typechecker, interpreter, and code generator for various representative core programming languages, and understand how the property of type soundness ensures that a program will not produce errors when it is run.
After completing the course, students should be prepared to undertake project work in programming language design and implementation.
Intended Learning Outcomes of Course
By the end of the course students will be able to:
1. Formalise a programming language design using formal notation such as BNF grammars, typing rules, and operational semantics.
2. Implement a typechecker, interpreter, and code generator from a formal specification of a programming language.
3. Critique the design of a programming language with respect to properties such as type soundness and expressiveness.
Minimum Requirement for Award of Credits
Students must submit at least 75% by weight of the component (including examinations) of the course's summative assessment.