No-Longer-Foreign: Teaching an ML compiler to speak C 'natively'

01 January 2001

New Image

We present a new foreign-function interface for SML/NJ. It is based on the idea of data-level interoperability- the ability of ML programs to inspect as well as manipulate C data structures directly. The core component of this work is an encoding of the complete C type system in ML types. The encoding makes extensive use of a "folklore" typing trick, taking advantage of ML's polymorphism, its type constructors, its abstraction mechanisms, and even functors. A small low-level component which deals with "new" C types (struct or union declarations) as well as program linkage is hidden from the programmer's eye by a simple program-generator tool that translates C declarations to corresponding ML glue code. As a competent ML programmer you would not even have to know C to be able to use this new facility!