We describe a system that supports source-level integration of
ML-like functional language
code with ANSI C or Ada83 code. The system works by translating the functional
code into
type-correct, ‘vanilla’ C or Ada; it offers simple, efficient,
type-safe inter-operation between
new functional code components and ‘legacy’ third-generation-language
components. Our
translator represents a novel synthesis of techniques including user-parameterized
specification
of primitive types and operators; removal of polymorphism by code specialization;
removal of
higher-order functions using closure datatypes and interpretation; and
aggressive optimization
of the resulting first-order code, which can be viewed as encoding the
result of a closure
analysis. Programs remain fully typed at every stage of the translation
process, using only
simple, standard type systems. Target code runs at speeds comparable to
the output of current
optimizing ML compilers, even though handicapped by a conservative garbage
collector.