recent changes to hsc2hs break wrapping c++

Simon Marlow marlowsd at gmail.com
Tue Feb 28 11:16:49 CET 2012


On 18/02/2012 05:22, Evan Laforge wrote:
> On Thu, Feb 16, 2012 at 4:27 AM, Simon Marlow<marlowsd at gmail.com>  wrote:
>> I'm not sure why you're using the C++ compiler from hsc2hs, and I don't
>> think that is guaranteed to work.  But maybe we can fix it if there's a
>> legitimate reason to want it.
>
> Well, consider if you're writing c++ along with haskell.  You can
> communicate with c++ by passing structs, which are guaranteed to have
> the layout as c, and call functions wrapped in extern "C" {...}.  You
> can't call class constructors from haskell or anything, but you can
> create structs to pass in and use directly in c++, which is already
> quite convenient.
>
> But those C structs are going to be defined in C++ headers with other
> C++ cruft in them that a C compiler is not going to understand.  But
> if you pass -c g++ to hsc2hs then it works just fine to emit the
> struct offsets.
>
> Otherwise, I'm not sure how you'd call C++ from the haskell FFI.  Like
> I said, I guess you'd have to split the C structs into separate
> headers, or maybe wall off the C++ bits with ifdefs.  Actually, I
> guess the ifdef part wouldn't be *so* bad, at last as far as ifdeffery
> goes, but it is intrusive on existing headers, which is not going to
> be possible in all situations.  Of course if the C++ API was written
> without regard to the haskell FFI it is likely to require structs to
> be constructed with constructors instead of direct pokes, which is
> beyond the FFI's capabilities.  But in the case where it is designed
> to use plain structs in the haskell-facing bits, it's very convenient
> how you can just pass -c g++ to earlier versions of hsc2hs and have it
> just work.

Ok, I buy that it's useful to be able to do this.  I suggest you make a 
ticket and describe the problem.  Is it possible you'd be able to make a 
patch to fix it too?

Cheers,
	Simon




More information about the Glasgow-haskell-users mailing list