caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Fabrice Le Fessant <Fabrice.Le_fessant@inria.fr>
To: Chet Murthy <murthy.chet@gmail.com>, Caml List <caml-list@inria.fr>
Subject: Re: [Caml-list] C++ for Ocaml FFI bindings
Date: Tue, 03 Jan 2017 10:34:16 +0000	[thread overview]
Message-ID: <CAHvkLrP+5CDzWkMZ3UZwHzg6GBn=unZzPDHrPse6VtXW1hPKSQ@mail.gmail.com> (raw)
In-Reply-To: <7033084.csZPQNGq1J@twitter>

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

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: 4580 bytes --]

  reply	other threads:[~2017-01-03 10:34 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 [this message]
2017-01-03 12:59   ` immanuel litzroth

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='CAHvkLrP+5CDzWkMZ3UZwHzg6GBn=unZzPDHrPse6VtXW1hPKSQ@mail.gmail.com' \
    --to=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;
as well as URLs for NNTP newsgroup(s).