Archive for September 2008
It looks incredible, but this may be the first satnav – only there’s no sat, so maybe it’s just a nav…
Monkeypatching is the practice of redefining methods in classes at runtime. According to this Wikipedia article, the exact definition varies between the Ruby and Python communities. Some think it’s a good thing, while others take a different view. If you want to prevent it from happening, here’s an answer : make methods immutable.
Even though I’ve been focussing on Python today, I couldn’t let this Tuesday pass without writing something Ruby related. Silverline is a Ruby on Rails plugin that allows you to write client side Ruby (courtesy of Silverlight.) Here’s how it works:
Having posted a number of times about Ruby over the last few months, I thought I should also write a bit about Python. The first thing I decided to try and do was to run some IronPython from C#. I downloaded version 2.0 beta 5, which includes the latest version of the DLR. I created a Console Application and added references to Microsoft.Scripting.dll and Microsoft.Scripting.Core.dll – the assemblies that constitute the DLR. I also added a reference to IronPython.dll and IronPython.Modules.dll. I decided to try to output some text, set a variable in IronPython and retrieve the value in C#. Here’s the code:
ScriptRuntimeSetup setup = new ScriptRuntimeSetup(); setup.LanguageSetups.Add(IronPython.Hosting.Python.CreateLanguageSetup(null)); ScriptRuntime runtime = new ScriptRuntime(setup); runtime.IO.RedirectToConsole(); ScriptEngine engine = runtime.GetEngine("IronPython"); ScriptScope scope = engine.CreateScope(); ScriptSource source = engine.CreateScriptSourceFromString("print 'Hello World'\r\na=1", SourceCodeKind.Statements); source.Execute(scope); Console.WriteLine(scope.GetVariable("a"));
I’m impressed that C# and IronPython can interact like this. The possibilities for extending applications with runtime dynamic code are intriguing – worth looking into.