Why the Tiger Project¶
This project is quite different from most other Epita projects, and has aims at several different goals, in different areas:
- Several iterations:
This project is about the only one with which you will live for 4 months (6 months for the brave ones), with the constant needs to fix errors found in earlier stages.
- Complete Project:
While the evaluation of most student projects is based on the code, this project restores the deserved emphasis on documentation and testing. Because of the duration of the project, you will value the importance of a good (developer’s) documentation (why did we write this 4 months ago?), and of a good test suite (why does Tiger-2 fails now that we implemented Tiger-4? When did we break it?).
This also means that you have to design a test suite, and maintain it through out the project. The test suite is an integral part of the project.
- Team Management:
The Tiger Compiler is a long project, running from February to May (and optionally further). Each three person team is likely to experience nasty “human problems”. This is explicitly a part of the project: the team management is a task you have to address. That may well include exclusion of lazy members.
C++ is by no means an adequate language to study compilers (C would be even worse). Languages such as Haskell, Ocaml, Stratego are much better suited (actually the latter is even designed to this end). But, as already said, the primary goal is not to learn how to write a compiler: for an epita student, learning C++, Design Patterns, and Object Oriented Design is much more important.
Note, however, that implementing an industrial strength compiler in C++ makes a lot of sense 1. Bjarne Stroustrup’s list of C++ Applications mentions GCC, The GNU Compiler Collection, Clang, A C language family front end for LLVM and LLVM, Metrowerks (CodeWarrior), hp, Sun, Intel, M$ as examples.
- Understanding Computers:
Too many students still have a very fuzzy mental picture of what a computer is, and how a program runs. Studying compilers helps understanding how it works, and therefore how to perform a good job. Although most students will never be asked to write a single line of assembly during their whole lives, knowing assembly is also of help. See Bjarne Stroustrup, for instance, says:
- Q: What is your opinion, is knowing assembly language useful for
- BS: It is useful to understand how machines work and knowing assembler
is almost essential for that.
English is the language for this project, starting with this very document, written by a French person, for French students. You cannot be a good computer scientist with absolutely no fluency in English. The following quote is from Bjarne Stroustrup, who is danish (See The Design and Evolution of C++, 126.96.36.199 Extended Character Sets):
English has an important role as a common language for programmers, and I suspect that it would be unwise to abandon that without serious consideration.
Any attempt to break the importance of English is wrong. For instance, do not translate this document nor any other. Ask support to the Yakas, or to the English team. By the past, some oral and written examinations were made in English. It may well be back some day. Some books will help you to improve your English, see The Elements of Style.
The project aims at the implementation of a compiler, but this is a minor issue. The field of compilers is a wonderful place where most of computer science is concentrated, that’s why this topic is extremely convenient as long term project. But it is not the major goal, the full list of all these items is.
The Tiger project is not unique in these regards, see Cool - The Classroom Object-Oriented Compiler, for instance, with many strikingly similar goals, and some profound differences. See also Making Compiler Design Relevant for Students who will (Most Likely) Never Design a Compiler, for an explanation of why compilation techniques have a broader influence than they seem.
The fact that the compiler compiles C++ is virtually irrelevant.