My application creates a single instance of the engine, and creates scopes 
for each request. 

-- Chuck

-- 
Chuck Durfee
Lead Software Architect
TSYS iSolutions, Golden
Email [email protected]




Ivan Porto Carrero <[email protected]> 
Sent by: [email protected]
09/02/2009 01:14 AM
Please respond to
[email protected]


To
[email protected]
cc

Subject
Re: [Ironruby-core] Guidance on embedding scripting in my Application






What I did in IronrubyMVC to allow controller classes etc to be reloaded 
was look in the globals if a class already exists and if it does remove 
the constant. That way it will always reload some the class.

http://github.com/casualjim/ironrubymvc/blob/79efbd0f5baf52d3fbfe8f21a0349d6343dc994b/IronRubyMvc/Core/RubyEngine.cs#L92

That being said. This  a pretty naive way of forcing reloads, I'm sure 
there is a better way but that one works for me atm.
I create scopes per request, so that would be your option #2 I guess
---
Met vriendelijke groeten - Best regards - Salutations
Ivan Porto Carrero
Blog: http://flanders.co.nz
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)



On Wed, Sep 2, 2009 at 8:39 AM, Martin Smith <[email protected]> 
wrote:
Thanks Jimmy!  This was quite helpful.

I've actually decided to go with 1 and 2.  Actually, this isn't
strictly speaking true...  If I'm running in debug, I recreate the
runtime with every invocation so I can test/run on the fly.  Thanks
for your help!

Best,
Martin

On Tue, Sep 1, 2009 at 12:39 PM, Jimmy
Schementi<[email protected]> wrote:
> Martin Smith wrote:
>
>> I'm looking (as you can see in my subject line) for a little guidance 
on the best
>> way to embed IronRuby into my Application.  I've already successfully
>> embedded ruby into the application, so these questions are more about 
the
>> nitty gritty details of embedding.  The application is mostly written 
in C# and
>> occasionally calls out to ruby to create UI components that are placed 
on
>> other UI components themselves created in either C# or ruby.  
Generally,
>> but not always, the C# code will need to call into ruby to do the 
initialization.
>>
>> I can think of a few ways to do this:
>> (1) At app startup spawn up a RubyEngine, execute a file that "warms 
up" the
>> engine and "requires" all or most of the ruby files that contain the 
classes
>> that will create the UI components
>> (2) At app startup create a new RubyEngine and do nothing.  Then, as
>> needed, issue commands to the runtime with a ScriptScope that require 
and
>> initialize UI components.
>> (3) Every time I need to execute new ruby code, create a new engine.
>
> Depends on what performance characteristics you want :) The DLR's 
isolation mechanism is a "ScriptRuntime", and actually only creates one 
ScriptEngine per language per ScriptRuntime. So you're option #3 would 
create a new ScriptRuntime to get any type of isolation between ruby-code 
executions. Option #1 and #2 are really no different, other than that #1 
will be warmed up and just compile the code you give it, which #2 will 
have to compile dependencies.
>
>> Really, I'm mostly thinking about 1 vs 2.  Are class definitions 
"shared"
>> between script scopes? More specifically, if I require the same file 
twice in
>> different script scopes will they point to the same code or will the 
runtime
>> need to recompile and re-jit the code for each individual script scope?
>
> Ruby constants, which includes classes and modules, are essentially 
globals, so they are stored on the global scope, which means they are 
accessible anywhere, especially between scopes. ScriptScope only isolates 
top-level locals and methods.
> _______________________________________________
> Ironruby-core mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/ironruby-core
>
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core



-----------------------------------------
The information contained in this communication (including any
attachments hereto) is confidential and is intended solely for the
personal and confidential use of the individual or entity to whom
it is addressed. If the reader of this message is not the intended
recipient or an agent responsible for delivering it to the intended
recipient, you are hereby notified that you have received this
communication in error and that any review, dissemination, copying,
or unauthorized use of this information, or the taking of any
action in reliance on the contents of this information is strictly
prohibited. If you have received this communication in error,
please notify us immediately by e-mail, and delete the original
message. Thank you 
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to