En teoría, sí, se puede hacer un JIT para C++. Podría aprovechar algunas características de la arquitectura subyacente para optimizar el código agresivamente. También vendría con el inconveniente de hacer que la aplicación tarde más tiempo en cargarse en tiempo de ejecución.
Por supuesto, no habría recolección de basura y por lo tanto la sobrecarga debido a ello, pero el factor de optimización estaría allí. Tiene alguien trabajó en esto. ¿Hay documentos, herramientas sobre esto? ¿Qué tan bueno será este enfoque?
Big error aquí. La imposición de GC en general para cada tipo definido por el usuario es una sobrecarga importante. Es una de las razones por las que Android, iOS y Windows Mobile han recurrido a C/C++ para aplicaciones de alto rendimiento a pesar de haber comenzado a tratar de usar solo máquinas virtuales administradas inicialmente.
Por supuesto, el nivel adicional de direccionamiento indirecto significa que el GC es libre de hacer cosas como la memoria compacta, pero un programa C/C++ optimizado ya estaría trabajando con la memoria compactada desde el principio. También significaría que la memoria está más fragmentada inicialmente, que es un asesino de rendimiento para el tipo de aplicaciones de alto rendimiento en las que C++ es bueno (una es la que maneja búferes contiguos grandes, por ejemplo, procesamiento de video, trazado de rayos o audio tratamiento).
También convertir cada instancia de UDT en una referencia significa que todo está en el montón, lo que efectivamente está convirtiendo las operaciones que originalmente son unos pocos ciclos de reloj en cientos.
Dicho esto, para llegar al corazón de su pregunta, sin duda, el código C++ se puede generar usando JIT, pero puede que no existan razones tan convincentes para hacerlo dada la naturaleza estática en la que la gente generalmente trabaja con código C++.
[Una búsqueda en Google de "Clang" + "JIT"] (https://www.google.com/search?q=clang+jit) obtiene mucha información. – ruakh
Google hace algo interesante cuando actualiza Chrome ... El programa se descompila parcialmente, de modo que se obtiene una forma algo simbólica, luego la actualización se aplica como un parche a ese formulario, y luego se compila de nuevo. Además, en los tiempos en que la gente escribía programas polimórficos que se reescribían en el tiempo de ejecución (por ejemplo, cuando detectan que una condición 'si' nunca será falsa, simplemente reemplazan la instrucción con' nop'). Entonces, no hay ninguna razón por la cual esto no debería ser factible. Ni siquiera estoy mencionando "posible", porque sabemos que ese es el caso. –
De hecho, pueden optimizar mejor, pero no es así. –