Почему существует четыре моно C # компилятора? - PullRequest
17 голосов
/ 07 октября 2010

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

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

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

Ответы [ 2 ]

20 голосов
/ 08 октября 2010

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

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

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

13 голосов
/ 07 октября 2010

По той же причине вы все еще можете заниматься разработкой в ​​.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 эта команда является компилятором C # 4.0 и ссылается на4.0 выполнения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...