[Voir l'historique des modifications pour une réponse très différente, à présent obsolète.]
Oui, il existe deux compilateurs JIT pour C et / ou C ++.
Cling (comme vous pouvez le deviner dans le jeu) est basé sur Clang / LLVM. Il agit comme un interprète. Autrement dit, vous lui donnez du code source, vous lui donnez une commande et il s'exécute. L'accent est mis ici principalement sur la commodité et la compilation rapide, pas sur l'optimisation maximale. En tant que tel, bien que techniquement une réponse à la question elle-même, cela ne convient pas vraiment à l'intention du PO.
Une autre possibilité est NativeJIT . Cela correspond à la question un peu différemment. En particulier, il n'accepte pas le code source C ou C ++, ne le compile pas et ne l'exécute pas. C'est plutôt un petit compilateur que vous pouvez compiler dans votre programme C ++. Il accepte une expression qui est fondamentalement exprimée sous la forme d'un EDSL dans votre programme C ++ et génère le code machine réel à partir de celui-ci, que vous pouvez ensuite exécuter. Cela correspond beaucoup mieux à un cadre dans lequel vous pouvez compiler la plupart de votre programme avec un compilateur normal, tout en ayant quelques expressions que vous ne saurez pas avant l'exécution, que vous voulez exécuter avec quelque chose qui approche de la vitesse d'exécution optimale.
En ce qui concerne l’intention apparente de la question initiale, je pense que l’essentiel de ma réponse reste valable: même si un compilateur JIT peut s’adapter, par exemple, à des données qui varient d’une exécution à l’autre, ou qui varient même de manière dynamique au cours d’une exécution unique, la réalité est que cela fait relativement peu de différence, du moins en règle générale. Dans la plupart des cas, l'exécution d'un compilateur au moment de l'exécution signifie que vous devez renoncer à un peu d'optimisation. Par conséquent, le mieux que vous puissiez espérer, c'est qu'il soit presque aussi rapide que ce qu'un compilateur traditionnel produirait.
Bien qu'il soit possible de postuler des situations dans lesquelles les informations disponibles pour un compilateur JIT pourraient lui permettre de générer un code nettement supérieur à celui d'un compilateur conventionnel, il semble en pratique que cela se produise dans la pratique (et dans la plupart des cas où j'ai pu vérifier c’est vraiment dû à un problème dans le code source, pas au modèle de compilation statique).