[erlang-questions] Wrapping C libraries in pure Erlang

Denis Bilenko <>
Wed Apr 4 20:30:50 CEST 2007

Mats Cronqvist wrote:

>    i think the "proper" way to wrap external libraries (esp native GUI) is to
> create a c-node (i.e. a server process that implements the erlang distribution
> protocol). the call to time() is wrapped in (say) Time(), accessible thus;
>    libc ! {'Time',[]},
>    receive
>      {libc,{ok,Ans}} -> Ans
>    end
>    many/most wrappers can be auto generated from the C header files.
>    this is verifiably possible (and even easy), since I've done exactly this
> with GTK (http://code.google.com/p/gtknode).
>    a c-node is safe and easy to work with. in my experience, linked in drivers
> are more trouble than their worth.

That's why I want an ultimate linked-in driver -- to abstract them out, and
never have to work with them again (except, maybe, for performance reasons).

c-node is safe to work with, but erlang-node is just as safe. and it must be
easier to work with -- after all, it is a high-level dynamic Erlang versus C.
A bridge between dynamic language interpreter and C can be build from either
end. ctypes has demonstrated that building Python wrappers to C libraries
in Python itself is a good thing (or at least a very easy thing:).
I think that would be true for Erlang too.

Thank you for the pointer.
C-node around libffi can be useful, but it is limited compared
to driver (but I can always turn driver into a separate node).
What if I want to make just one system call?
It doesn't seem natural to start a node for it.
What if this call receives file descriptor?
Now it doesn't even seem possible.


More information about the erlang-questions mailing list