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

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

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

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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