[Ironruby-core] IronRuby, Silverlight and executing code dynamically in the browser

Charles Strahan charles.c.strahan at gmail.com
Thu Jul 22 18:16:43 EDT 2010


Hey Jonas, nice running into here (love your blog)!

You could try writing your own virtual filesystem.  Check out my blog for
some inspiration:
http://charlesstrahan.com/blog/2010/05/05/enumerating-resources-in-silverlight/

I'm currently working on just that.  My current project (porting RPG Maker
XP to Silverlight - already finished the desktop port) requires such
functionality for enumerating file system entries (think Dir.glob), and
saving game state to "disk".  I'm trying to tease out my VFS into something
extensible; you can find my code here:
http://github.com/cstrahan/silverlightvfs

There's not much there, but perhaps the PathUtil could be handy:
http://github.com/cstrahan/silverlightvfs/blob/master/src/SilverlightVFS/PathUtil.cs

The more I work on abstracting out the core of the VFS, the more I feel like
it's hard to make a "one-fits-all" sort of solution; the use cases can vary
a lot.  I almost think it would be better to publish some guidance and a
reference implementation, rather than try to create some architecture that
is either too abstract or, conversely, not extensible enough to be useful...

Let me know where you go with your project - it sounds cool.

Cheers,
-Charles


On Thu, Jul 22, 2010 at 8:13 AM, Jonas Follesø <jonas at follesoe.no> wrote:

> I'm toying around with the idea of a simple in-browser "coding environment"
> for IronRuby, think JSFiddle but for DLR languages. I'm fairly new to
> IronRuby, but have lots of Silverlight experience. I have gotten the basics
> up and running, but have ran into a couple issues.
>
> My initial idea was to use the virtual file system the IronPython
> Silverlight Host creates when it downloads files included using <script>
> tags. However, turns out this virtual file system is read-only, so I cannot
> write new Ruby files after the application is loaded.
>
> My second idea was to simply use the DynamicEngine and simply execute the
> code. The code I've written looks something like this:
>
>             def run_tests
>                 code = window.eval("codeEditor.getCode()").to_s
>                 test = window.eval("testEditor.getCode()").to_s
>
>                 puts code
>
>                 begin
>                     dyneng = DynamicEngine.new
>                     engine = dyneng.runtime.get_engine("ruby")
>                     scope = dyneng.create_scope
>
>                     errorFormatter = ErrorFormatter::Sink.new
>
>                     resultCode =
> engine.create_script_source_from_string(code).compile(errorFormatter).execute(scope)
>                     resultTest =
> engine.create_script_source_from_string(test).compile(errorFormatter).execute(scope)
>
>                     puts resultCode
>                     puts resultTest
>                 rescue => ex
>                     puts ex.to_s
>                 end
>             end
>
> It basically gets two pieces of Ruby code, then creates a new engine,
> creates script  source, compiles it, and then executes it. If I do this with
> valid Ruby code everything works as expected. However, if I try to execute
> invalid code I was expecting my error handler to execute. But this does not
> happen. All I get is an error in the FireBug console saying:
>
> "Error calling method on NPObject!"
>
> So does anyone have suggestions on how to handle errors when executing the
> code dynamically in the browser. Secondly, does anyone have suggestions for
> alternative approaches to implementing this - i.e. make the virtual file
> system writable (write to isolated storage perhaps?).
>
> Best regards,
> Jonas Follesø
>
> _______________________________________________
> 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/20100722/e4af87b5/attachment-0001.html>


More information about the Ironruby-core mailing list