Architecture and Compilers

About the course

This is the homepage for CS 353: Architecture and Compilers, a course offered by Fritz Ruehr at the Computer Science Department of Willamette University.

Learning to program in Java can be fun and empowering, but it may still leave you mystified about how computers really work: what are the components of a physical computer? How does the computer "know" what to do when it runs a Java program? What connects abstract ideas like objects and methods to the silicon hardware?

This hybrid course in computer architecture and high-level language processing (compilers) will provide you with the answers to these questions. The course is a "soup-to-nuts" overview of the various levels of structure embodied in a physical computer, as well as the various stages by which high-level languages are translated into a form which the computer can directly execute. In traditional curricula, these two topics are often covered in separate courses—we have combined them into a single comprehensive overview in order to expedite Willamette's pedagogical goals.

We will start our journey with basic facts about binary encodings, how they are used to represent data and how logical operations can be used to transform these data. We will then see how basic electrical components called gates can be used to realize these operations on digital signals, and how they can be combined into circuits which will implement more complex processes. Finally, we will see how these circuits are used to build higher-level components which constitute a typical computer, and how digital data stored inside the computer can be used to control its operation. In the second phase of our studies, we will start with the strings of characters which comprise a program file, and see how it can be analyzed in successive stages until the internal structure of the program is exposed. We will then see how this internal structure can be translated into the low-level codes which a computer can execute, in a way which respects the meanings of the original program. Finally, as time permits, we will survey a few important concepts which inform the design of high-level languages both like and unlike Java.

News

Labs (in chron. order) NB: I am updating the due dates for this year as we go!

Some useful resources, etc.

Some information about C and other miscellanea

Topical references (in chron. order)

We won't be using a formal textbook this semester, so I will be trying to gather links to relevant on-line material. A lot of good-quality articles are available on Wikipedia, the free on-line "open source" encyclopedia (you might want to consider donating some portion of your textbook savings to their efforts).