CS 394P: Automatic Programming
Automatic programming is the generation of programs by computer,
usually based on specifications that are higher-level and
easier for humans to specify than ordinary programming languages.
Automatic programming might be summarized as "Artificial Intelligence
meets Compilers:"
- AI:
- Writing programs, whether by humans or by machine, is based on
knowledge of algorithms, data structures, design patterns.
AI techniques are needed to represent, find, and instantiate
the design patterns.
- Search may be needed to find a combination of components that
accomplishes the desired task.
- Compilers:
- Generation and manipulation of programs use compiler techniques.
- The central representation of a program is the Abstract Syntax Tree
(AST) as used by compilers. Lisp code can be viewed as a kind of AST.
- It is good to know what optimizations a compiler can perform,
so the program generator does not need to duplicate those.
This course covers technical topics that support research in
automatic programming and surveys the major research approaches
in this area.
The course consists of lectures for the first two-thirds of the semester.
Homework problems and programming assignments illustrate the lecture
material. The programs are not long; the intent is to gain some
exposure to several kinds of programming systems. The latter part
of the semester covers readings in the research literature;
students are expected to present one or two papers to the class.
Many of the world's best researchers in automatic programming are in
Austin: Jim Browne, Don Batory, Elaine Kant, Ira Baxter, Ted Biggerstaff;
they will be invited to present guest lectures to describe their work.
Assignments:
Notes on Papers:
- Herbert A. Simon,
"Whether Software Engineering Needs to be Artificially Intelligent",
IEEE Trans. on Software Engineering, vol. SE-12, no. 7 (July 1986),
pp. 726-732.
- Charles Rich and Richard C. Waters,
"Automatic Programming: Myths and Prospects",
IEEE Computer, vol. 21, no. 8 (Aug. 1988), pp. 40-51.
- Andrew Berlin and Daniel Weise,
"Compiling Scientific Code Using Partial Evaluation",
IEEE Computer, vol. 23, no. 12 (Dec. 1990), pp. 25-37.
- Robert Paige and Shaye Koenig,
"Finite Differencing of Computable Expressions",
ACM Trans. on Programming Languages and Systems, vol. 4, no. 3
(July 1982), pp. 402-454.
- Gregor Kiczales et al.,
"Aspect-Oriented Programming," Proc. Euro. Conf. OOP 1997,
LNCS 1241, Springer Verlag, 1997.
Links to Research, Companies, Conferences: