Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: immanuel litzroth <ilitzroth@gmail.com>
To: Fabrice Le Fessant <Fabrice.Le_fessant@inria.fr>
Cc: Chet Murthy <murthy.chet@gmail.com>, Caml List <caml-list@inria.fr>
Subject: Re: [Caml-list] C++ for Ocaml FFI bindings
Date: Tue, 3 Jan 2017 13:59:38 +0100	[thread overview]
Message-ID: <CAJjmLU69CNngnEenjVF2Ze2bPRJefWzTO-K-xewg7u17D=0W8g@mail.gmail.com> (raw)
In-Reply-To: <CAHvkLrP+5CDzWkMZ3UZwHzg6GBn=unZzPDHrPse6VtXW1hPKSQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3303 bytes --]

It is possible to write generic C++ for mapping any C++ class as
a new type in ocaml by wrapping it in a shared_ptr or unique_ptr,
in such a way that the object can be kept alive by the c++ side or
by the ocaml side. There is some code on the net that explores that
idea here:
https://github.com/ygrek/scraps/blob/master/cxx_wrapped.h
but that seems to be using the older auto_ptr at the moment. The
code I have written for this is proprietary.
Immanuel

On Tue, Jan 3, 2017 at 11:34 AM, Fabrice Le Fessant <
Fabrice.Le_fessant@inria.fr> wrote:

> Hi Chet,
>
>    I wrote a very basic tool to generate OCaml bindings for the WxWidgets
> C++ library (https://github.com/OCamlPro/ocplib-wxOCaml), and then a very
> different one for LLDB (https://github.com/OCamlPro/typerex-lldb). In
> both cases, methods of C++ class A are mapped to functions of OCaml module
> A. The main difference is that WxWidgets makes heavy use of inheritance,
> while LLDB does not use it at all. Consequently, there are many "cast"
> functions in WxOCaml, while there are none for LLDB. Also, LLDB is very
> strict on the syntax of its include files, which makes it very easy to
> parse them directly from OCaml (there is no need for a DSL), whereas for
> WxWidgets, I had to copy and slightly modify the C++ method definitions
> into a subset (the DSL) that could be used from OCaml.
>
>   So, in your bindings, which OCaml type do you target for a C++ class ?
> Also, is there some support for garbage collection ? How do you detect that
> a C++ object is removed, so that the corresponding OCaml object can be
> removed ? Is it generalizable to any C++ framework ?
>
> Cheers,
> --Fabrice
>
>
>
> On Tue, Jan 3, 2017 at 6:55 AM Chet Murthy <murthy.chet@gmail.com> wrote:
>
>> Hi, I've been watching the discussions over the years regarding FFI
>> bindings from Ocaml.  I've built a ton of such bindings using Camlidl.
>> I've used some done using Ctypes.  And it's always hard.  But
>> recently, I've come to the conclusion that bindings against C++ would
>> be (shockingly, yes I know) -easier- than against C.
>>
>> To demonstrate this, and because I had need of it, I've writte a
>> little IDL compiler, along with an example FFI wrappering of the C++
>> Rocksdb API.  Only as an example.  The code is raw, and really
>> .... raw.  But it works, works well, and is dreamily easy to add new
>> entry-points to.  I'm hoping that over the next few weeks, as I use
>> this, I'll add tests, more examples, and documentation.
>>
>>   --> oboy, does it need documentation (if anybody but me is -ever-
>>       gonna use it)
>>
>> Right now though, I just thought I'd send this note, to try to raise
>> the subject that ....
>>
>>   Maybe C++ is a ripe target for FFIs from Ocaml?
>>
>> I've released the code (such as it is) on Github:
>>
>> https://github.com/chetmurthy/ocaml-cppffigen
>>
>> https://github.com/chetmurthy/ocaml-rocksdb
>>
>> Please don't take this as an advertisement for the code.  But do take
>> it as an advertisement for the -idea-.
>>
>> Cheers,
>> --chet--
>>
>>
>> --
>> Caml-list mailing list.  Subscription management and archives:
>> https://sympa.inria.fr/sympa/arc/caml-list
>> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
>> Bug reports: http://caml.inria.fr/bin/caml-bugs
>>
>

[-- Attachment #2: Type: text/html, Size: 6684 bytes --]

      reply	other threads:[~2017-01-03 13:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-03  5:54 Chet Murthy
2017-01-03 10:34 ` Fabrice Le Fessant
2017-01-03 12:59   ` immanuel litzroth [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAJjmLU69CNngnEenjVF2Ze2bPRJefWzTO-K-xewg7u17D=0W8g@mail.gmail.com' \
    --to=ilitzroth@gmail.com \
    --cc=Fabrice.Le_fessant@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=murthy.chet@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox