Forum: IronRuby Compiling Ruby classes to assemblies for use with Unity3D (which uses Mono 1.2.4)

Posted by Asfand yar Qazi (ayqazi)
on 2009-12-22 12:25
(Received via mailing list)
Hi,

I want to be able to use Ruby code in the Unity3D game engine, which
embeds GNU Mono 1.2.4 to provide support for various languages (a
ECMAScript-based language, Boo, and C# - they don't upgrade the
ancient Mono version to keep compatibility with games designed for
older versions of Unity3D).

Forgive my use of terminology, I'm new to this .NET/Mono malarky :)

I was told that I can product .NET 2 assemblies, plug them into
Unity3D, and the classes will be accessible from the other languages.

Will I be able to use IronRuby to create .NET 2 assemblies in this 
manner?

Sorry for asking here, but the Unity3D people don't seem interested in
Ruby as much, and I just can't live without coding in BDD style in a
robust environment.

Thanks.  Regards,
     Asfand
Posted by Ivan Porto carrero (casualjim)
on 2009-12-22 13:27
(Received via mailing list)
You can't compile to an assembly with IronRuby at this point. But you 
can
reference the ironruby interpreter library and host the ruby engine in 
your
application to have it execute ruby files.

http://ironruby.net/Documentation/.NET/Hosting

But I don't think that will completely solve your issue though because 
to
interop with CLR classes their definitions must exist in the CLR so you
would probably have to build some bridges.

the most straightforward way to do that is by defining CLR interfaces 
and
adding them to IronRuby classes.

public interface IRobot{
   DeathAndDestructionMode ForgetAboutThe3Laws();
}

in Ruby:

require '/path/to/interfaces/assembly'

class EvilBot
   include IRobot

   def forget_about_the_3_laws
      DeathAndDestructionMode.world_domination
   end
end

a consuming C# class could then get an object you created with your 
hosting
code and still talk to it because of the CLR interface.

If you're after testing then you can use ruby tools like bacon/rspec to 
test
your C# code. The only thing that will be weird if you're going to use 
it
this way is that ruby mockers have no clue what to do with CLR objects. 
I
created a project that:

a) accepts patches and contributions
b) gives you mocking that knows about the CLR

http://github.com/casualjim/caricature

---
Met vriendelijke groeten - Best regards - Salutations
Ivan Porto Carrero
Blog: http://flanders.co.nz
Google Wave: portocarrero.ivan@googlewave.com
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)
Posted by Jb Evain (Guest)
on 2009-12-22 13:36
(Received via mailing list)
Hey,

On 12/22/09, Asfand Yar Qazi <ayqazi@gmail.com> wrote:
>  I want to be able to use Ruby code in the Unity3D game engine, which
>  embeds GNU Mono 1.2.4 to provide support for various languages (a
>  ECMAScript-based language, Boo, and C# - they don't upgrade the
>  ancient Mono version to keep compatibility with games designed for
>  older versions of Unity3D).

Mono 1.2.4 is most probably too old to support IronRuby and the DLR.
Posted by Asfand yar Qazi (ayqazi)
on 2009-12-22 14:32
(Received via mailing list)
2009/12/22 Jb Evain <jb@nurv.fr>:
> Hey,
>
> On 12/22/09, Asfand Yar Qazi <ayqazi@gmail.com> wrote:
>>  I want to be able to use Ruby code in the Unity3D game engine, which
>>  embeds GNU Mono 1.2.4 to provide support for various languages (a
>>  ECMAScript-based language, Boo, and C# - they don't upgrade the
>>  ancient Mono version to keep compatibility with games designed for
>>  older versions of Unity3D).
>
> Mono 1.2.4 is most probably too old to support IronRuby and the DLR.

Thanks for that, I can now stop chasing a pointless dream :)
Posted by Asfand yar Qazi (ayqazi)
on 2011-03-21 22:40
Asfand yar Qazi wrote in post #875250:
> 2009/12/22 Jb Evain <jb@nurv.fr>:
>> Hey,
>>
>> On 12/22/09, Asfand Yar Qazi <ayqazi@gmail.com> wrote:
>>>  I want to be able to use Ruby code in the Unity3D game engine, which
>>>  embeds GNU Mono 1.2.4 to provide support for various languages (a
>>>  ECMAScript-based language, Boo, and C# - they don't upgrade the
>>>  ancient Mono version to keep compatibility with games designed for
>>>  older versions of Unity3D).
>>
>> Mono 1.2.4 is most probably too old to support IronRuby and the DLR.
>
> Thanks for that, I can now stop chasing a pointless dream :)

Well, a long time has passed since I asked the previous question. 
Unity3D now uses GNU Mono 2.6, and I hope IronRuby has made progress 
too.

Is it now possible to compile Ruby files into assemblies to use with 
Unity3D's Mono 2.6?

Thank you for your help.  Regards,
      Asfand
Posted by Tomas Matousek (Guest)
on 2011-03-22 02:37
(Received via mailing list)
We are already targeting Mono 2.10. You can try building with msbuild on 
Windows using /p:Configuration=v2Debug and using the resulting binaries 
on Mono 2.6.
Mono fixed a bunch of bugs since 2.6 though so it might not quite work.

Tomas
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.