Spojrzałem na kod źródłowy pod adresem http://referencesource.microsoft.com/ i okazało się, że cały kod źródłowy jest w C #.
Przyjrzałem się również kodowi źródłowemu nowej platformy kompilatora C # ( Roslyn ) i jest on również w języku C #. Jak to możliwe? Czy kompilator języka C # jest napisany w języku C #? A może brakuje mi czegoś oczywistego? Jeśli kompilator C # jest napisany w języku C #, to jak to działa?
c#
compiler-construction
roslyn
CriketerOnSO
źródło
źródło
Odpowiedzi:
Oryginalny kompilator C # nie został napisany w C #, był w C i C ++. Nowy kompilator Roslyn został napisany w języku C #, ale początkowo został skompilowany za pomocą starego kompilatora. Gdy nowy kompilator był już gotowy, był w stanie skompilować swój własny kod źródłowy: nazywa się to ładowaniem początkowym .
źródło
Kompilatory to programy narzędziowe - zamieniają tekst języka programowania w kod maszynowy. Jeśli język programowania opisuje oprogramowanie, które akurat jest kompilatorem .....
Kompilatory mogą również tworzyć kod maszynowy dla innych architektur. Na przykład Apple kompiluje iOS, używając stojaków z serwerami z procesorami Intel. Kompilator nie musi uruchamiać generowanego przez siebie kodu ARM, wystarczy go zapisać na dysku.
Kompilator 2.0 musi być napisany w języku, który może przetwarzać kompilator 1.0, ale z pewnością może stworzyć kompilator 2.0 z nowszymi funkcjami, takimi jak optymalizacja. Następnie możesz ponownie skompilować kod źródłowy za pomocą kompilatora 2.0 i stworzyć lepszą wersję samego siebie. Ponownie, kompilator nie wie, że tworzy kolejną wersję siebie.
Jeśli cofniemy się wystarczająco daleko w mgły czasu, dotrzemy do punktu, w którym nie mamy kompilatora - jest to pierwsza iteracja języka wysokiego poziomu. Następnie musimy wyjąć ołówki i książki z kodami operacyjnymi i napisać pierwszą w zespole. Jak napisaliśmy pierwszego asemblera? Bezpośrednie wprowadzenie kodu maszynowego, prawdopodobnie na perforowanej taśmie papierowej lub przerzucaniu przełączników na panelu przednim.
źródło
Kompilator to po prostu program, jak każdy inny program. Nie ma w tym nic magicznego ani specjalnego. Wymaga pewnych danych wejściowych i generuje pewne dane wyjściowe. W tym konkretnym przypadku tak się składa, że dane wejściowe to po prostu C #, a wynik po prostu CIL, ale nie różni się to od danych wejściowych będących serią deklaracji podatkowych, a wynikiem jest raport.
źródło