Phil Haack
2007-Sep-28 06:46 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Hi All, I posted some code for calling IronRuby code I found in the mailing list onto the wiki. http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp RubyEngine re = RubyEngine.CurrentEngine; string script = "s = ''let us get started''" + Environment.NewLine + "i = s.length"); re.ExecuteCommand(script); The only thing is, I don''t know how to pass a .NET object to the context of the RubyEngine so it can be called from within the script. I''d like to update the example with that. Any help? Phil -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070927/4c5b1502/attachment.html
Eric Nicholson
2007-Sep-28 13:38 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Here''s a quick example: RubyEngine re = RubyEngine.CurrentEngine; IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule string script = "puts ''Ruby and '' + var.to_s + '' together at last''" mod.SetVariable("var", ".NET") re.ExecuteCommand(script, mod); A couple things to note: 1. var.to_s is necessary because I don''t think IR is coercing CLR Strings to Ruby Strings yet. 2. I''m not sure why you need to pass in the default module to ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby otherwise. -Eric On 9/28/07, Phil Haack <haacked at gmail.com> wrote:> > Hi All, I posted some code for calling IronRuby code I found in the > mailing list onto the wiki. > > > > http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp > > > > RubyEngine re = RubyEngine.CurrentEngine; > > string script = "s = ''let us get started''" + Environment.NewLine > > + "i = s.length"); > > re.ExecuteCommand(script); > > > > The only thing is, I don''t know how to pass a .NET object to the context > of the RubyEngine so it can be called from within the script. I''d like to > update the example with that. > > > > Any help? > > > > Phil > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/e7a698c0/attachment.html
Eric Nicholson
2007-Sep-28 13:39 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Whoops ... missing some semicolons there. Can you tell I spend most of my day in VB.NET? On 9/28/07, Eric Nicholson <enicholson at gmail.com> wrote:> > Here''s a quick example: > > RubyEngine re = RubyEngine.CurrentEngine; > IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule > > string script = "puts ''Ruby and '' + var.to_s + '' together at last''" > > mod.SetVariable("var", ".NET") > > re.ExecuteCommand(script, mod); > A couple things to note: > 1. var.to_s is necessary because I don''t think IR is coercing CLR Strings > to Ruby Strings yet. > 2. I''m not sure why you need to pass in the default module to > ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby > otherwise. > > -Eric > > On 9/28/07, Phil Haack <haacked at gmail.com> wrote: > > > Hi All, I posted some code for calling IronRuby code I found in the > > mailing list onto the wiki. > > > > > > > > http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp > > > > > > > > RubyEngine re = RubyEngine.CurrentEngine; > > > > string script = "s = ''let us get started''" + Environment.NewLine > > > > + "i = s.length"); > > > > re.ExecuteCommand(script); > > > > > > > > The only thing is, I don''t know how to pass a .NET object to the context > > of the RubyEngine so it can be called from within the script. I''d like to > > update the example with that. > > > > > > > > Any help? > > > > > > > > Phil > > > > _______________________________________________ > > Ironruby-core mailing list > > Ironruby-core at rubyforge.org > > http://rubyforge.org/mailman/listinfo/ironruby-core > > > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/1e4d04f9/attachment.html
Stefan Hüttenrauch
2007-Sep-28 14:49 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Nice stuff Eric, Have you already passed real objects back and forth between Ruby and C#?? That would be the real cool stuff. I will hack a little tomorrow I guess, but if you have any tips already, that would be great. Thanks Stefan From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Eric Nicholson Sent: Freitag, 28. September 2007 15:40 To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Whoops ... missing some semicolons there. Can you tell I spend most of my day in VB.NET? On 9/28/07, Eric Nicholson < enicholson at gmail.com <mailto:enicholson at gmail.com>> wrote:Here''s a quick example: RubyEngine re = RubyEngine.CurrentEngine; IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule string script = "puts ''Ruby and '' + var.to_s + '' together at last''" mod.SetVariable("var", ".NET") re.ExecuteCommand(script, mod); A couple things to note: 1. var.to_s is necessary because I don''t think IR is coercing CLR Strings to Ruby Strings yet. 2. I''m not sure why you need to pass in the default module to ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby otherwise. -Eric On 9/28/07, Phil Haack <haacked at gmail.com> wrote: Hi All, I posted some code for calling IronRuby code I found in the mailing list onto the wiki. http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp RubyEngine re = RubyEngine.CurrentEngine; string script = "s = ''let us get started''" + Environment.NewLine + "i = s.length"); re.ExecuteCommand(script); The only thing is, I don''t know how to pass a .NET object to the context of the RubyEngine so it can be called from within the script. I''d like to update the example with that. Any help? Phil _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/d986f3ec/attachment-0001.html
Eric Nicholson
2007-Sep-28 14:55 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Well, technically between Ruby and VB.Net, but yeah, absolutely, works quite well too. The string above is actually a "real" object the way Ruby sees it, so it''s basically the same. I''ll put a quick example together if no one beats me to it. -Eric On 9/28/07, Stefan H?ttenrauch <stefan.huettenrauch at hpi.uni-potsdam.de> wrote:> > Nice stuff Eric, > > > > Have you already passed real objects back and forth between Ruby and C#?? > That would be the real cool stuff. I will hack a little tomorrow I guess, > but if you have any tips already, that would be great. > > > > Thanks > > Stefan > > > > *From:* ironruby-core-bounces at rubyforge.org [mailto: > ironruby-core-bounces at rubyforge.org] *On Behalf Of *Eric Nicholson > *Sent:* Freitag, 28. September 2007 15:40 > *To:* ironruby-core at rubyforge.org > *Subject:* Re: [Ironruby-core] Passing a .NET object to the RubyEngine... > > > > Whoops ... missing some semicolons there. Can you tell I spend most of my > day in VB.NET? > > On 9/28/07, *Eric Nicholson* < enicholson at gmail.com> wrote: > > Here''s a quick example: > > RubyEngine re = RubyEngine.CurrentEngine; > IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule > > string script = "puts ''Ruby and '' + var.to_s + '' together at last''" > > mod.SetVariable("var", ".NET") > > re.ExecuteCommand(script, mod); > > A couple things to note: > 1. var.to_s is necessary because I don''t think IR is coercing CLR Strings > to Ruby Strings yet. > 2. I''m not sure why you need to pass in the default module to > ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby > otherwise. > > -Eric > > On 9/28/07, *Phil Haack* <haacked at gmail.com> wrote: > > Hi All, I posted some code for calling IronRuby code I found in the > mailing list onto the wiki. > > > > http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp > > > > RubyEngine re = RubyEngine.CurrentEngine; > > string script = "s = ''let us get started''" + Environment.NewLine > > + "i = s.length"); > > re.ExecuteCommand(script); > > > > The only thing is, I don''t know how to pass a .NET object to the context > of the RubyEngine so it can be called from within the script. I''d like to > update the example with that. > > > > Any help? > > > > Phil > > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > > > > > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/dac01851/attachment.html
That''s what I was thinking too. Here''s what I put together: class Program { static void Main(string[] args) { RubyEngine re = RubyEngine.CurrentEngine; IScriptModule scriptModule = ScriptDomainManager.CurrentManager.Host.DefaultModule; string script = "require ''CSIronRuby''; puts ''Hello, '' + var.GetName.to_s + '' World!''"; MyName name = new MyName(); scriptModule.SetVariable("var", name); re.ExecuteCommand(script, scriptModule); Console.ReadLine(); } } public class MyName { public string Name = "Cory"; public string GetName() { return Name; } } For some reason, I was having difficulty getting it to output just Name - I just didn''t want to tear into it. Cory From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Stefan H?ttenrauch Sent: Friday, September 28, 2007 10:49 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Nice stuff Eric, Have you already passed real objects back and forth between Ruby and C#?? That would be the real cool stuff. I will hack a little tomorrow I guess, but if you have any tips already, that would be great. Thanks Stefan From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Eric Nicholson Sent: Freitag, 28. September 2007 15:40 To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Whoops ... missing some semicolons there. Can you tell I spend most of my day in VB.NET<http://VB.NET>? On 9/28/07, Eric Nicholson < enicholson at gmail.com<mailto:enicholson at gmail.com>> wrote: Here''s a quick example: RubyEngine re = RubyEngine.CurrentEngine; IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule string script = "puts ''Ruby and '' + var.to_s + '' together at last''" mod.SetVariable("var", ".NET") re.ExecuteCommand(script, mod); A couple things to note: 1. var.to_s is necessary because I don''t think IR is coercing CLR Strings to Ruby Strings yet. 2. I''m not sure why you need to pass in the default module to ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby otherwise. -Eric On 9/28/07, Phil Haack <haacked at gmail.com<mailto:haacked at gmail.com>> wrote: Hi All, I posted some code for calling IronRuby code I found in the mailing list onto the wiki. http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp RubyEngine re = RubyEngine.CurrentEngine; string script = "s = ''let us get started''" + Environment.NewLine + "i = s.length"); re.ExecuteCommand(script); The only thing is, I don''t know how to pass a .NET object to the context of the RubyEngine so it can be called from within the script. I''d like to update the example with that. Any help? Phil _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org <mailto:Ironruby-core at rubyforge.org> http://rubyforge.org/mailman/listinfo/ironruby-core -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/e69beed1/attachment-0001.html
Charles Oliver Nutter
2007-Sep-28 16:12 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Eric Nicholson wrote:> Here''s a quick example: > > RubyEngine re = RubyEngine.CurrentEngine; > IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule > > string script = "puts ''Ruby and '' + var.to_s + '' together at last''" > > mod.SetVariable("var", ".NET") > > re.ExecuteCommand(script, mod); > > A couple things to note: > 1. var.to_s is necessary because I don''t think IR is coercing CLR > Strings to Ruby Strings yet. > 2. I''m not sure why you need to pass in the default module to > ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby > otherwise.How can this work? In order for var to be available in the script, it would have to be added into the toplevel scope. This would either mean that var is now available in all toplevel scopes across the system (incompatible with Ruby) or that it would only be available in the current thread''s scope above toplevel (which would prevent seeing it in other threads. I''m a little confused. In JRuby we opted to not allow external variable binding into the eventual execution scope, because it seemed to violate that the scope should be created fresh for each script execution. - Charlie
Eric Nicholson
2007-Sep-28 17:28 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Someone at MS can probably answer this better than I, but I''m guessing that passing in the module explicitly to the ExecuteCommand statement is what makes this work. If you leave off that optional parameter the variable isn''t directly accessible. You can always create a new module fairly easily and pass that in as well if you''d rather. On 9/28/07, Charles Oliver Nutter <charles.nutter at sun.com> wrote:> > Eric Nicholson wrote: > > Here''s a quick example: > > > > RubyEngine re = RubyEngine.CurrentEngine; > > IScriptModule mod > ScriptDomainManager.CurrentManager.Host.DefaultModule > > > > string script = "puts ''Ruby and '' + var.to_s + '' together at last''" > > > > mod.SetVariable("var", ".NET") > > > > re.ExecuteCommand(script, mod); > > > > A couple things to note: > > 1. var.to_s is necessary because I don''t think IR is coercing CLR > > Strings to Ruby Strings yet. > > 2. I''m not sure why you need to pass in the default module to > > ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby > > otherwise. > > How can this work? In order for var to be available in the script, it > would have to be added into the toplevel scope. This would either mean > that var is now available in all toplevel scopes across the system > (incompatible with Ruby) or that it would only be available in the > current thread''s scope above toplevel (which would prevent seeing it in > other threads. I''m a little confused. In JRuby we opted to not allow > external variable binding into the eventual execution scope, because it > seemed to violate that the scope should be created fresh for each script > execution. > > - Charlie > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/75418b50/attachment.html
Sorry, ignore the require line in the script - that was cruft left over from something else I was doing and isn''t needed. Cory From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Cory Foy Sent: Friday, September 28, 2007 11:02 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... That''s what I was thinking too. Here''s what I put together: class Program { static void Main(string[] args) { RubyEngine re = RubyEngine.CurrentEngine; IScriptModule scriptModule = ScriptDomainManager.CurrentManager.Host.DefaultModule; string script = "require ''CSIronRuby''; puts ''Hello, '' + var.GetName.to_s + '' World!''"; MyName name = new MyName(); scriptModule.SetVariable("var", name); re.ExecuteCommand(script, scriptModule); Console.ReadLine(); } } public class MyName { public string Name = "Cory"; public string GetName() { return Name; } } For some reason, I was having difficulty getting it to output just Name - I just didn''t want to tear into it. Cory From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Stefan H?ttenrauch Sent: Friday, September 28, 2007 10:49 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Nice stuff Eric, Have you already passed real objects back and forth between Ruby and C#?? That would be the real cool stuff. I will hack a little tomorrow I guess, but if you have any tips already, that would be great. Thanks Stefan From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Eric Nicholson Sent: Freitag, 28. September 2007 15:40 To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Whoops ... missing some semicolons there. Can you tell I spend most of my day in VB.NET<http://VB.NET>? On 9/28/07, Eric Nicholson < enicholson at gmail.com<mailto:enicholson at gmail.com>> wrote: Here''s a quick example: RubyEngine re = RubyEngine.CurrentEngine; IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule string script = "puts ''Ruby and '' + var.to_s + '' together at last''" mod.SetVariable("var", ".NET") re.ExecuteCommand(script, mod); A couple things to note: 1. var.to_s is necessary because I don''t think IR is coercing CLR Strings to Ruby Strings yet. 2. I''m not sure why you need to pass in the default module to ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby otherwise. -Eric On 9/28/07, Phil Haack <haacked at gmail.com<mailto:haacked at gmail.com>> wrote: Hi All, I posted some code for calling IronRuby code I found in the mailing list onto the wiki. http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp RubyEngine re = RubyEngine.CurrentEngine; string script = "s = ''let us get started''" + Environment.NewLine + "i = s.length"); re.ExecuteCommand(script); The only thing is, I don''t know how to pass a .NET object to the context of the RubyEngine so it can be called from within the script. I''d like to update the example with that. Any help? Phil _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org <mailto:Ironruby-core at rubyforge.org> http://rubyforge.org/mailman/listinfo/ironruby-core -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/06bccb0e/attachment-0001.html
Phil Haack
2007-Sep-28 17:36 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Nice! I''ll update the wiki. This worked for me. From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Eric Nicholson Sent: Friday, September 28, 2007 6:38 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Here''s a quick example: RubyEngine re = RubyEngine.CurrentEngine; IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule string script = "puts ''Ruby and '' + var.to_s + '' together at last''" mod.SetVariable("var", ".NET") re.ExecuteCommand(script, mod); A couple things to note: 1. var.to_s is necessary because I don''t think IR is coercing CLR Strings to Ruby Strings yet. 2. I''m not sure why you need to pass in the default module to ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby otherwise. -Eric On 9/28/07, Phil Haack <haacked at gmail.com> wrote: Hi All, I posted some code for calling IronRuby code I found in the mailing list onto the wiki. http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp RubyEngine re = RubyEngine.CurrentEngine; string script = "s = ''let us get started''" + Environment.NewLine + "i = s.length"); re.ExecuteCommand(script); The only thing is, I don''t know how to pass a .NET object to the context of the RubyEngine so it can be called from within the script. I''d like to update the example with that. Any help? Phil _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/21ad9bf9/attachment.html
Charles Oliver Nutter
2007-Sep-28 17:48 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Eric Nicholson wrote:> Someone at MS can probably answer this better than I, but I''m guessing > that passing in the module explicitly to the ExecuteCommand statement is > what makes this work. If you leave off that optional parameter the > variable isn''t directly accessible. > > You can always create a new module fairly easily and pass that in as > well if you''d rather.Local variables aren''t stored in modules though; unless this is adding an attribute, which would seem really wrong. - Charlie
Eric Nicholson
2007-Sep-28 18:09 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
I believe there are two types of "Modules" at play here. I think a DLR "Module" is something more like a scope than the Ruby "Module". On 9/28/07, Charles Oliver Nutter <charles.nutter at sun.com> wrote:> > Eric Nicholson wrote: > > Someone at MS can probably answer this better than I, but I''m guessing > > that passing in the module explicitly to the ExecuteCommand statement is > > what makes this work. If you leave off that optional parameter the > > variable isn''t directly accessible. > > > > You can always create a new module fairly easily and pass that in as > > well if you''d rather. > > Local variables aren''t stored in modules though; unless this is adding > an attribute, which would seem really wrong. > > - Charlie > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/e52eabd8/attachment.html
Tomas Matousek
2007-Sep-28 19:45 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
This is part of the hosting API we provide for host applications so that they can pass objects to and from a dynamic language (be it Ruby or Python), execute some code within some scope etc. This API gradually undergoes major changes and it isn''t fully compatible with Ruby''s semantics today. We already have some design on "paper" (needs to be polished/reviewed still) that makes it right. It''s implementation will take some time though. The code bellow should kind of work (there is a little tweak to the variable binding in the Ruby compiler to allow it) until we provide some better way. Good news is that we found a way how to do the integration right for Ruby, so all features listed above (passing objects there and back, executing code, etc) will be available in future. Tomas From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Cory Foy Sent: Friday, September 28, 2007 8:02 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... That''s what I was thinking too. Here''s what I put together: class Program { static void Main(string[] args) { RubyEngine re = RubyEngine.CurrentEngine; IScriptModule scriptModule = ScriptDomainManager.CurrentManager.Host.DefaultModule; string script = "require ''CSIronRuby''; puts ''Hello, '' + var.GetName.to_s + '' World!''"; MyName name = new MyName(); scriptModule.SetVariable("var", name); re.ExecuteCommand(script, scriptModule); Console.ReadLine(); } } public class MyName { public string Name = "Cory"; public string GetName() { return Name; } } For some reason, I was having difficulty getting it to output just Name - I just didn''t want to tear into it. Cory From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Stefan H?ttenrauch Sent: Friday, September 28, 2007 10:49 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Nice stuff Eric, Have you already passed real objects back and forth between Ruby and C#?? That would be the real cool stuff. I will hack a little tomorrow I guess, but if you have any tips already, that would be great. Thanks Stefan From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Eric Nicholson Sent: Freitag, 28. September 2007 15:40 To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Whoops ... missing some semicolons there. Can you tell I spend most of my day in VB.NET<http://VB.NET>? On 9/28/07, Eric Nicholson < enicholson at gmail.com<mailto:enicholson at gmail.com>> wrote: Here''s a quick example: RubyEngine re = RubyEngine.CurrentEngine; IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule string script = "puts ''Ruby and '' + var.to_s + '' together at last''" mod.SetVariable("var", ".NET") re.ExecuteCommand(script, mod); A couple things to note: 1. var.to_s is necessary because I don''t think IR is coercing CLR Strings to Ruby Strings yet. 2. I''m not sure why you need to pass in the default module to ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby otherwise. -Eric On 9/28/07, Phil Haack <haacked at gmail.com<mailto:haacked at gmail.com>> wrote: Hi All, I posted some code for calling IronRuby code I found in the mailing list onto the wiki. http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp RubyEngine re = RubyEngine.CurrentEngine; string script = "s = ''let us get started''" + Environment.NewLine + "i = s.length"); re.ExecuteCommand(script); The only thing is, I don''t know how to pass a .NET object to the context of the RubyEngine so it can be called from within the script. I''d like to update the example with that. Any help? Phil _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org <mailto:Ironruby-core at rubyforge.org> http://rubyforge.org/mailman/listinfo/ironruby-core -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/edea60fb/attachment-0001.html
Phil Haack
2007-Sep-28 22:19 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
I updated the demo code in the wiki based on the code snippet here. http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp I?ll try and make sure it stays up to date. J Phil From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Tomas Matousek Sent: Friday, September 28, 2007 12:46 PM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... This is part of the hosting API we provide for host applications so that they can pass objects to and from a dynamic language (be it Ruby or Python), execute some code within some scope etc. This API gradually undergoes major changes and it isn?t fully compatible with Ruby?s semantics today. We already have some design on ?paper? (needs to be polished/reviewed still) that makes it right. It?s implementation will take some time though. The code bellow should kind of work (there is a little tweak to the variable binding in the Ruby compiler to allow it) until we provide some better way. Good news is that we found a way how to do the integration right for Ruby, so all features listed above (passing objects there and back, executing code, etc) will be available in future. Tomas From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Cory Foy Sent: Friday, September 28, 2007 8:02 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... That?s what I was thinking too. Here?s what I put together: class Program { static void Main(string[] args) { RubyEngine re = RubyEngine.CurrentEngine; IScriptModule scriptModule ScriptDomainManager.CurrentManager.Host.DefaultModule; string script = "require ''CSIronRuby''; puts ''Hello, '' + var.GetName.to_s + '' World!''"; MyName name = new MyName(); scriptModule.SetVariable("var", name); re.ExecuteCommand(script, scriptModule); Console.ReadLine(); } } public class MyName { public string Name = "Cory"; public string GetName() { return Name; } } For some reason, I was having difficulty getting it to output just Name ? I just didn?t want to tear into it. Cory From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Stefan H?ttenrauch Sent: Friday, September 28, 2007 10:49 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Nice stuff Eric, Have you already passed real objects back and forth between Ruby and C#?? That would be the real cool stuff. I will hack a little tomorrow I guess, but if you have any tips already, that would be great. Thanks Stefan From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Eric Nicholson Sent: Freitag, 28. September 2007 15:40 To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine... Whoops ... missing some semicolons there. Can you tell I spend most of my day in VB.NET? On 9/28/07, Eric Nicholson < enicholson at gmail.com <mailto:enicholson at gmail.com> > wrote: Here''s a quick example: RubyEngine re = RubyEngine.CurrentEngine; IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule string script = "puts ''Ruby and '' + var.to_s + '' together at last''" mod.SetVariable("var", ".NET") re.ExecuteCommand(script, mod); A couple things to note: 1. var.to_s is necessary because I don''t think IR is coercing CLR Strings to Ruby Strings yet. 2. I''m not sure why you need to pass in the default module to ExecuteCommand, but I wasn''t able to evaluate the variable in Ruby otherwise. -Eric On 9/28/07, Phil Haack <haacked at gmail.com> wrote: Hi All, I posted some code for calling IronRuby code I found in the mailing list onto the wiki. http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp RubyEngine re = RubyEngine.CurrentEngine; string script = "s = ''let us get started''" + Environment.NewLine + "i = s.length"); re.ExecuteCommand(script); The only thing is, I don''t know how to pass a .NET object to the context of the RubyEngine so it can be called from within the script. I''d like to update the example with that. Any help? Phil _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ironruby-core/attachments/20070928/cecc71ec/attachment.html
Josh Nursing
2007-Sep-30 19:24 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
BTW, Charles, congrats on the release of JRuby. Josh Nursing Charles Oliver Nutter wrote:
Charles Oliver Nutter
2007-Oct-01 02:23 UTC
[Ironruby-core] Passing a .NET object to the RubyEngine...
Josh Nursing wrote:> BTW, Charles, > > congrats on the release of JRuby.Well, it isn''t a new release yet; the current release is still the 1.0.1 maintenance release we cut this summer. I just blogged about the compiler being complete, and it will be shipped with the 1.1 release (candidate) in November. Thanks for the congrats though :) - Charlie