[zeromq-dev] [PATCH] Add Zmq module namespace for ruby binding. Fix extconf.rb.

Chris Wong chris at chriswongstudio.com
Fri Feb 12 02:32:59 CET 2010

The suggestion on extconf.rb looks great.  I'd incorporate that.

IMHO, the namespace is a must, which we both agreed.  I'm open to name it ZMQ rather than Zmq if you prefer that.  I don't have a particular preference one way or the other.

In terms of API style, I think it should adhere to the basic API in the C/C++/Python library.  Any extra rubyism should be wrapped on top.  There are plenty of messaging abstraction library out there, such as EventMachine.  It's a lot more difficult (or rather cumbersome) to make the API ruby-ish at the C layer.


P.S.: Surprised that there is not much more opinions on the ruby binding.

On Feb 9, 2010, at 3:16 AM, Martin Sustrik wrote:

> Chris Wong wrote:
>> The ruby binding doesn't build correctly on Mac OS X Snow Leopard. This will fix the build.  However, I haven't fixed it enough so that it'd build with the top-level Makefile.  Will spend more time on it when I have some free cycle on it.  For now, this is needs to be built manually using.
>> ruby extconf.rb --with-libzmq-lib=<directory of libzmq.a>
>>> require 'mkmf'
>>> dir_config('libzmq')
>>> -have_library('libzmq')
>>> -create_makefile("ruby")
>>> +have_library('zmq')
>>> +create_makefile("librbzmq")
> McClain Looney proposed following solution:
> require 'mkmf'
> dir_config('libzmq')
> -have_library('libzmq')
> -create_makefile("ruby")
> +if have_library('libzmq', 'zmq_init')
> +  puts "cool, I found your zmq install..."
> +  create_makefile("zmq")
> +else
> +  raise "Couldn't find zmq library. try setting --with-zmq-dir=<path> to tell me where it is."
> +end
> I have no idea how Ruby plugin system works, so I cannot judge what's better...
>>> +    VALUE cZmq = rb_define_module ("Zmq");
>>> +    VALUE context_type = rb_define_class_under (cZmq, "Context", rb_cObject);
> Ruby API should definitely be changed to make the usage of 0MQ as intuitive an easy for Ruby developers as possible. The current way of creating socket, for instance, seems to miss the namespacing:
> s = Socket.new(ctx, REP);
> It should probably rather look like this:
> s = ZMQ.Socket.new(ctx, ZMQ.REP);
> However, changing API is pretty serious matter and so it should be done _once only_. Thus, before getting further it would be great if there was some discussion on the topic among Ruby developers to point out possible problems and drawbacks.
> Martin

More information about the zeromq-dev mailing list