Forum: Ruby Solaris door Ruby bindings

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Banzai (Guest)
on 2007-06-16 10:26
(Received via mailing list)
I'm writing a ruby extension in C to the Solaris door library.  The
door library provides for fast IPC locally on Solaris.

I wonder if such a thing is of interest to you.  If you are interested
(or not), I'd appreciate your input.

1.  Right now, it looks like this:

  ## server process
  require 'door'
  class Door
    def func(arg=0)
      return arg**2

  d ="/path/to/door", "func")

  ## client process
  require 'door'
  d ="/path/to/door")

  answer = # => 4

Is it more convenient to say:
  d = => "/path/to/door", :proc => "func")

Which is more ruby-like?

Perhaps I can support both by checking the type of the first VALUE....

2.  Is it OK to distribute this extension under a license other than
CDDL (this is the Solaris license), say GPL or whatnot?  I'm just using
the API.

Since I used the code from ruby source (to implement, e.g.,
""), I think I'll have to use GPL, which is
incompatible with CDDL, from what I read.

3.  If there's enough interest, I would like to register the project
with Rubyforge under "door" or "ruby-door" or something.  Can you think
of a better name?
Erwin A. (Guest)
on 2007-06-16 12:09
(Received via mailing list)
On 6/16/07, Banzai <removed_email_address@domain.invalid> wrote:
> ...
> d ="/path/to/door", "func")
> Is it more convenient to say:
>         d = => "/path/to/door", :proc => "func")

From my experience the most Ruby-like way of doing this would be
   d ="/path/to/door") { |arg| arg ** 2 }

You can implement it like this

  class Door
    def initialize(path, &block)
      # var named block is now a Proc object
      @block = block

- Erwin
Banzai (Guest)
on 2007-06-17 19:10
(Received via mailing list)
On 2007-06-16 03:07:57 -0500, "Erwin A." <removed_email_address@domain.invalid>

>   class Door
>     def initialize(path, &block)
>       # var named block is now a Proc object
>       @block = block
>     end
>   end
> Regards,
> - Erwin

Thank you for your input, Erwin.

Remember that my extension is written in C, so the implementation would
be a bit more involved.  :-)

I do like the idea...  But, I think Door should be a subclass of File,
and File doesn't like a code block for an argument, and I'll get this

warning: Door::new() does not take block; use Door::open() instead

This warning comes from rb_io_s_new() in io.c, so I don't think I can
suppress it if I say:

  rb_define_class("Door", rb_cFile);
This topic is locked and can not be replied to.