CSC 254/454
Programming Systems
Fall 2001
Teaching staff and office hours
Instructor: Prof.
Chen Ding, CSB 710, ext. 51373
TA: Bill Scherer,
CSB 620, ext. 55492
Lectures: 3:25pm-4:40pm, Tuesday and Thursday @ CSB 601
Office hours:
-
Ding: by appointment @ CSB 710
-
Scherer: 1:30-2:30pm, Mondays and 1-2pm Thursdays @ CSB 620
Textbook (recommended)
Grading
-
70% assignments
-
5% written assignments
-
65% course projects
-
13% written documentation
-
52% program function and quality
-
30% exams
Description
Today's programmers face a wide range of programming language features.
For efficiency in embedded systems, one may use static data structures
and
macros. For extensibility in prototyping, one may favor polymorphic
operations and encapsulated modules. For resource sharing and
aggregation,
one may design a parallel and distributed system. Quite often,
the program
demand at hand is a mixture of many requirements, and the appropriate
solution is probably a combination of several languages/systems.
For
example, if you were to write a web-based agent, what programming language
or languages would you use? To made such decision, you need to
understand
how programming languages work.
This course teaches fundamental concepts in modern programming languages
by
explaining their operational definitions, i.e. how they are implementated.
The course will guide students through basic techniques of lexical
and
semantic analysis, code generation and run-time environment, first-class
functions, static and dynamic typing. The teaching is styled
as a process of problem
solving, so that students will see not only how languages were defined
but also why
they were so designed. To complete the learning experience, students
will
implement a set of core language features on a real machine.
The basic material of this course is covered by its textbook.
In addition,
I will emphasize concepts and techniques that are most relevant to
building
large programs or programs processing large data sets. For this
reason, I
will focus on high-level language implementation and leave out most
assembly-level issues. Drawing from my own research, I will include
in
lectures the most recent advances in compilation and language implementation,
especially new techniques for program data management.
Organization
Additional reading
-
Course webpage of Fall 2000
(first one of my version of the course)
-
Course
webpage of Fall 1999 (a previous, different version by Prof. Michael Scott)
-
Compilers: Principles, Techniques, and Tool, by A. V. Aho, R. Sethi,
and J. D. Ullman, Addison-Wesley, 1986. (auxiliary reading for parsing
and code generation. On reserve in Carlson)
-
Introduction to Automata Theory, Language, and Compilation, by J.E.
Hopcroft and J.D. Ullman, Addison-Wesley, 1979. (automata theory behind
scanning)
-
Thinking in C++, B. Eckel, Prentice Hall, 1995. (can be used
as a C++ reference book, it contains clear explanation and concise examples.
On reserve in Carlson) Eckel also has an on-line
book on Java
-
The Lambda Calculus, revised edition, by H.P. Barendregt, Elsevier Science
Publishers B.V., 1984. (Advanced reading for language theory.
Chapter 2 and 3 prove fundamental theorems of lambda calculus. See
instructor if you are interested in reading it.)
-
Programming in Prolog, by W. Clocksin and C. Mellish, Springer Verlag.
(The standard Prolog textbook)
-
Component software - beyond Object-Oriented programming, by C. Szyperski,
ACM Press and Addision-Wesley 1997. (Chapter 4 through 7. Excellent
analysis of object-orientation and beyond. On reserve in Carlson.)
Assignments