Я посмотрел на исходный код по адресу http://referencesource.microsoft.com/ , и оказалось, что весь исходный код находится на C #.
Я также рассмотрел исходный код для новой платформы компилятора C # ( Roslyn ), и он также находится в C #. Как это возможно? Компилятор языка C # написан на C #? Или я что-то упускаю очевидное? Если компилятор C # написан на C #, то как он работает?
c#
compiler-construction
roslyn
CriketerOnSO
источник
источник
Ответы:
Оригинальный компилятор C # не был написан на C #, он был на C и C ++. Новый компилятор Roslyn был написан на C #, но изначально был скомпилирован со старым компилятором. Как только новый компилятор был готов, он смог скомпилировать свой собственный исходный код: это называется начальной загрузкой .
источник
Компиляторы - это служебные программы - они превращают текст языка программирования в машинный код. Если язык программирования описывает программное обеспечение, это просто компилятор .....
Компиляторы также могут создавать машинный код для других архитектур. Например, Apple компилирует iOS с использованием стоек серверов на базе Intel. Компилятору не нужно запускать генерируемый им код ARM, просто запишите его на диск.
Компилятор 2.0 должен быть написан на языке, который может обработать компилятор 1.0, но он, безусловно, может создать компилятор 2.0 с более новыми функциями, такими как оптимизация. Затем вы можете заново скомпилировать исходный код с помощью компилятора 2.0 и сделать лучшую версию самого себя. Опять же, компилятор не знает, что делает другую версию самого себя.
Если мы пойдем достаточно далеко назад в глубь веков времени, тогда мы действительно достигнем точки, где у нас нет компилятора, - самой первой итерации языка высокого уровня. Затем мы должны достать карандаши и книги с кодами операций и написать первый в сборке. Как мы написали первый ассемблер? Прямой ввод машинного кода, возможно, на перфорированной бумажной ленте или переключателях на передней панели.
источник
Компилятор - это просто программа, как и любая другая программа. В этом нет ничего волшебного или особенного. Он требует некоторого ввода и производит вывод. В данном конкретном случае входными данными просто является C #, а выходными - CIL, но это ничем не отличается от входных данных, представляющих собой серию налоговых деклараций, а выходных данных - отчета.
источник