x86 est chiant à implémenter en hardware parce que trop complexe, le problème des CISC ne se pose pas du côté du software (enfin x86 spécifiquement a très peu de registres ce qui casse les pieds pendant la compilation, et il se trouve que la plupart des RISC en ont plus mais c'est une question indépendante). La solution pour les ingénieurs côté hard a été de traduire au vol les instructions x86 vers un microcode RISC bien choisi (qui peut changer selon le modèle du CPU) qui permet de faire des optims au vol; en gros c'est comme ça que x86 est resté un peu compétitif par rapport aux architectures RISC. Mais tout ça ne concerne pas trop l'auteur de compilateur.
Dans le cas de la JVM c'est l'auteur du compilateur (machin -> JVM) qui souffre (enfin les implémenteurs de machine virtuelle aussi mais pour d'autres raisons). Je connais assez mal la JVM mais les exemples que j'ai retenus sont les suivants : pas de support des appels terminaux, un modèle de dispatch très particulier qui convient bien à Java mais pas forcément à tous les langages OOs, tu as intérêt à avoir un modèle d'exceptions qui ressemble à celui de Java, etc. Enfin on a un peu le même genre de problèmes quand on compile vers du C d'ailleurs.
[^] # Re: Compilateur
Posté par gasche . En réponse au journal Nouveau projet OpenSource chez Microsoft: TypeScript. Évalué à 6.
x86 est chiant à implémenter en hardware parce que trop complexe, le problème des CISC ne se pose pas du côté du software (enfin x86 spécifiquement a très peu de registres ce qui casse les pieds pendant la compilation, et il se trouve que la plupart des RISC en ont plus mais c'est une question indépendante). La solution pour les ingénieurs côté hard a été de traduire au vol les instructions x86 vers un microcode RISC bien choisi (qui peut changer selon le modèle du CPU) qui permet de faire des optims au vol; en gros c'est comme ça que x86 est resté un peu compétitif par rapport aux architectures RISC. Mais tout ça ne concerne pas trop l'auteur de compilateur.
Dans le cas de la JVM c'est l'auteur du compilateur (machin -> JVM) qui souffre (enfin les implémenteurs de machine virtuelle aussi mais pour d'autres raisons). Je connais assez mal la JVM mais les exemples que j'ai retenus sont les suivants : pas de support des appels terminaux, un modèle de dispatch très particulier qui convient bien à Java mais pas forcément à tous les langages OOs, tu as intérêt à avoir un modèle d'exceptions qui ressemble à celui de Java, etc. Enfin on a un peu le même genre de problèmes quand on compile vers du C d'ailleurs.