2010-08-25 9 views
6

I linguaggi basati su LLVM GIL-less sono destinati principalmente all'esecuzione JIT che consente di ricaricare PARTE del codice al volo?Ricerca del linguaggio basato su LLVM che consente di ricaricare al volo parte del codice binario

Come ricompilare 1 classe e ricaricarla senza arrestare l'intero programma.

Chiunque ci ha provato?

Qualsiasi possibilità di farlo con clang (sicuramente, con molta cautela per gli sviluppatori, restrizioni e gestione manuale dello stato)?

risposta

2

Penso che questa sia un'idea di dinamite e una funzione che mi piacerebbe avere! Hai pensato a come vorresti interfacciarti con la funzione?

obj1 = Foo() 
compiler.Recompile(Foo, '/some/path/myapp/newsrc/foo.blah'); 
obj2 = Foo() 
// Would this be True? 
type(obj1) == type(obj2) 

Suppongo che ci si aspetti che le istanze esistenti rimangano invariate dal ricompilare? Sembra che sarebbe più semplice con le funzioni, a patto che abbiano mantenuto lo stesso prototipo, ma farlo con le classi sembra essere un po 'disordinato.

Inoltre, cosa fare della filettatura?

Thread.start(wait 1; bar();); // bar is a function 
compiler.Recompile(bar, '/some/path/myapp/newsrc/bar.blah'); 

Diciamo che nella nostra discussione abbiamo cominciare a chiamare "bar" durante la ricompilazione. Il blocco delle chiamate viene eseguito fino a quando la ricompilazione non viene completata e quindi chiama la nuova funzione? La vecchia funzione esiste ancora fino al completamento della compilazione? Cosa succede se abbiamo un puntatore a funzione, dopo la ricompilazione, dove punta? Alla funzione originale o alla nuova?

Qualcuno ha qualche idea su come questo potrebbe essere implementato in modo stretto?

+0

Ho intenzione di farlo con gli oggetti. L'idea è che aggiorniamo quando nessun codice è in esecuzione in oggetti aggiornabili. Quindi serializziamo tutte le istanze e facciamo l'aggiornamento e il ricollegamento. Quindi ricrea tutte le istanze, deserializza e aggiorna tutti i puntatori. Voila, pezzo di torta :-) – BarsMonster

0

Hmm, non riesco a pensare a qualcosa fuori dalla mia testa. L'unico prodotto importante che posso pensare è JRebel, ma questo è per Java.