J'ai regardé le code source à l'adresse http://referencesource.Microsoft.com/ , et il apparaît que tout le code source est en C #.
J'ai également examiné le code source de la nouvelle plate-forme de compilateur C # ( Roslyn ), qui est également en C #. Comment est-ce possible? Le compilateur en langage C # est-il écrit en C #? Ou est-ce que je manque quelque chose d'évident? Si le compilateur C # est écrit en C #, comment fonctionne-t-il?
Le compilateur C # d'origine n'était pas écrit en C #, mais en C et C++. Le nouveau compilateur Roslyn a été écrit en C #, mais a été initialement compilé avec l'ancien compilateur. Une fois le nouveau compilateur terminé, il était capable de compiler son propre code source: il s’appelle amorçage .
Les compilateurs sont des programmes utilitaires - ils transforment le texte du langage de programmation en code machine. Si le langage de programmation décrit un logiciel qui se trouve être un compilateur, .....
Les compilateurs peuvent également produire du code machine pour d'autres architectures. Par exemple, Apple compile iOS à l'aide de racks de serveurs basés sur Intel. Le compilateur n'a pas à exécuter le code ARM qu'il génère, il suffit de l'écrire sur le disque .
Compiler 2.0 doit être écrit dans un langage que le compilateur 1.0 peut traiter, mais il peut certainement créer un compilateur 2.0 avec de nouvelles fonctionnalités telles que l'optimisation. Vous pouvez ensuite recompiler le code source à l'aide du compilateur 2.0 et en faire une meilleure version. Encore une fois, le compilateur ne sait pas qu'il crée une autre version de lui-même.
Si nous remontons assez loin dans la nuit des temps, nous atteignons un point où nous n’avons pas de compilateur - la toute première itération d’un langage de haut niveau. Ensuite, nous devons sortir les crayons et les codes d'opérations et écrire le premier dans Assembly. Comment avons-nous écrit le premier assembleur? Saisie directe du code machine, probablement sur du papier perforé, ou des commutateurs à bascule sur le panneau avant.
Un compilateur est juste un programme comme n'importe quel autre programme. Il n'y a rien de magique ou de spécial à ce sujet. Cela prend des entrées et produit des sorties. Dans ce cas particulier, l'entrée est simplement C # et la sortie est CIL, mais ce n'est pas différent de l'entrée qui est une série de déclarations de revenus et la sortie d'un rapport.