Solaris door Ruby bindings

B

Banzai

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
end
end

d = Door.new("/path/to/door", "func")


## client process
require 'door'
d = Door.new("/path/to/door")

answer = d.call(2) # => 4

Is it more convenient to say:
d = Door.new:)path => "/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.,
"File.new(path).door?"), 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?
 
E

Erwin Abbott

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

From my experience the most Ruby-like way of doing this would be
d = Door.new("/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
end
end

Regards,
- Erwin
 
B

Banzai

From my experience the most Ruby-like way of doing this would be
d = Door.new("/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
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:

warning: Door::new() does not take block; use Door::eek:pen() 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);
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,680
Members
48,796
Latest member
Greg L.

Latest Threads

Top