Compilers (The Farewell Tour)
Everything you need to follow the course is contained in one handy coursebook, including
- Notes for the lectures.
- Problems for the classes.
- Instructions for the lab exercises.
- Appendices containing extra information about the OCaml language and the Keiko and ARM machines.
- Listings of relevant parts of the compilers used for the lab exercises.
The tutorials and labs
As a Core course, Compilers will be supported by tutorials organised by colleges. There will also be a sequence of four lab exercises, leading up to a practical assessment carried out during the Christmas vacation.
- The tutorial exercises are contained in the coursebook, and for convenience they are also accessible as a separate document on another page.
- Instructions for the labs are also contained in the coursebook, and practical arrangements are set out on their own page.
The burning questions
There is a page of frequently asked questions that contains the answers to all your questions (or will do so shortly after you ask them).
- In addition, a glossary gives definitions of terms used in the course. Feel free to suggest new entries!
The reading list
- The coursebook contains most of what you need to know to follow the course, including notes on the lectures, instructions for the practical exercises, and appendices describing the instruction sets of the Keiko machine and the ARM, together with listings of relevant modules of the lab compilers.
Some other books:
- The book Modern Compiler Implementation in ML by Andrew Appel (Cambridge) is closest to this course, except that the ML dialect he uses is Standard ML, and not OCaml. There are two translations of the book that use respectively Java and C as the implementation language, but in each case something is lost in the translation.
- The classic text Compilers: principles, techniques and tools by Aho, Hopcroft and Ullman (Addison–Wesley). Either the original 1977 edition or the second edition of 2006 (with Monica Lam) will do. I've been referring to the 1977 edition, but as far as I can see, little of the common material has changed in the second edition.
- Although it differs in many details, Richard Bornat's classic book is close to the course in spirit. I recommend it for supplementary reading.
- In later parts of the course, you might like to look at the reference manual for the ARM architecture. (This edition is not the latest, but it is the first to describe the ARMv6 instruction set we shall target. Later editions have become streadily more complicated as they describe more different variants of the ARM.)
Part of the assessment for the course will be a traditional sit-down exam at the end of Trinity Term, but another part is a take-home practical assignment completed over Christmas that counts for 35% of the marks. The assignment will be based on the lab exercises you have completed during the term, so it's vital that you take the maximum advantage of the help offered by demonstrating staff during the term.
- Details of the format of the assignment are still to be finalised, but there's a page with suggestions. The assignment will appear on Friday of Eighth Week.
- To complete the assignment, you will need access to a Linux-based software environment similar to the one we use in the labs. There's a page with suggestions and instructions for how to set this up, with a choice between a real Linux machine, a Linux installation running under VirtualBox, or a Raspberry Pi. It's best to get things set up before you leave Oxford for the vacation: then we can help you to sort out any problems before we are miles apart.