[erlang-questions] [ANN] eixx - C++ interface to Erlang

Serge Aleynikov <>
Tue Jan 4 06:31:24 CET 2011

Hi Steve,

Yes it does.  In this project I am using boost's ASIO for asynchronous 
I/O (build around epoll/select/poll depending on the platform), which 
has full support for non-blocking I/O operations.  The combination of 
that with deadline timers allowed implementing support for asynchronous 
receipt of messages in multiple mailboxes in the context of a single thread.

Unfortunately ei is not very friendly on establishing distributed node 
connections in non-blocking way, so I had to copy/paste some code to 
make it work property.  Initially I thought of patching ei, but at some 
point gave up on the idea because it involved to many API changes, and 
just reused the handshaking protocol-related functions.

The project currently only supports client-initiated connections (i.e. 
C++ node connecting to an Erlang node).  If you are coding in C++ rather 
than C, you'll find it quite a time saver - the use of polymorphic 
template-based Erlang terms along with reference counting, and pluggable 
memory allocators gives a rather efficient way of manipulating terms. E.g.:

	eterm term = tuple::make(atom("ok"), 1, 10.0, "string");
	std::cout << term << std::endl;
	// Prints:  {ok, 1, 10.0, "string"}

	std::cout << term.encode(/* header size */ 0) << std::endl;
	// Prints:
	// <<131,104,4,100,0,2,111,107,97,1,70,64,36,0,0,0,0,0,0,107,
	//   0,6,115,116,114,105,110,103>>



On 1/3/2011 10:01 PM, Steve Vinoski wrote:
> Hi Serge, sounds interesting. Does it have a proper event loop, unlike ei?
> --steve
> On Mon, Jan 3, 2011 at 9:06 PM, Serge Aleynikov<>  wrote:
>> http://github.com/saleyn/eixx
>> eixx - Erlang C++ Interface Library
>> ===================================
>> This library provides a set of classes for convenient marshaling
>> of Erlang terms between processes as well as connecting to other
>> distributed Erlang nodes from a C++ application.
>> The marshaling classes are built on top of ei library included in
>> {@link http://www.erlang.org/doc/apps/erl_interface erl_interface}.
>> It is largely inspired by the {@link http://code.google.com/p/epi epi}
>> project, but is a complete rewrite with many new features and
>> optimization enhancements.
>> This library adds on the following features:
>>   - Use of reference-counted smart pointers for complex terms and
>>     by-value copied simple terms (e.i. integers, doubles, bool, atoms).
>>   - Ability to provide custom memory allocators.
>>   - Encoding/decoding of nested terms using a single function call
>>     (eterm::encode() and eterm::eterm() constructor).
>>   - Global atom table for fast manipulation of atoms.
>> The library consists of two separate parts:
>>   - Term marshaling (included by marshal.hpp or eixx.hpp)
>>   - Distributed node connectivity (included by connect.hpp or eixx.hpp)
>> The connectivity library implements a richer set of features than
>> what's available in erl_interface - it fully supports process
>> linking and monitoring.  The library is fully asynchronous and allows
>> handling many connections and mailboxes in one OS thread.
>> Ths library is dependend on {@link http://www.boost.org BOOST}
>> project and erl_interface, which is a part of the
>> {@link www.erlang.org Erlang} distribution.
>> Regards,
>> Serge
>> ________________________________________________________________
>> erlang-questions (at) erlang.org mailing list.
>> See http://www.erlang.org/faq.html
>> To unsubscribe; mailto:

More information about the erlang-questions mailing list