Resources for CSC 2/454

The main computers for the course will be the machines of the
Undergraduate CS Labs.
If you don’t have an account, see Marty Guenther in CSB
735 (this goes for grads as well as undergrads).
Machines in the Hylan Lab (room 301) are available to all
students in the course.
Machines in the Majors Lab (CSB 633) are available only to
undergraduate CS majors.
Three of the lab machines (cycle1, cycle2, and
cycle3.csug.rochester.edu) are
dedicated to use as remote login servers for access across the campus
network.
For most of the work we will be doing an ssh terminal window
to one of these machines
will suffice. If you want to use graphical tools
you’ll need to run
an X11 server on your machine. MacOS includes an X11
implementation; implementations are also available for Windows (see
for example Cygwin/X).

Class tools will reside in the directory /u/cs254/bin;
students should add this to their $path environment
variable (this requires modifying your .profile [ksh/bash]
or .cshrc [csh/tcsh] file; if you don’t know how, ask
the TA).
You are welcome to work on other machines if you like, but we do not
plan to assist in porting any courseware. Moreover all
assignments must run on the CSUG Linux machines, and will be graded
only on those machines.
Be sure to leave time to test your code on those machines if you
develop elsewhere.

Please be sure to change permissions on any directories in which you
are doing class work, to make sure they aren’t readable by
others. Again, if you don’t know how, ask
the TA.

All students should read the 2/454 discussion board and announcements
page in
Blackboard.
Questions may be posted to the discussion board or sent directly to the
instructor or the TA.
Any answer deemed useful to the class as a whole will be posted (with
identifying information removed) back to the discussion board.

If you don’t expect to log into your CSUG account every day, you
should forward your mail to an account that you do read every
day. To forward an account under Linux, put the email address at
which you want to receive your mail into a single-line file named
.forward, and place this file in your home
directory.

The text for this course is the fourth edition of Programming Language Pragmatics, by Michael L. Scott.
Please do not try to make do with a previous edition of the text;
too much has changed.
A few copies will be placed on reserve at Carlson Library, for those
who prefer not to buy their own (in my defense, at $75 and nearly 1000
pages, the book is 25% longer and 45% cheaper than the leading
competitor).
Some 360 pages of additional content (the “In More Depth”
sections) is openly available on the publisher’s
web site (also the “PLP
CS” link in the navigation bar at left).
Errata for both the printed book and the companion site
are available HERE.

The textbook includes a list of short-answer review questions
approximately every 10 pages.
The TA will be placing a subset of
these on Blackboard; you are expected to answer them before
coming to the class in which the material will be covered (see the schedule).

Moriana Garcia is our assigned course librarian. She can help you find
articles, books and online resources related to this course and
familiarize you with the research process. To set up an appointment
with her, go to
http://libcal.lib.rochester.edu/appointments/
and select her name from the list, or send her an email at
mgarcia@library.rochester.edu. Her office is in Carlson
313D.

Most of these texts are available from Carlson Library.
Most of them will be on reserve.
If you find one that isn’t on reserve, please don’t hog it
forever.
Also, please note that this list is far from exhaustive.

Concepts of Programming Languages,
eleventh edition, by Robert Sebesta. Addison-Wesley, 2015.
A popular but less comprehensive text.

Essentials of Programming Languages, third edition, by Daniel
Friedman, Mitchell Wand, and Christopher Haynes.
MIT Press, 2008. A very different kind of PL text, and nicely
done. Based heavily on interpreters written in Scheme.
Excellent coverage of continuation-passing style.

Engineering a Compiler, second edition, by Keith Cooper
and Linda Torczon.
Morgan Kaufmann, 2011. The new standard text in compiler design.

Introduction to the Theory of Computation, third edition, by
Michael Sipser. Thomson (Course Technology), 2012. The
text for CSC 280. Good source for coverage of finite automata
and context free grammars, the theoretical basis for scanners and
parsers.

Computer Organization and Design: The Hardware/Software Interface,
fifth edition,
by David Patterson and John Hennessy. Morgan Kauffman, 2014.
The undisputed leader in undergraduate-level computer architecture
textbooks.

Computer Systems: A Programmer’s Perspective, third
edition, by Randy Bryant and David O’Hallaron. Prentice Hall,
2016. Sometimes used in place of Patterson & Hennessy as the
CSC 252 textbook.

The C++ Programming Language, fourth edition, by Bjarne
Stroustrup. Addision-Wesley, 2013. Not necessarily the
best text on C++, but pretty good, newly updated for C++’11, and
written by the language designer.

CSC 2/454 is not a course you can coast through. It’s also
not a course with a whole lot of “hand-holding.” You
will need to take responsibility for your own success. Do
not wait until you’re drowning before you ask for
help.

Read your CSUG mail account every day, or
forward it to another account that you do read every day.

Many of the programming assignments will require that you become an
expert user of certain tools, notably the GNU assembler and debugger.
These tools will be not be covered thoroughly in class. You are
expected to read the manuals and then attend TA office hours for
hands-on help.