[Vedi la cronologia delle modifiche per una risposta abbastanza diversa che ora è fondamentalmente obsoleta.]
Sì, ci sono un paio di compilatori JIT per C e / o C ++.
CLing (come puoi immaginare dal gioco) è basato su Clang / LLVM. Funziona come un interprete. Cioè, gli dai un codice sorgente, un comando per farlo funzionare e funziona. L'enfasi qui è principalmente sulla convenienza e sulla compilazione veloce, non sull'ottimizzazione massima. In quanto tale, sebbene tecnicamente sia una risposta alla domanda stessa, questo non si adatta molto bene alle intenzioni dell'OP.
Un'altra possibilità è NativeJIT . Questo risponde alla domanda in qualche modo in modo diverso. In particolare, non accetta il codice sorgente C o C ++, lo compila ed esegue. Piuttosto, è un piccolo compilatore che puoi compilare nel tuo programma C ++. Accetta un'espressione che è fondamentalmente espressa come EDSL all'interno del tuo programma C ++ e genera un codice macchina effettivo da quello, che puoi quindi eseguire. Ciò si adatta molto meglio con un framework in cui è possibile compilare la maggior parte del programma con un normale compilatore, ma con alcune espressioni che non si conosceranno fino al runtime, che si desidera eseguire con qualcosa che si avvicina alla velocità di esecuzione ottimale. / p>
Per quanto riguarda l'apparente intento della domanda originale, penso che il punto fondamentale della mia risposta originale sia ancora valido: mentre un compilatore JIT può adattarsi a cose come dati che variano da un'esecuzione all'altra , o anche variando dinamicamente durante una singola esecuzione, la realtà è che questo fa relativamente poca differenza almeno come regola generale. Nella maggior parte dei casi, l'esecuzione di un compilatore in fase di esecuzione significa che è necessario rinunciare a un bel po 'di ottimizzazione, quindi il meglio che si spera di solito è che è simile alla velocità di un compilatore convenzionale.
Sebbene sia possibile postulare situazioni in cui le informazioni disponibili a un compilatore JIT potrebbero consentirgli di generare codice sostanzialmente migliore di un compilatore convenzionale, casi di questo accadimento nella pratica sembrano essere piuttosto insoliti (e in la maggior parte dei casi in cui sono stato in grado di verificarne l'accadimento, era in realtà dovuta a un problema nel codice sorgente, non con il modello di compilazione statico).