Pour compléter: actuellement, les moteurs d'exécution (que ce soit Javascript ou Java) sont configurés pour être performant sur du code écrit "à la main" (ou par javac avec peu de transformations). Il est donc pertinent, quand on génère du code, de générer quelque chose qui ressemble à du code écrit à la main, et qu'ils savent très bien optimiser. Alors que plus on s'éloigne de ça, plus on se retrouve avec des cas ou l'optimiseur n'arrive pas à comprendre ce qu'on a voulu faire.
Cela arrive aussi quelquefois avec les compilateurs C. Il y a des cas connus où une fonction memcpy optimisée à la main (pour faire des alignements mémoire, copier des gros bouts d'un coup, etc), finissait par être moins rapide que du code "naïf" optimisé par le compilateur C.
Enfin, je précise qu'il existe des optimiseurs de bytecode java. Je pense par exemple à ProGuard: https://www.guardsquare.com/en/proguard , dont la FAQ donne quelques idées de ce qui n'est normalement pas fait par javac, et laissé au soin du runtime. En plus, ProGuard a la bonne idée d'être sous licence GPL ce qui permet de jeter un œuil dedans.
[^] # Re: logique pour Google
Posté par pulkomandy (site web personnel, Mastodon) . En réponse au journal Grumpy : un nouveau concurrent à pythran. Évalué à 3.
Pour compléter: actuellement, les moteurs d'exécution (que ce soit Javascript ou Java) sont configurés pour être performant sur du code écrit "à la main" (ou par javac avec peu de transformations). Il est donc pertinent, quand on génère du code, de générer quelque chose qui ressemble à du code écrit à la main, et qu'ils savent très bien optimiser. Alors que plus on s'éloigne de ça, plus on se retrouve avec des cas ou l'optimiseur n'arrive pas à comprendre ce qu'on a voulu faire.
Cela arrive aussi quelquefois avec les compilateurs C. Il y a des cas connus où une fonction memcpy optimisée à la main (pour faire des alignements mémoire, copier des gros bouts d'un coup, etc), finissait par être moins rapide que du code "naïf" optimisé par le compilateur C.
Enfin, je précise qu'il existe des optimiseurs de bytecode java. Je pense par exemple à ProGuard: https://www.guardsquare.com/en/proguard , dont la FAQ donne quelques idées de ce qui n'est normalement pas fait par javac, et laissé au soin du runtime. En plus, ProGuard a la bonne idée d'être sous licence GPL ce qui permet de jeter un œuil dedans.