Подтвердить что ты не робот

Почему существуют четыре компилятора mono С#?

Эта страница объясняет четыре разных монокомпилятора - mcs/gmcs/smcs/dmcs.

Для меня немного странно иметь четыре компилятора С#. Как обычно, более новая версия компилятора поддерживает обратную совместимость.

Я предполагаю, что из-за проблем с поддержкой времени выполнения, но Microsoft С# имеет один файл csc.exe, который поддерживает все версии среды выполнения.

4b9b3361

Ответ 1

Это потому, что компилятор Mono написан на С# и использует System.Reflection, что означает, что он может получить доступ только к mscorlib из среды выполнения, в которой он работает. Поэтому, например, smcs не просто нацелен на 2.1, он фактически использует 2.1 corlib и т.д.

Было какое-то время для того, чтобы * mcs использовал либо Mono.Cecil, либо Ikvm.Reflection вместо System.Reflection, что означало, что тогда может быть один компилятор mcs с аргументами для таргетинга на разные промежутки времени.

Компилятор Microsoft не имеет этого ограничения, поскольку он не использует .NET Reflection (он написан в собственном коде).

Ответ 2

По той же причине вы все еще можете делать разработку в .NET 2.0 с помощью Visual Studio 2005. Конечно, вы можете использовать VS2010 и запустить проект .NET 4.0 только с кодом .NET 2.0, но некоторые компании боятся обновлять фреймворки/версии компилятора, если они уже что-то работают нормально.

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

Наличие разных версий компилятора гарантирует, что все пользователи Mono могут использовать любую версию компилятора, которую они выбирают, и им удобнее.

  • mcs: компилятор для таргетинга версии 1.1 (для устаревания с Mono 2.8).
  • gmcs: компилятор для таргетинга среды выполнения 2.0.
  • smcs: компилятор для установки среды выполнения 2.1, для создания приложений Moonlight.
  • dmcs: Начиная с Mono 2.6 эта команда является компилятором С# 4.0 и ссылается на среду выполнения 4.0.

Лично мне нравится обновлять, когда только могу, но некоторые компании и команды не могут это делать по той или иной причине.