We consider the problem of software generalization: Given a program
component P, create a parameterized program component P' such
that P' is usable in a wider variety of syntactic contexts than P.
Furthermore, P' should be a semantically meaningful generalization
of P; namely, there must exist an instantiation of P' that is
equivalent in functionality to P.
In this talk, I will present an algorithm that generalizes C functions
via type inference. The original functions operate on specific data
types; the result of generalization is a collection of C++ function
templates that operate on parameterized types. This version of the
generalization problem is useful in the context of converting existing
C programs to C++.
This is joint work with Thomas Reps. The talk is a practice talk
for the ACM SIGSOFT '96 Fourth Symposium on the Foundations of Software
Engineering.