Какой смысл Mono на Windows - PullRequest
       69

Какой смысл Mono на Windows

62 голосов
/ 15 апреля 2009

Это может быть глупый вопрос ... но я просто изучал проект Mono, и у них есть раздел об установке Mono в Windows . Но, поскольку в Windows, очевидно, уже есть среда выполнения .NET, кто-нибудь может мне сказать, в чем именно смысл иметь Mono для Windows? Это помогает с кроссплатформенной разработкой или чем-то?

Ответы [ 12 ]

68 голосов
/ 17 апреля 2009

У Mono есть несколько функций, которых нет у .NET.

Mono очень модульный. Вы можете разбить его на мелкие кусочки и развернуть точно те части, которые вам нужны. Не хотите System.Xml? Хорошо, это ушло.

Mono является встраиваемым. Вы можете разместить его в своем приложении C / C ++, чтобы позволить пользователям создавать сценарии из безопасной управляемой изолированной среды. Самым известным примером этого является mod_mono, который размещает Mono внутри веб-сервера Apache и, например, как ASP.NET реализован в Mono. Эта функция прекрасно сочетается с упомянутой выше модульностью.

Это уже упоминалось: статическое связывание. Также отлично сочетается с модуляризацией.

Компилятор как сервис - еще один. Андерс Хейлсберг говорил об этом в течение длинного времени, и возможно , просто возможно, он будет готов к C # 5.0. Ну, у Моно это уже есть, и оно было у него годами.

Мигель де Иказа, ведущий разработчик Mono, также имеет инициативу, которую он называет «Embrace and Extend.NET», которая расширяет CLI способами, которые (в настоящее время) невозможны для других реализаций CLI (включая .NET). Пока что Embrace и Extend.NET имеют три функции.

Mono.Simd, который обеспечивает безопасный и контролируемый доступ к инструкциям SIMD базового ЦП (например, SSE на Intel или AltiVec на PowerPC). Используется для игр и графики.

64 Индексы массива битов, которые разрешены спецификацией ECMA, но Mono - единственная виртуальная машина, которая фактически предоставляет их. Используется в суперкомпьютерах.

И совсем недавно, продолжения. Фактически это первый раз, когда Mono выходит за рамки спецификации: индексы длинных массивов полностью соответствуют спецификации, а Mono.Simd также работает с каждой реализацией, совместимой с CLI (хотя очень SLOW), но Mono.Tasklet нуждается в особой поддержке со стороны виртуальной машины, которая не является частью CLI или .NET. Это используется для игровой логики и, например, во Второй Жизни.

63 голосов
/ 15 апреля 2009

Поскольку Mono не реализует .Net на 100% так же, как MS .Net Framework, хорошо, что вы можете тестировать на Mono без необходимости запуска на Linux. Также у Mono есть привязки для создания форм с GTK, которые MS не поддерживает.

24 голосов
/ 15 апреля 2009

Mono делает то, что не делает .Net.

Например, mono поддерживает статическое связывание, поэтому вы можете создавать, компилировать и распространять свое приложение, не требуя отдельного установщика во время выполнения. Если вы создали приложение, которое полагается на моно для кроссплатформенности, есть некоторые отличия от .Net, и поэтому придерживаться моно в Windows - это лучшая гарантия совместимости.

.Net делает то, что моно не делает.

В BCL есть несколько мест, которые еще не перенесены для моно, например, WPF и Winforms.

Если вам нужно приложение, которое будет также работать на Mac / Linux, вы, вероятно, сначала захотите разработать его для моно, даже если вы выполняете большую часть работы с Windows.


Примечание: все это предшествует .Net Core / Standard.

13 голосов
/ 17 апреля 2010

Из технических вопросов о Mono :

Зачем поддерживать Windows, когда вы можете запустить реальную вещь?

Существуют различные причины:

Поддержка Windows помогает нам идентифицировать переносимые части Mono из непереносимых версий этого, помогая Моно стать более портативным в будущее.

Это помогает нам, так как мы можем изолировать проблемы в Моно разделить проблему (это проблема времени выполнения или проблема ОС?).

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

Mono не сильно изменяет реестр Windows, обновляет системные библиотеки DLL, установить библиотеки DLL в Windows / System32 дорожка.

Это помогает разработчикам на базе Windows тестировать свой код под Моно, прежде чем они развернутся в Linux.

Mono и приложения, которые встраивают Mono, могут быть развернуты без установщик (вы можете "xcopy" развернуть ваш приложение и требуемый моно файлы без установки .NET во время выполнения).

12 голосов
/ 15 апреля 2009

Если вы хотите разработать кроссплатформенное приложение на C #, то использование реализации Microsoft - не самая разумная вещь, поскольку не существует полностью совместимой альтернативы для других платформ.

Таким образом, использование Mono в Windows для разработки приложений гарантирует, что у вас не составит труда перенести его на другие ОС (при условии, что вы избежите других ошибок, таких как P / Invoke).

8 голосов
/ 15 апреля 2009

Некоторые люди использовали его, потому что им не разрешено устанавливать .Net Framework на своих ПК с Windows, из-за того, что он делает много ошибок в реестре и системных файлах. (В строго контролируемой среде.)

Mono, с другой стороны, сам содержится в Program Files и записывает только раздел реестра с указанным в нем путем (который не требуется запускать).

Я думаю, что это немного глупо, но это то, что нам сказали несколько пользователей.

4 голосов
/ 15 апреля 2009

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

3 голосов
/ 15 апреля 2009

Хотя это не представляет широкого интереса, есть несколько случаев, когда mono имеет улучшения по сравнению со стандартной средой выполнения Microsoft. В этом году Мигель выступил с докладом по некоторым из них на PDC:

Смотрите эти сообщения:

2 голосов
/ 22 сентября 2010

также, даже если у вас есть программа, динамически связанная с Mono, вы можете иметь скомпилированные .exe и Mono runtime на pendrive и перейти на другой компьютер без установленного .NET / Mono, и запустить эту программу на новом ПК без установки во время выполнения , То есть, это приводит к портативным приложениям (особенно полезно, как портативные приложения с USB-накопителем) Это невозможно с .NET. У вас должна быть установлена ​​среда выполнения .NET определенным способом установки, то есть среда выполнения, содержащая копирование и вставку папки, невозможна.

1 голос
/ 17 апреля 2009

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

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