Question

Supposons que vous ayez besoin d'un compilateur C.Il serait préférable d'écrire ce compilateur dans une langue semblable à C, compte tenu de la complexité d'un compilateur de ce degré.Au mieux, le compilateur C serait écrit en C, mais cela nécessiterait un compilateur C pour commencer.Si une erreur est faite dans la fabrication de l'une des premières itérations des compilateurs, elle pourrait se propager.Comment les compilateurs assurent-ils que cela ne se produit pas?Évidemment, aucun code n'est impeccable, pas même le processeur n'est, mais si vous n'avez pas encore mesuré la stabilité, vous ne savez même pas si votre compilateur est stable.Quelles hypothèses sont faites et comment est-elle justifiée?J'imagine que ce serait aussi dépend de l'architecture.

Edit: par stabilité, je veux dire que le code fonctionne comme prévu.

Était-ce utile?

La solution

Le mot que les écrivains compilateurs utilisent pour cela est "Conforme".Un compilateur qui implémente correctement la spécification de langue est conforme.Il existe des entreprises qui, dans le cadre de leur entreprise, vendent des tests de conformité pour diverses normes, y compris les langages de programmation.

Il est rare que des erreurs se propagent via des générations de compilateur par accident (bien que C'est arrivé à cet effet ).

Autres conseils

Il arrive que les compilateurs contiennent des erreurs subtiles.Aucune erreur flagrante, car des erreurs flagrantes seraient détectées et fixées.

Un compilateur qui est lui-même compilé par un compilateur avec des erreurs subtiles aura tendance à avoir des erreurs flagrantes.Ils seront faciles à détecter car ils sont si flagrants.Ils seront difficiles à résoudre car ces erreurs flagrantes seront produites par un code source parfaitement fine, de sorte que quiconque veut résoudre ce problème aura du mal à trouver le problème réel.

La solution consistera à créer un compilateur de qualité suffisante que les bogues sont très rares et extrêmement rare dans le compilateur.Nous nous attendons également à ce que les bugs compilateurs affectent plus de code très compliqué, de sorte que le rédacteur compilateur doit écrire du code simple et suit des modèles de codage communs.

Une réponse est testant, teste, test.Par exemple.GCC est livré avec un ensemble de tests toujours en croissance vérifiant chaque fois que le compilateur est construit.De nombreux compilateurs sont tenus de transmettre le soi-disant Triple Test: Compiler le code de votre compilateur C à l'aide du compilateur A, donnant C_1;Compiler C avec C_1 Donner C_2, compiler C avec C_2 Donner C_3.Maintenant, C_2 et C_3 ont été compilés avec C et doivent être égaux.Sinon, quelque chose de poisson se passe.

Jetez un coup d'oeil à Regher's "intégré à un académie" blog, il est l'une des personnes qui travaillent autour duLes outils de compilateur LLVM et touchent régulièrement les outils et les techniques utilisées pour améliorer le compilateur (ou automatiser des parties de son bâtiment).

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top