[Haskell-cafe] how to write an haskell binding

Brian Hulley brianh at metamilk.com
Mon Jun 26 18:43:15 EDT 2006


Brian Hulley wrote:
> minh thu wrote
>> * for c++, is it better to first write a c api for the c++ code before
>> writing the binding
> [snip]
>    class TimerFactory {
>        static void Construct();
>        static void Destruct();
>    };
>
> then the C api functions are given names like:
>
>     xxx_TimerConstruct()
Ooops!
xxx_TimerFactory_Construct()

I think I also missed the point of your question. In the program I'm writing 
sometimes I find I need to write the binding first and other times the C 
first and other times the C++ first since it is not always clear how to 
achieve a goal. One other thing to bear in mind is that foreign calls are 
extremely slow, so for example it is much faster to use the 
Foreign.Marshal.Array and Foreign.C.String functions to allocate and 
populate a temporary array with the contents of a list, and send the pointer 
to this array to C with one foreign call, than to send each element of the 
list with multiple foreign calls (eg to paste only 19K of text from the 
Windows clipboard to my app took over 1 minute!!! with individual foreign 
calls but a fraction of a second when I switched to passing a pointer and 
using peekCAString (ditto pokeArray0 for copy))

Regards, Brian. 



More information about the Haskell-Cafe mailing list