¡Creo que esta es una idea dinamita, y una característica que me encantaría tener! ¿Has pensado en cómo te gustaría interactuar con la función?
obj1 = Foo()
compiler.Recompile(Foo, '/some/path/myapp/newsrc/foo.blah');
obj2 = Foo()
// Would this be True?
type(obj1) == type(obj2)
Supongo que espera que las instancias existentes no se modifiquen al volver a compilar? Parece que sería más fácil con las funciones, siempre que conserven el mismo prototipo, pero hacerlo con clases parece que se volvería complicado.
Además, ¿qué hacer con el enhebrado?
Thread.start(wait 1; bar();); // bar is a function
compiler.Recompile(bar, '/some/path/myapp/newsrc/bar.blah');
Digamos que en nuestro hilo comenzamos a llamar a "bar" durante la recompilación. ¿Bloquea la llamada hasta que se complete la recompilación y luego llame a la nueva función? ¿La función anterior aún existe hasta que se complete la compilación? ¿Qué pasa si tenemos un puntero de función, después de la recompilación, dónde apunta? A la función original o a la nueva?
¿Alguien tiene alguna idea de cómo esto podría implementarse de una manera estrecha?
Voy a tener eso con los objetos. La idea es que actualicemos cuando no se ejecuta código en objetos actualizables. Luego serializamos todas las instancias, y actualizamos y re-conectamos. A continuación, vuelva a crear todas las instancias, deserialice y actualice todos los punteros. Voila, pedazo de la torta :-) – BarsMonster