Finalmente terminé de programar la tesis, increíble!. Me llevó unas dos semanas solucionar el último problema que era poder acceder al registro EBP y al stack pointer para obtener el return value de un método, pero nada que 52 líneas de C no puedan solucionar :D, es un reverendo quilombo el JIT de mono, «sepanlón». Ya desde hace unos días me puse a escribir el informe (motivado porque mi directora de tesis me retó porque todavía no había escrito nada :D) y hoy tuve una reunión para coordinar bien sobre en qué entrar en detalles. Para fines de octubre espero ya poder tener el documento prácticametne terminado y el código…
-
-
JoinPoint Language Definition
Luego de unos 15 días intensos sobre mi tesis ya tengo andando una pequeña parte andando de lo que será la nueva API, funcionando e integrada con el JIT. Antes de comentar como funciona vamos por el primer ejemplo que consta de dos partes. Por un lado una clase común y corriente que simularía ser la aplicación : using System; public class Normal { public Normal() { Metodo1(26); } public void Metodo1(int i) { Console.WriteLine("Aca"); } static public void Main(string [] args) { new Normal(); } } Y por otro una clase que solo tiene definiciones de JoinPoints (pueden estar mezcladas, no hace falta separarlo) using System; using Weaving; public…
-
Se fue el último …
Así es, costó más de lo pensado, pero luego de dos semanas reescribiendo mi último trabajo práctico finalmente obtuve ese glorioso 5 que hace que en mi libreta tenga firmada absolutamente todas las materias necesarias para recibirne :). Queda solo un pasito más por dar, que es terminar y presentar mi Tesis de Ingeniería en Informática, cosa que no va a demorar más de unos meses y que se podría decir que está al 40%, quedando el tramo más fácil.
-
Pattern matching made easy
Siguiendo en carrera para ir cerrando problemas para mi tesis en esta oportunidad necesité buscar una manera simple de hacer pattern matching. El uso que le iba a dar era muy simple y no necesitaba mucho poder a la hora de las expresiones que se iban a definir. La idea es poder definir qué métodos quiere uno interceptar usando algún patrón. Por ejemplo, si queremos ejecutar cierto código antes de cualquier método de la clase Test, simplemente debería bastar con poder especificar «Test:* (*)». En este caso acepto cualquier método con cualquier cantidad de parámetros (puede ser vacío). O si queremos anticipar las llamadas a ToString podríamos definir «*:ToString ()».…
-
Generando assembler
En esta oportunidad para mi Tesis necesité ver cómo modificar el assembler generado por el JIT para agregar instrucciones antes y después de la llamada a un método. El código assembler generado originalmente es el siguiente : 00000000 (Test_Bar): (bb):3 0: 55 push %ebp 1: 8b ec mov %esp,%ebp 3: 83 ec 08 sub $0x8,%esp 6: 83 ec 0c sub $0xc,%esp 9: 68 c0 8f 05 00 push $0x58fc0 e: e8 e5 fd ff ff call fffffdf8 (Test_Bar +0xfffffdf8) 13: 83 c4 10 add $0x10,%esp (bb):1 16: c9 leave 17: c3 ret Mi primer intento fue fácil y consistió en ejecutar una función desde assembler antes de cada método generado…
-
Mono Internal Calls
Para mi tesis una de las cosas que tenía que lograr era pasar datos desde una aplicación escrita en C# (en realidad en cualquier lenguaje soportado) y el JIT. No quiero entrar en mucho detalle del por qué tengo que hacerlo ni cómo (porque la verdad esto último todavía no lo tengo resuelto :P). Empezando a investigar caí en Embedding Mono, un articulo donde explican cómo embeber Mono en tu aplicación, por ejemplo para permitir plugins en .NET. El artículo tiene poco que ver con lo que yo estoy haciendo, pero me orientó en mi tarea. Con Mono tenemos dos formas de ejecutar código nativo : P/Invoke e Internall Calls.…
-
emerge -av life
Ha pasado un buen rato, y la verdad que no ha pasado mucho en mi vida. Estoy bastante ocupado con boludeces de la facultad (trabajos, entregas, parciales, etc) y principalmente con mi tesis que dio un giro que no me esperaba :), se recorto por todos lados lo que yo tenía pensado hacer (o más bien lo que yo había entendido que tenía que hacer :D). Resumido en un párrafo de un mail en la charla con uno de mis directores de Tesis : Tal vez para resumir mi idea sobre el proyecto, lo que estarías haciendo es un «reificador de mensajes entre objetos», configurable de forma que la reificación…
-
Random Links
Antes de perder el txt que tengo con los links leidos y pendientes, voy a postear algunos de los que estuve leyendo para mi tesis sobre AOP : phpAspect : Aspect-Orient Programming for PHP AspectC# : Aspectos para C# AspectJ : Uno de los conocidos Pythius : Aspectos en Python JRockit : Algo similar a lo que apunta mi trabajo 🙂 Espero en estos días terminar finalmente la especificación del lenguaje para darla a revisón y pasar a lo siguiente. También espero empezar a usar este especio más seguido para llevar mi «diario» de tesis, ya que este primer post sale bien descolgado :).