# [spr5670] foreign C code

   >> I've been writing  some foreign C code using Allegro 4.0.1, and while
>> not extremely familiar with the manual, it seems that it would be
>> simple to make it a lot easier to pass information, especially
>> strings, back and forth between Lisp and C. All that would be needed
>> is for you to supply functions that convert between C and LISP
>> objects.
..
>> This would simplify foreign function coding a great deal. Any

Thanks for the great suggestions!  We'll have to chew over them for a
while, and figure out the cost (of implementing this as well as for
our customers to convert existing code), so I'm filing a Request For
Enhancement (RFE) for our experts to ponder over.  But the uniformity
of your suggested interface is very appealing.

The NewGen tool we have been designing and internally using for
parallelizer development purposes allows something similar to what
you're suggesting.  A short description follows.

\begin{abstract}

NewGen is a software engineering tool that helps programmers define and
implement sophisticated data types. Data {\em domains} are defined with
a high level specification language, called {\em DDL}, that allows user
defined domains to be built over {\em basic} domains with
operators like Cartesian product, union, list or array.

NewGen analyzes a set of specifications and produces a collection of
macros, functions, predicates, and pre-defined constants that enable
programs to create, initialize, access, update, and delete objects of
these types as if the programming language had been especially tailored
to manipulate {\em these} data types.

NewGen promotes the ideas of {\em functional abstraction} and {\em
evolution process} as ways to ease the prototyping, development and
evolution of applications that use such multi-language program
generators.  Applications that are developed with NewGen data types can
share complex data structures while being written partly in C and partly
in CommonLISP, the two currently supported programming languages.

NewGen ideas have been validated in practice; this tool is heavily used
for two projects that focus on the development of state-of-the-art
parallelization strategies for Fortran programs.

\paragraph{Keywords:} program generation, C, Common Lisp, data type,
type checking, prototyping, language extension.

\end{abstract}

The NewGen prototype is anonymously ftp-able from isatis.ensmp.fr in
~ftp/pub/Newgen/newgen-2.tar.Z.

Pierre