capnp-ruby
capnp-ruby copied to clipboard
Still working on this? (Also: contact info)
I'd love to have a mature Cap'n Proto binding for Ruby! Particularly one that works across CRuby and JRuby.
I was just talking to @kentonv about it, and this approach (MRI cext) seems reasonable for CRuby. I think the JRuby version should bind to capnproto-java, which is unfortunately much less mature than the C++ version and, AFAIK, doesn't support the RPC protocol.
Getting serialization working across both CRuby and JRuby would be a good start.
Have you thought about making a project mailing list?
:+1:
@tarcieri agree totally on this!! :+1:
@tarcieri What about using FFI and not creating "Another damn c extension?" to quote @headius.
@Spaceghost the C++ implementation does not expose a C ABI, much less an "FFIable" one (i.e. it doesn't rely on the preprocessor)
I am a huge fan of FFI and used it extensively in RbNaCl however someone would need to create an FFIable C ABI to the C++ implementation first.
:+1:
There's a Ruby GSoC project underway to build a C wrapper around capnproto's C++ implementation and then re-wrap that in FFI. We'll see how it goes.
Thanks for the update @tarcieri. Sounds promising.
@tarcieri, would you happen to know how the Ruby GSoC project went? Also progress on making an implementation that works for JRuby?
@peakxu last year's project didn't go so well, but there's another GSoC effort this year
@tarcieri any chance you know how 2016 GSoC effort went?
It went well, I think! It should now support RPC:
https://github.com/nemoNoboru/capnp-ruby
Perhaps it should be moved to https://github.com/capnproto
cc @kentonv @nemoNoboru
@tarcieri Is it being used in prod? Is anyone actively maintaining it?
(Not meant to be challenges, I'm just honestly curious.)
@kentonv not to my knowledge. I'm not sure people are actually aware of it.
All that said, I think it's the most complete implementation of capnp in Ruby to date.
I used it on production during a time but we stopped using capnp entirely because the libs for other languages that we were using were less mature (IIRC go and node)