Какой смысл Mono в Windows?

60 Adam Haile [2009-04-15 16:18:00]

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

windows mono


12 ответов


62 Решение Kibbee [2009-04-15 16:21:00]

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


68 Jörg W Mittag [2009-04-17 02:04:00]

Есть несколько возможностей Mono, которые .NET не делает.

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

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

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

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

Miguel de Icaza, Mono Lead Developer также имеет инициативу, которую он называет "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 нуждается в специальных поддержка от VM, которая не является частью CLI или .NET. Это используется для логики игры и, например, в Second Life.


24 Joel Coehoorn [2009-04-15 16:23:00]

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

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

.Net делает некоторые вещи, которые моно не делает.

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

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


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


13 Ohad Schneider [2010-04-17 05:08:00]

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

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

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

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

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

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

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

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

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


12 Joachim Sauer [2009-04-15 16:21:00]

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

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


8 jpobst [2009-04-15 17:57:00]

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

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

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


4 Nick Berardi [2009-04-15 16:21:00]

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


3 Erv Walter [2009-04-15 16:24:00]

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

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


2 user451234 [2010-09-22 09:23:00]

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


1 Zifre [2009-04-17 02:08:00]

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


0 Alexey Tigarev [2012-10-17 13:44:00]

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