Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Francois Berenger <berenger@riken.jp>
To: caml-list@inria.fr
Subject: Re: [Caml-list] ANN: ocaml-ctypes, a library for calling C functions directly from OCaml
Date: Fri, 07 Jun 2013 10:28:01 +0900	[thread overview]
Message-ID: <51B13721.1070101@riken.jp> (raw)
In-Reply-To: <CAAxsn=HAzLq6_jC5aTQ0rUFCiiVoKPJeiT2_m8+F0kyqFOS1EA@mail.gmail.com>

That looks very interesting!!!

How about the cost of exchanging values between C and OCaml?

Is there a trick in ocaml-ctypes like there is for bigarrays?

Regards,
F.

On 06/07/2013 08:17 AM, Jeremy Yallop wrote:
> I'm happy to announce the initial release of ocaml-ctypes.
>
> The ocaml-ctypes library makes it possible to call C functions
> directly from OCaml without writing or generating C code.  The core of
> the library is a set of combinators for describing C types -- scalars,
> functions, structs, unions, arrays, and pointers to values and
> functions.  Type descriptions can then be used to bind native
> functions and values.  Here's a simple example:
>
>      # let puts = foreign "puts" (string @-> returning int);;
>      val puts : string -> int = <fun>
>      # puts "Hello, world!";;
>      Hello, world!
>
> Here's a more substantial example that shows how to describe a C
> structure type, map the type to an OCaml record, and call a function
> that returns the structure.
>
>      (* Describe the C struct.  There are two fields, both ints. *)
>      let div_t = structure "div_t";;
>      let q = div_t *:* int
>      let r = div_t *:* int
>      let () = seal div_t
>
>      (* Define the OCaml record that we'll use to view the C structure. *)
>      type div_result = { quot : int; rem: int }
>
>      (* Define the conversions between the C struct and the OCaml record. *)
>      let div_result_of_div_t d = { quot = getf d q; rem = getf d r }
>      let div_t_of_div_result {quot; rem} =
>          let d = make div_t in (setf d q quot; setf d r rem; d)
>
>      (* Create a "view type" for that looks like div_result and behaves
> like div_t *)
>      let div_result = view ~read:div_result_of_div_t
> ~write:div_t_of_div_result div_t
>
>      (* Bind to the standard C `div' function *)
>      let div = foreign "div" (int @-> int @-> returning div_result)
>
>      (* Try it out *)
>      # div 17 2;;
>      - : div_result = {quot = 8; rem = 1}
>
> The distribution contains larger examples and a fairly extensive test
> suite, showing how to use other features of the library, such as
> binding to functions that accept callback arguments.  Among the
> examples is Anil Madhavapeddy's port of the `curses' example from the
> OCaml documentation; it's instructive to compare the two
> implementations:
>
>      OCaml manual curses example
>      http://caml.inria.fr/pub/docs/manual-ocaml/manual033.html#toc147
>
>      ocaml-ctypes curses example
>      https://github.com/ocamllabs/ocaml-ctypes/blob/master/examples/ncurses/ncurses.ml
>
> Detailed installation instructions for ocaml-ctypes can be found in
> the tutorial.  (Briefly: ensure libffi is installed, then 'opam
> install ctypes'.)
>
> Comments, bug reports, and other feedback are most welcome.
>
> Tutorial:
> https://github.com/ocamllabs/ocaml-ctypes/wiki/ctypes-tutorial
> Examples:
> https://github.com/ocamllabs/ocaml-ctypes/tree/master/examples
> API documentation: http://ocamllabs.github.io/ocaml-ctypes/
> Github repository: https://github.com/ocamllabs/ocaml-ctypes
> Direct download:
> https://github.com/ocamllabs/ocaml-ctypes/archive/ocaml-ctypes-0.1.tar.gz
>


  reply	other threads:[~2013-06-07  1:28 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-06 23:17 Jeremy Yallop
2013-06-07  1:28 ` Francois Berenger [this message]
2013-06-07  2:06   ` Anthony Tavener
2013-06-07  8:16   ` Jeremy Yallop

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=51B13721.1070101@riken.jp \
    --to=berenger@riken.jp \
    --cc=caml-list@inria.fr \
    /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