Sponsors: NSF, IBM
We are developing type inference algorithms for object-oriented software which are practically useful for tool developers and language designers. An example application is tool support for transforming a dynamically-typed prototype application into a statically-typed product, say, from Smalltalk to Java. Prototypes may be developed in an environment where programs are interpreted rather than compiled. This gives a faster turn-around than the edit-compile-run cycle, and relieves the programmer from the Java discipline of static typing. We imagine a scenario where a prototype has been built and significant parts of the code can form the basis of the later product. In that code, some type annotations may be missing, and some types may be less flexible than possible. With tool support, it becomes easier to evolve the code into a robust form which both can be checked by the Java type checker, and where types fully reflect inherent flexibility in the code. Pieces of the software may be candidates for inclusion in a software library, and with highly flexible types, the software can gain the widest use.