В чем смысл Mono в Windows

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


person Adam Haile    schedule 15.04.2009    source источник


Ответы (12)


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

person Kibbee    schedule 15.04.2009
comment
я надеюсь, что Мигель доходит до того, что обнимает и расширяет; но пока он просто следует за М.С. больно видеть, как таким образом порабощают великого разработчика - person Javier; 15.04.2009
comment
Кто сказал, что он на нашей стороне? кашель - person cgp; 15.04.2009
comment
Хотя MS.Net не поддерживает Gtk #, проект Mono публикует установщик для Windows, который позволяет приложениям Gtk # работать в MS.Net без Mono. - person jpobst; 15.04.2009
comment
@Javier прочитайте это сообщение Мигеля tirania.org/blog/archive/2009/May -06.html моно определенно не просто следование мс. - person Derek Ekins; 17.06.2009
comment
В Mono также есть вещи, которых нет в .NET, такие как уже упомянутый CsharpRepl (командное окно, подобное интерпретатору для C #, что действительно здорово), движок TextTemplating и Mono.Cecil, который намного лучше, чем Reflection - см. Это приятное сообщение в блоге: amazedsaint.blogspot.com/2010/10/monocsharp-monocecil-and.html - person Martin Salias; 20.10.2010

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

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

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

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

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

Мигель де Икаса, ведущий разработчик 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 реализациях (хотя и очень МЕДЛЕННО) , но Mono.Tasklet требует специальной поддержки со стороны виртуальной машины, которая не является частью CLI или .NET. Это используется для игровой логики и, например, в Second Life.

person Jörg W Mittag    schedule 16.04.2009

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

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

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

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

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


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

person Joel Coehoorn    schedule 15.04.2009
comment
Статическая компоновка - одна из самых важных вещей, для которых, как я слышал, используется Mono в Windows. - person Benjamin Autin; 15.04.2009

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

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

Причины разные:

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

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

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

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

Это помогает разработчикам на базе Windows протестировать свой код в Mono перед развертыванием в Linux.

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

person Ohad Schneider    schedule 17.04.2010

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

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

person Joachim Sauer    schedule 15.04.2009

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

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

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

person jpobst    schedule 15.04.2009

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

person Nick Berardi    schedule 15.04.2009
comment
Что такое естественная среда? Окна могут быть вашей естественной средой. У меня есть несколько сред, все они довольно искусственные, но мне подходят. :) - person Martin Salias; 20.10.2010

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

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

person Erv Walter    schedule 15.04.2009

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

person user451234    schedule 22.09.2010

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

person Zifre    schedule 16.04.2009

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

person Alexey Tigarev    schedule 17.10.2012

Как не запутаться в сети!

person majkinetor    schedule 15.04.2009
comment
Странно, что никто не упомянул, что mono является открытым исходным кодом (правда?). Я уверен, что для некоторых это имеет значение. - person Rolf; 20.01.2014