2015-04-14 4 views
4

Я начал читать о «Roslyn» новом компиляторе C# и задавался вопросом, как был составлен компилятор Roslyn?
Я понимаю, что boostrapping необходим, чтобы иметь "self hosting compiler", и я подумал, как был компилятор Roslyn «загружен»?Как скомпилирован компилятор Roslyn C#?

+3

Я не понимаю ваш вопрос. Вы уже знаете, что такое самонастраивание. Тогда чего вы не знаете? –

+2

Связанный: [На каком языке написана компилятор C#?] (Http://stackoverflow.com/questions/27513234/in-which-language-is-the-c-sharp-compiler-written) –

+0

Похоже на открытие https : //github.com/dotnet/roslyn/blob/master/src/Roslyn.sln в Visual Studio и нажатие кнопки «компиляция» сделало бы трюк – xmojmr

ответ

6

Вот как это было на самом деле (не догадываясь) сделано в C# команды, в соответствии с Eric Lippert:

«C# 1.0 через 5,0 компиляторы были написаны на C++ В течение довольно длительного времени - больше. год - мы написали компилятор Roslyn C# в C# и скомпилировали его с C# 4.0. (C# 5.0 разрабатывался параллельно сестринской командой.) В тот день, когда мы могли скомпилировать компилятор Roslyn, а затем повернуть направо и скомпилировать его снова используя компилятор, который мы только что создали, это был счастливый день ».

2

Я бы предположил, что для этого использовался существующий компилятор C#. Я имею в виду, что полностью загруженный компилятор хорош, но в этом случае не нужен.

7

Bootstrapping - это только проблема, если еще не существует существующей реализации языка. В этом случае было, так что это легко.

  1. Скомпилирует первую версию Рослин, используя существующий C# компилятора
  2. Затем снова собрать его с помощью свежа скомпилированного Roslyn сборки.
  3. Выполнено.
+0

Когда новые ключевые слова добавляются на язык, как он будет скомпилирован? потому что у нас нет компилятора (пока), который понимает новые токены? [Первоначально задан здесь] (http: // stackoverflow.com/questions/27513234/in-which-language-is-the-c-sharp-compiler-written # comment47395673_27513277) –

+4

@SriramSakthivel Просто не используйте эти новые функции в компиляторе (сначала). – sepp2k

+0

Silly me :) Это было очень просто :) –

2

Есть Распознать

http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29

Если нужно получить компилятор для языка X (который написан на языке X), есть вопрос о том, как первый компилятор может быть написан. Различные методы, которые используются на практике для решения это курица или яйцо проблемы включают в себя:

Реализация интерпретатор или компилятор для языка X в языке Y. Никлаус Вирт сообщил, что он написал первый компилятор Паскаля в Fortran. [править] Другой интерпретатор или компилятор для X имеет уже написан на другом языке Y; вот как Scheme часто загружается.

Но специфика Рослин я бы предположил, построенными с C# компилятор (предварительно Рослин), то построенные с себя :) (первые несколько спусков), как только ее стабильной, они Probs просто построить Рослин с Рослин :)

Я бы также предположил, что все его автоматизированные и модульные испытания.

Смежные вопросы