1.2 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 9
months, 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 T2 fails now
that we implemented T4? 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 January to September
(and optionally further). Each four 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++
- 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 sense1.
Bjarne Stroustrup's list of C++ Applications mentions Metrowerks
(CodeWarrior), HP, Sun, Intel, M$ as examples.
- Understanding Computers
- Too many students still have a very fuzzy mental picture of what is a
computer, 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.
Voir 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
- 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 (The Design and Evolution of C++):
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.
- Compiler
- The project aims at the implementation of a compiler, but this is
a minor issue. The field of compilers is a wonder 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.