20

What's the best way to embed Ruby as a scripting language in C++? Using ruby.h? SWIG? Something else? What I need is to expose some C++ objects to Ruby and have the Ruby interpreter evaluate scripts that access these objects. I don't care about extending Ruby or accessing it in C++.

I've found thisarticle on embedding Ruby in C++, and while it's very useful, it's kinda old and I was wondering if there are any other resources on the subject (or open source implementations of similar engines).

JeffV's user avatar
JeffV
54.8k33 gold badges106 silver badges124 bronze badges
askedOct 27, 2008 at 8:10
Firas Assaad's user avatar
1

5 Answers5

11

Rice is looking very promising.

Sasha Chedygov's user avatar
Sasha Chedygov
132k27 gold badges107 silver badges117 bronze badges
answeredOct 27, 2008 at 16:01
Avdi's user avatar
Sign up to request clarification or add additional context in comments.

1 Comment

Note to Windows users: Rice is only known to properly compile and run under Cygwin and Mingw. :(
6

Ruby provides a very helpful README.EXT file. It has lots of information about how to extend Ruby, and convert between C & Ruby types.

There is also thisexcerpt from thepick axe book which pretty much covers the same thing.

In my case, when I added Ruby scripting to my application I decided against using swig, because my needs were very simple, and I didn't want to add yet another build dependency.

answeredFeb 21, 2009 at 20:12
hyperlogic's user avatar

Comments

5

swig is probablly the way to go..... but ruby doesnt embed too well......

if you want a language that embeds nicely into C++, try lua

answeredOct 27, 2008 at 8:49
Keith Nicholas's user avatar

4 Comments

I did try lua, it's a wonderful language and was pretty easy to embed. Ruby is a requirement however, as I already have a lot of existing Ruby code I'd like to reuse.
Yes even don#t try to embedd ruby and use it from a single thread in you multithreaded apps. They (the ruby programs) are changing signal handlers, envionrment variables, current directories etc. all the time.
I realize this answer is half a decade old, but I should mention that Ruby is my favorite language to embed among JS, Lua, and Python. To those that might hesitate, I suggest readingruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html and trying a small example before dismissing it.
I haven't looked at it for a long time, how does it handle multitasking? its big limitation was rubys implementation had a lot of globals meaning if you embed it and use it from multiple threads you get problems, as opposed to lua which was designed specifically to handle that situation.
2

You might wish to check outtinyrb.

answeredFeb 21, 2009 at 21:15
oylenshpeegul's user avatar

Comments

1

I've been working on Rarity (https://github.com/Plaristote/Rarity), which does two things:

  • Generates Ruby bindings from a YML description of your C++ API
  • Allows interaction with Ruby script in the most C++ fashion there is

I've solved a good deal of question (exception handling, garbage collection)...I haven't seen anywhere else the code generation that Rarity uses to make your bindings come to life. I also haven't seen any other lib that allows such an easy conversion between C++ and Ruby types.

I think Rarity's worth the shot ! And I'd be glad to have some feedback as well :) !

answeredAug 20, 2014 at 16:35
user3387633's user avatar

Comments

Your Answer

Sign up orlog in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

By clicking “Post Your Answer”, you agree to ourterms of service and acknowledge you have read ourprivacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.