Melange is an automatic interface generator which provides transparent access to both functions and data defined or generated by existing C libraries. It allows users to import “interfaces” 1 from existing C header files, controlled by the contents of a define interface top-level form which may be included in the same file as arbitrary Dylan code. The user may use the functions and data specified by this interface as if they were native Dylan objects, and may export them to other modules.

Melange provides reasonable interpretations for the various sorts of C declarations which may appear in a header file, as well as mechanisms for explicitly modifying the default interpretations when necessary. For example, users may:

  • specify rules for the translation of foreign names

  • explicitly specify new names for specific objects or routines

  • specify parameter passing conventions or mutability of foreign objects

  • specify mappings or equivalences between “foreign” data and native equivalents

  • choose to import only a subset of the declarations in the header file

All of these customizations, as well as the name of the C header file, are specified by a define interface clause. See A Concrete Example for an example.



In fact, a C header file may contain arbitrary C code which Melange is unprepared to handle. By convention, however, .h files contain only “interface declarations” – type declarations, function prototypes, global variable declarations, and “preprocessor constants.” Since Melange can meaningfully process all of these, it is capable of handling the vast majority of header files which will be encountered in practice.