2010-08-25 8 views
6

¿Están los lenguajes basados ​​en LLVM sin GIL, dirigidos principalmente para la ejecución de JIT que permite recargar PARTE del código sobre la marcha?Buscando lenguaje basado en LLVM que permite recargar parte del binario sobre la marcha

Como volver a compilar 1 clase y volver a cargarla sin detener todo el programa.

¿Alguien ha intentado eso?

¿Hay alguna posibilidad de hacer eso con clang (sin duda, con gran cantidad de desarrolladores de precaución, restricción y manejo manual del estado)?

Respuesta

2

¡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?

+0

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

0

Hmm, no se me ocurre nada en la parte superior de la cabeza. El único producto importante en el que puedo pensar es JRebel, pero eso es para Java.

Cuestiones relacionadas