[erlang-questions] Wrapping C libraries in pure Erlang

Mats Cronqvist <>
Wed Apr 4 16:05:41 CEST 2007


Denis Bilenko wrote:

[...]
> One useful application would be accessing system calls not
> covered by existing BIFs/drivers (native GUI goes in this
> category)
> 
> I would like to hear any comments, especially from people who
> know something about Erlang internals (I don't):
> Would it be hard to implement?
> Has anyone already thought of something like that?

   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.

   mats



More information about the erlang-questions mailing list