Held: Wednesday, 21 January 2004
Today we begin the course with an overview of the compilation process
and a consideration of the structure of the course.
Related Pages:
Overview:
- What is a compiler
- Why study compilers
- How to study compilers
- Administrative Issues
- I believe in beginning my courses with a short dialog concerning the
topic of study. In particular, I think we should ask ourselves:
- You can find some of my notes on these questions below. However,
this class will develop its own answers to these and related
questions.
- Compilers are programs that translate from one language (typically
a high-level language, like Java, C, or Pascal) to another
(typically a low-level language, like assembler, machine code,
JVM, or C).
- To do this translation, they step through a number of phases,
which we will discuss later (probably Monday).
- The joy of creating a significant computing artifact.
- CS is a field that involves both practice (e.g., programming)
and theory (e.g., CSC341). Compilers are a wonderful
platform
for studying both practice and theory. In fact, compilation
motivated many early theoretical problems.
- Many large programs include their own language. If you are ever
called upon to help design such a language, you can draw upon
these skills.
- Understanding how compilers work may help you program better
(although I strongly discourage you from
coding for the compiler
,
particularly since newer compilation techniques may actually do worse with
programs designed for earlier compilers).
- Compilation involves many important subfields of computer science,
including
- Formal language theory
- Programming language design
- Software design
- Architecture
- Do problems to ensure that we understand the underlying theories.
- Read the code for someone else's compiler.
- Build one.
- There are many of accompanying documents which you can find
through the handouts page.
We will go over these casually.
- As an experiment, we'll be using my experimental course assistant
for some course stuff (e.g., submitting homework).
- Note that the department voted that CSC362 is intended to serve some
of the same purposes as CSC223. Because of this, CSC362 must involve
- at least one public presentation;
- group work; and
- a significant project.
- The significant project is no problem, as any compiler is a pretty
significant project. In fact, it is significant enough that you will
be working on it in groups.
- For public presentations in CSC362, I will ask you to choose a topic
that we have not covered in the course and give a short (20-minute)
presentation. You will have the opportunity to work in groups.
- In addition to group programming and presentation, you will also do
a number of written homeworks (often, simultaneous with the programming
work). You should do those homeworks as individuals, although you may
discuss ideas and answers with each other.
- I'd like to remind you that academic honesty is an important issue
at Grinnell.
- Please don't cheat.
- Please make sure to cite any code you reuse or modify.
- We will be working to write a program that translates from Pascal
to some appropriate low-level language (probably a simulated simple
assembly language (SAL), possibly real x86).
- We should be able to get to the SAL level, but we might also get a
little bit further, depending on interests and background.
- I know that CS362 has seemed overwhelming to students in the past.
I'll be working hard this semester to provide additional resources
(including code).