IronRuby es un version del famoso lenguaje Ruby,el cual era practicamente desconocido hasta que salio Ruby on Rails, que se ejecuta en el .NET framework o el CLR en terminos mas tecnicos. Esto nos permite correr scripts de ruby en aplicaciones .NET e incluso permitir que nuestros scripts interactuen con objetos en .NET.
En mi caso yo necesitaba ejecutar un bloque de codigo que necesitaba ser modificado en tiempo de ejecucion, en otras palabras, necesitaba almacenar en mi base de datos un bloque de codigo que se iba utilizar para validacion y este codigo necesita ser modificado por otro usuario por medio de la parte de administracion de la aplicacion, ejecutar codigo dinamicamente en c# simplemente no es posible, lo mas cerca que pueden llegar es compilandolo y luego ejecutandolo lo cual aparte de ser una tarea que requiere mucho codigo no es muy eficiente, asi que decidi usar IronRuby para esto.
Uno de las caracteristicas importantes de IronRuby es que es un lenguaje con bastantes posibilidades para metaprogramacion. Metaprogramacion quiere decir que un programa puede modificarse el solo por medio del mismo codigo. Un ejemplo de las caracteristicas de metraprogramacion de ruby en la funcion eval, parecida a la de javascript, por ejemplo en ruby yo puedo ejecutar codigo de la siguiente manera
str="4/2" eval str #el resultado es 2
Lo que hace la funcion eval es ejecutar el codigo de la variable str y me devuele 2, comoq ue si yo tuviera una linea de codigo 4/2.
Descargando IronRuby
La ultima version a la fecha de este post es la 1.0 pueden descargarla aqui.
Ejecutando Codigo de IronRuby desde una Aplicacion .NET
Creamos un nuevo proyecto de tipo Consola en Visual Studio
Ahora necesitamos agregar las referencias que necesita IronRuby, los DLL se encuentras en la carpeta “bin” dentro del folder de instalacion de IronRuby, agreguen referencia a los DLL que se muestran en la imagen de abajo.
Y este es el codigo de la aplicacion:
using Microsoft.Scripting.Hosting; namespace IronRuby.Demostracion { class Program { static void Main(string[] args) { string script = "puts 'Hola mundo'"; ScriptEngine scriptEngine = IronRuby.Ruby.CreateEngine(); ScriptSource source = scriptEngine.CreateScriptSourceFromString(script); source.Execute(); } } }
El resultado es el siguiente:
Explicacion
La funcion puts en ruby en el equivalente a Console.Write en .NET, lo unico que hace es imprimir un string en consola, en Ruby no es necesiario usar parentesis para los parametros de un metodo, aunque es permitido, de tal forma que tambien pude haber utilizado “puts(‘Hola Mundo’)”.
Luego en las siguientes lineas de codigo despues de la variable script, primero creo un script engine con una funcionq ue ya viene dentro de IronRuby, con este Script engine luego creo un ScriptSource, el cual representa al codigo de mi script, para ejecutar el script solamente hay que llamar el metodo Execute de la clase ScriptSource. En caso de que el script retorn un objeto entonces el metodo Execute lo retorn como tipo Object.
En el siguiente post voy a demostrarles como interactuar con objetos .NET en ruby.
Related posts: