J'ai regardé le code source sur http://referencesource.microsoft.com/ , et il semble que tout le code source est en C #.
J'ai également regardé le code source de la nouvelle plateforme de compilateur C # ( Roslyn ), et il est également en C #. Comment est-ce possible? Le compilateur de langage C # est-il écrit en C #? Ou est-ce que je rate quelque chose d'évident? Si le compilateur C # est écrit en C #, comment ça marche?
c#
compiler-construction
roslyn
CriketerOnSO
la source
la source
Réponses:
Le compilateur C # d'origine n'a pas été écrit en C #, il était 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 a pu compiler son propre code source: c'est ce qu'on appelle le bootstrapping .
la source
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 Intel. Le compilateur n'a pas besoin d'exécuter le code ARM qu'il génère, il suffit de l'écrire sur le disque.
Le compilateur 2.0 doit être écrit dans un langage que le compilateur 1.0 peut traiter, mais il peut certainement créer le compilateur 2.0 avec des fonctionnalités plus récentes comme l'optimisation. Vous pouvez ensuite recompiler le code source à l'aide du compilateur 2.0 et créer une meilleure version de lui-même. 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 livres d'opcode et écrire le premier en assemblage. Comment avons-nous écrit le premier assembleur? Saisie directe du code machine, probablement sur du ruban de papier perforé, ou basculement des interrupteurs sur le panneau avant.
la source
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. Il prend une certaine entrée et produit une sortie. Dans ce cas particulier, l'entrée se trouve être C # et la sortie se trouve être CIL, mais ce n'est pas différent de l'entrée étant une série de déclarations de revenus et la sortie étant un rapport.
la source