Моно подмножество.NET?

Я знаю обратное неверно, но если мои работы приложения, использующие Моно, это, как гарантируют, будет работать, если я переключусь на реальное соглашение? В противном случае, где я могу найти список протестов?

8
задан Aillyn 15 August 2010 в 13:58
поделиться

4 ответа

И Mono, и .NET являются надмножествами семейства спецификаций ECMA / ISO CLI. Однако ни .NET, ни Mono не являются подмножествами друг друга. И Mono, и .NET добавляют функции поверх ECMA / ISO CLI, но хотя Mono реализует многие дополнения .NET, .NET не реализует никаких дополнений Mono.

Вот несколько примеров:

  • Mono имеет более крупные массивы. На самом деле это не добавленная функция к спецификации ECMA / ISO CLI, а дополнительная: в спецификации указано, что индексы массива должны быть 32-битными или 64-битными. .NET выбрала 32-разрядную версию, но Mono выбрала 64, поскольку массивы с 10 и более миллиардами записей довольно часто встречаются в суперкомпьютерных приложениях, где Mono занимает довольно значительную долю рынка. Итак, если ваше приложение имеет массив с несколькими миллиардами записей, оно будет нормально работать в Mono, но не будет работать в .NET.
  • Mono имеет продолжения, встроенные в виртуальную машину. Это важно для программирования игр.
  • Mono имеет встроенную поддержку SIMD для параллельных операций с массивами, которые отображаются в инструкции SIMD собственного процессора (MMX, SSE, VMX).
  • В Mono есть компилятор как услуга, о котором Microsoft лишь смутно говорила для какой-то неуказанной будущей версии .NET.
  • Mono имеет множество дополнительных библиотек, особенно привязки к графическим библиотекам, отличным от Windows Forms (wx.NET, Gtk #, Cocoa #, ...)

Обратите внимание, однако, что (за исключением массивов) все они четко различимы по их пространствам имен, поскольку ни один из них не находится в пространствах имен System или Microsoft .


РЕДАКТИРОВАТЬ: На самом деле, большинство вышеупомянутых расширений явно предназначены для работы и в .NET. Например, Mono.Simd также работает на .NET, но без поддержки времени выполнения, которую имеет виртуальная машина Mono, он работает необычно медленно. (По сути, все операции SIMD реализованы в C #, но компилятор Mono обнаруживает эти вызовы и заменяет их соответствующими инструкциями сборки. Таким образом, они работают в .NET, но без специальной обработки они значительно медленнее.) , C # REPL в настоящее время повторно реализуется поверх Reflection.Emit (на данный момент он вызывает компилятор Mono напрямую), так что в будущем он будет работать на .NET. Gtk # отлично работает в Windows и .NET.

Только библиотека Mono.Tasklet не может быть реализована в .NET, поскольку для продолжения требуется поддержка на уровне виртуальной машины.

18
ответ дан 5 December 2019 в 06:36
поделиться

Mono не расширяет API BCL , по крайней мере, не в пространстве имен System .Следовательно, вы можете быть совершенно уверены, что приложение, использующее только типы из пространства имен System , будет переносимым без перекомпиляции из Mono в .NET. Конечно, вы не найдете ничего в пространстве имен Mono , когда окажетесь в мире .NET.

Из Mono FAQ :

Планируете ли вы внедрить и расширить .NET?

Использование хорошей технологии - это хорошо. Расширение технологий в несовместимых способы вредны для пользователей, поэтому мы делаем не планируйте делать несовместимое изменения в технологиях.

Если у вас есть новаторские идеи и вы хотите для создания новых классов мы рекомендуем вы, чтобы эти классы работали правильно и в Mono, и в .NET. Сегодня Mono поставляется с рядом дополнительные библиотеки, которые были разработаны либо членами Mono сообщество или другие группы. В некоторых случаях мы нашли биты из Microsoft будет неполной, но мы избегайте взлома API, вместо этого мы выявить недостающую функциональность в новые сборки (см. Mono.Security)

2
ответ дан 5 December 2019 в 06:36
поделиться

Нет. Mono включает несколько альтернативных фреймворков пользовательского интерфейса (Gtk #, wxWindows для .NET и т. Д.).

Если вы используете только классы, определенные Microsoft, все будет в порядке.

3
ответ дан 5 December 2019 в 06:36
поделиться

Mono - это реализация стандарта CLI , как и CLR .

Он включает в себя многие библиотеки, которые вы найдете в .NET BCL, но не те, которые относятся к Windows (WMI - это целый домен, который приходит на ум).

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

Команда разработчиков mono создала инструмент, чтобы проверить, должен ли ваш код работать в моно - MoMA , Mono Migration Analyzer.

Что касается использования монокода с компиляторами Microsoft, пока вы включаете библиотеки, которые используете, и не выполняете никаких pInvokes в Linux, все будет в порядке.

2
ответ дан 5 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: