В чем смысл Моно на Windows


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

12 60

12 ответов:

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

есть несколько особенностей моно имеет, что .NET не делает.

моно имеет модульную структуру. Вы можете разбить его на мелкие кусочки и только развернуть ровно те части, которые вам нужны. Не нужна система.Xml? Ладно, все прошло.

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

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

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

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

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

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

и совсем недавно, продолжение. На самом деле это первый раз, когда моно выходит за рамки спецификации: индексы длинных массивов совершенно действительны в соответствии со спецификацией и моно.Simd также работает на каждой CLI-совместимой реализации (хотя и очень S-L-O-W), но моно.Tasklet должен специальная поддержка от виртуальной машины, которая не является частью CLI или .NET. это используется для игровой логики и, например, в Second Life.

  • Mono does some things the .Net doesn't. например, mono поддерживает статическое связывание, так что вы можете создавать, компилировать и распространять свое приложение, не требуя отдельного установщика времени выполнения. Если вы создали приложение, чтобы полагаться на mono, чтобы быть кросс-платформенным, есть несколько различий, и поэтому использование mono в Windows является большей гарантией совместимости.

  • .Net does some things that mono doesn't. есть несколько мест в BCL, которые еще не портированы для mono. Если вы хотите приложение, которое будет работать на mac / linux вы, вероятно, хотите сначала разработать для mono, даже если вы делаете работу на windows.

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

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

от моно технические вопросы и ответы:

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

есть несколько причин:

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

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

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

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

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

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

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

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

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

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

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

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

также, Даже если у вас есть программа, динамически связанная с Mono, вы можете скомпилировать ее .exe и Mono runtime на pendrive и goto другой компьютер без .NET / Mono установлен, и запустить эту программу на новом ПК без установки во время выполнения. т. е., это приводит к портативным приложениям (особенно полезно в качестве портативных приложений USB pen drive) Это невозможно с помощью .NET. у вас должна быть установлена среда выполнения .NET определенным способом установки, т. е. среда выполнения, содержащая папку copy and paste not вероятный.

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

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