In teoria, sì, è possibile creare un JIT per C++. Potrebbe trarre vantaggio da alcune cose nell'architettura sottostante per ottimizzare in modo aggressivo il codice. Avrebbe anche lo svantaggio di rendere l'applicazione più lunga da caricare in fase di esecuzione.
Naturalmente, non ci sarebbe stato garbage collection e quindi il sovraccarico dovuto ad esso, ma il fattore di ottimizzazione sarebbe lì. Ha qualcuno ha lavorato su questo. Ci sono documenti, strumenti su questo? Quanto è buono questo ?
Grande equivoco qui. Imporre GC su tutta la linea per ogni tipo definito dall'utente è un overhead importante. È uno dei motivi per cui i dispositivi mobili Android, iOS e Windows sono tutti rivolti a C/C++ per applicazioni ad alte prestazioni, nonostante l'iniziale tentativo di utilizzare inizialmente solo macchine virtuali gestite.
Ovviamente il livello aggiuntivo di riferimento indiretto indica che il GC è libero di fare cose come la memoria compatta, ma un programma C/C++ ottimizzato funzionerebbe già con la memoria compattata dall'inizio. Significherebbe anche che la memoria è inizialmente più frammentata, che è un killer delle prestazioni per il tipo di applicazioni ad alte prestazioni con C++ (una che si occupa di buffer ampi e contigui, ad esempio, come l'elaborazione video, ray tracing o audio in lavorazione).
Inoltre, trasformare ogni istanza UDT in un riferimento significa che tutto è nell'heap, il che sta effettivamente trasformando le operazioni che in origine sono un paio di cicli di clock in centinaia.
Detto questo, per arrivare al cuore della tua domanda, certo, il codice C++ può essere costruito usando JIT, ma potresti scoprire che non ci sono davvero motivi così convincenti per farlo dato cose come la natura statica in cui le persone generalmente lavorano con il codice C++.
[Una ricerca di Google per "Clang" + "JIT"] (https://www.google.com/search?q=clang+jit) richiama molte informazioni. – ruakh
Google fa qualcosa di interessante quando aggiorna Chrome ... Il programma viene parzialmente decompilato, in modo da ottenere una forma un po 'simbolica, quindi l'aggiornamento viene applicato come una patch per quel modulo e quindi viene ricompilato. Inoltre, ai vecchi tempi le persone scrivevano programmi polimorfi che si riscrivevano in fase di esecuzione (ad esempio, quando rilevano che una condizione 'if' non sarà mai falsa, sostituiranno semplicemente l'istruzione con un' nop'). Quindi, non c'è motivo per cui questo non dovrebbe essere fattibile. Non sto nemmeno menzionando "possibile", perché sappiamo che è il caso. –
Possono davvero ottimizzare meglio, ma non lo fanno. –