School of Informatics - 2021/22

Course Information

Content

  • Item

    Course Summary

    Compiling Techniques (CT) is a 20 credit course at Level 10, normally taken in Year 3. It runs in Semester 2. There is no exam for this course, the course mark is based 100% on coursework. The University descriptor is here.
  • Item

    Lecturers

    The lecture is given jointly by two lecturers:
  • Item

    Course Outline

    The primary aim of this course is to learn how programming languages are "compiled" (translated) into machine code. We will develop the necessary background by directly applying the lecture content while automating the translation of a simple programming language, e.g., a typed subset of python, into RISC-V assembly code.
    In the process, we will get to know:
    * The overall structure of a compiler
    * How to translate text into a structured program representation (an abstract syntax tree)
    * How to detect and report mistakes a programmer may have made while writing the program.
    * Which program representations are best suited to understand and transform a program, e.g. to optimize its performance.
    * How to generate efficient assembly code from an internal program representation

    This class will teach the theoretical foundations of compilation in a modern and interactive environment that uses state-of-the-art open-source software to enable students to build their theoretical foundations in a practically relevant and accessible environment. Programming assignments will likely use Python, GitHub, as well as Jupyter Notebooks.
  • Item

    Timetable

    If you are looking for your class times for this course, these can be found via your University of Edinburgh calendar (links provided below):
  • Item

    Informatics Teaching Organisation: Information for Students

    You can also email the Informatics Teaching Organisation (ITO) at ito@inf.ed.ac.uk  or the Student Support Team (SST) at inf-sst@inf.ed.ac.uk.
  • Item

    Learning Outcomes

    On successful completion of this course, you should be able to:
    1. Understand how programming languages and hardware interact in practice.
    2. Understand how state-of-the-art open-source compilers such as clang/LLVM as well as domain-specific languages (e.g., Tensorflow, PyTorch) work.
    3. Build your own or extend an existing compiler
    4. Understand how to optimize the performance of your program manually or automatically.