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:
Tiger is about the only one with which you will live for 7 weeks (14 weeks for the elite who chose Tiger-Backend), with the constant needs to fix errors found in earlier stages.
- Complete Project:
While you were used in your cursus to copy the behavior of a program for your projects, here you will have to rely on the Tiger specifications and given samples. 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 TC-2 fails now that we implemented TC-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. Working as a team and using a good workflow will be mandatory to finish the project in good conditions. Try to make everyone focus on the projet, maybe using techniques like pair or mob programming to distribute the knowledge and make everyone capable of continuing the project. Tiger steps rely on previous ones, do not let some of your mates drop Tiger for a week: you wont see them ever again!
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 . 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 programmers nowadays?
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.