Stroustrup affirme que Cfront, le premier compilateur C ++, a été écrit en C ++ ( FAQ Stroustrup ).
Cependant, comment est-il possible que le premier compilateur C ++ soit écrit en C ++?
Le code qui compose le compilateur doit également être compilé et le premier compilateur C ++ n'aurait donc pas pu être écrit en C ++, n'est-ce pas?
Réponses:
La clé est ici:
La première version de Cfront n'a donc pas été écrite en C ++, mais plutôt dans le langage intermédiaire. La possibilité de créer des compilateurs C et des pré-processeurs directement en C a entraîné de nombreuses innovations (et d’ énormes lacunes en matière de sécurité ) en C. Vous écrivez donc votre nouveau préprocesseur qui transforme votre code "C avec classes" en C (car C peut faire quoi que ce soit) et ensuite vous utilisez "C with Classes" pour écrire un compilateur C ++ (non pas que vous ne puissiez pas le faire en C, cela prendrait un moment) puis vous utilisez ce compilateur C ++ pour écrire un compilateur plus efficace / complet en C ++. Je l'ai?
la source
C'était bootstrapped. Dès qu'une fonctionnalité C ++ a été ajoutée à cfront, cfront peut également utiliser cette fonctionnalité à partir de ce moment (mais pas pour implémenter cette fonctionnalité). Cela a fonctionné car cfront avait la possibilité de convertir le code C ++ en code C. Ainsi, si une nouvelle plate-forme venait à apparaître, vous pourriez utiliser cfront sur une autre plate-forme pour convertir cfront de C ++ en C, puis utiliser le compilateur C de la nouvelle plate-forme pour terminer la compilation de C en code objet.
la source
Je pense que BS répond à cette question:
Il a d'abord créé quelque chose qu'il a appelé "C avec classes", implémenté par un simple préprocesseur en C. Il s'agissait essentiellement de C ++, mais le préprocesseur n'a fait que peu ou pas de vérification. Il a ensuite utilisé cela pour écrire Cfront, la version plus puissante du traducteur de C ++ en C, avec vérification de type, tables de symboles, etc.
la source
J'ajouterai cette réponse car aucune réponse ne couvrait cet aspect.
Techniquement, vous n'avez pas besoin d'un logiciel pour compiler du code. Tant que vous avez les spécifications du compilateur nécessaires, vous pouvez effectuer la compilation proprement dite manuellement. Ce n'est pas ainsi que le premier compilateur C ++ a été compilé. Je dis juste que c'est possible.
Comparez avec le langage d'assemblage. Quand ils ont été utilisés dans les premiers jours, il n'existait aucun logiciel d'assemblage permettant de convertir le code d'assemblage en code machine. Cela a été fait à la main, mais le langage d'assemblage a donné aux programmeurs une meilleure vue d'ensemble.
la source