Eu olhei para o código-fonte em http://referencesource.microsoft.com/ , e parece que todo o código-fonte está em c #.
Também examinei o código-fonte da nova plataforma do compilador C # ( Roslyn ), e também está em C #. Como isso é possível? O compilador de linguagem C # está escrito em C #? Ou estou perdendo algo óbvio? Se o compilador C # é escrito em C #, como ele funciona?
c#
compiler-construction
roslyn
CriketerOnSO
fonte
fonte
Respostas:
O compilador C # original não foi escrito em C #, estava em C e C ++. O novo compilador Roslyn foi escrito em C #, mas foi inicialmente compilado com o compilador antigo. Depois que o novo compilador foi concluído, ele foi capaz de compilar seu próprio código-fonte: isso é chamado de inicialização .
fonte
Compiladores são programas utilitários - eles transformam o texto da linguagem de programação em código de máquina. Se a linguagem de programação descreve um software que por acaso é um compilador ...
Os compiladores também podem produzir código de máquina para outras arquiteturas. Por exemplo, a Apple compila o iOS usando racks de servidores baseados em Intel. O compilador não precisa executar o código ARM gerado, basta gravá-lo no disco.
O compilador 2.0 deve ser escrito em um idioma que o compilador 1.0 possa processar, mas certamente pode criar o compilador 2.0 com recursos mais recentes, como otimização. Você pode recompilar o código-fonte usando o compilador 2.0 e criar uma versão melhor de si mesmo. Novamente, o compilador não sabe que está fazendo outra versão de si mesmo.
Se voltarmos o suficiente para as brumas do tempo, chegamos a um ponto em que não temos compilador - a primeira iteração de uma linguagem de alto nível. Então temos que pegar os lápis e opcode livros e escrever o primeiro na montagem. Como escrevemos o primeiro montador? Entrada direta do código da máquina, provavelmente em fita de papel perfurada ou interruptores no painel frontal.
fonte
Um compilador é apenas um programa como qualquer outro programa. Não há nada de mágico ou especial nisso. É preciso alguma entrada e produz alguma saída. Nesse caso específico, a entrada é C # e a saída é CIL, mas isso não é diferente da entrada de uma série de declarações fiscais e da saída de um relatório.
fonte