На каком языке написан компилятор C#?



Я посмотрел на исходный код в http://referencesource.microsoft.com/, и похоже, что весь исходный код находится в C#.



Я также посмотрел исходный код для новой платформы компилятора C# (Roslyn ), и он также находится в C#. Как такое возможно? Написан ли компилятор языка C# на языке C#? Или я упускаю что-то очевидное? Если компилятор C# написан на языке C#, то как он работает?

646   3  

3 ответов:

Исходный компилятор C# был написан не на C#, а на C и C++. Новый компилятор Roslyn был написан на языке C#, но изначально компилировался со старым компилятором. После того, как новый компилятор был сделан, он смог скомпилировать свой собственный исходный код: это называется bootstrapping.

Компиляторы являются служебными программами-они превращают текст языка программирования в машинный код. Если язык программирования описывает программное обеспечение, то это просто компилятор.....

Компиляторы также могут создавать машинный код для других архитектур. Например, Apple компилирует iOS, используя стойки серверов на базе Intel. Компилятору не нужно запускать ARM-код, который он генерирует, просто запишите его на диск.

Компилятор 2.0 должен быть написан на языке, который может обрабатывать компилятор 1.0, но он можно, конечно, создать компилятор 2.0 с новыми функциями, такими как оптимизация. Затем вы можете повторно скомпилировать исходный код с помощью компилятора 2.0 и сделать лучшую версию самого себя. Опять же, компилятор не знает, что он создает другую версию самого себя.

Если мы углубимся достаточно далеко в туман времени, то мы действительно достигнем точки, где у нас нет компилятора - самой первой итерации языка высокого уровня. Затем мы должны достать карандаши и книги кодов операций и написать первый в сборке. Как мы написали первый ассемблер? Прямой ввод машинного кода, возможно, на перфорированной бумажной ленте или на переключателях на передней панели.

Компилятор-это просто программа, как и любая другая программа. В этом нет ничего волшебного или особенного. Он принимает некоторый входной сигнал и производит некоторый выход. В этом конкретном случае входные данные просто оказываются C#, а выходные-CIL, но это ничем не отличается от входных данных, представляющих собой серию налоговых деклараций, а выходные данные-отчет.

Comments

    Ничего не найдено.