Automatic Programming


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.

Views

Publications

CS 394P: Automatic Programming

Software Demos:

Unfortunately, most of the on-line demos have been disabled due to security issues.
Gordon S. Novak Jr.