Automatic Programming is defined as the synthesis of a program from a specification. If automatic programming is to be useful, the specification must be smaller and easier to write than the program would be if written in a conventional programming language.
Our approach to automatic programming is based on reuse of generic algorithms through views. A generic algorithm performs some task, such as sorting a linked list of records, based on abstract descriptions of the data on which the program operates. A view describes how actual application data corresponds to the abstract data as used in the generic algorithm. Given a view, a generic algorithm can be specialized by a compilation process to produce a version of the algorithm that performs the algorithm directly on the application data.
Graphical user interfaces make it easy for the user to create views of the application data. Given a view, any of the library algorithms defined for that view can be specialized to work with the application data. Specialized programs can be produced in multiple languages (Lisp, C, C++, Java or Pascal) from a single copy of the generic algorithms.
A related system allows a program to be specified graphically by connecting diagrams that represent data, physical laws, and mathematical models.
On-line demonstrations of these programs are avialable below.
CS 394P: Automatic Programming