Ist Mono eine Teilmenge von .NET?

8

Ich weiß, dass das Umgekehrte nicht stimmt, aber wenn meine Anwendung mit Mono funktioniert, funktioniert das garantiert, wenn ich zum echten Deal übergehe? Wenn nicht, wo finde ich eine Liste mit Vorbehalten?

    
Aillyn 15.08.2010, 13:58
quelle

4 Antworten

18

Sowohl Mono als auch .NET sind Supersets der ECMA / ISO CLI-Familie von Spezifikationen. Weder .NET noch Mono sind Teilmengen der anderen. Sowohl Mono als auch .NET fügen Funktionen zusätzlich zu ECMA / ISO CLI hinzu, aber während Mono viele Zusätze von .NET implementiert, implementiert .NET keine Zusätze von Mono.

Hier ein paar Beispiele:

  • Mono hat größere Arrays. Dies ist eigentlich nicht ein zusätzliches Feature zur ECMA / ISO CLI-Spezifikation, sondern ein optionales: Die Spezifikation besagt, dass Array-Indizes entweder 32 Bit oder 64 Bit sein müssen. .NET entschied sich für 32 Bit, aber Mono entschied sich für 64, da Arrays mit 10 Milliarden Einträgen und mehr durchaus üblich in Supercomputing-Anwendungen sind, wo Mono einen recht starken Marktanteil hat. Also, wenn Ihre App ein Array mit mehreren Milliarden Einträge hat, wird es gut auf Mono laufen, aber nicht auf .NET.
  • Mono hat Fortsetzungen in die VM eingebaut. Diese sind wichtig für die Programmierung von Spielen.
  • Mono verfügt über native SIMD-Unterstützung für parallele Operationen auf Arrays, die nativen CPU-SIMD-Befehlen (MMX, SSE, VMX) zugeordnet sind.
  • Mono hat Compiler-as-a-Service, von dem Microsoft nur vage für einige nicht näher bezeichnete zukünftige Versionen von .NET gesprochen hat.
  • Mono hat viele zusätzliche Bibliotheken, insbesondere Bindungen zu anderen Grafikbibliotheken als Windows Forms (wx.NET, Gtk #, Cocoa #, ...)

Beachten Sie jedoch, dass (abgesehen von den Arrays) alle diese durch ihre Namespaces klar unterscheidbar sind, da keiner von ihnen in den Namespaces System oder Microsoft lebt.

EDIT: Eigentlich sind die meisten der oben genannten Erweiterungen explizit auch auf .NET ausgelegt. Zum Beispiel läuft Mono.Simd auch auf .NET, aber ohne die Laufzeit-Unterstützung, die die Mono-VM hat, ist sie unbrauchbar langsam. (Grundsätzlich sind alle SIMD-Operationen in C # implementiert, aber der Mono-Compiler erkennt diese Aufrufe und ersetzt sie durch ihre entsprechenden Assembler-Anweisungen. So arbeiten sie an .NET, aber ohne die spezielle Behandlung sind sie wesentlich langsamer.) Auch Die C # -Repl wird derzeit zusätzlich zu Reflection.Emit neu implementiert (im Moment ruft sie den Mono-Compiler direkt auf), so dass sie zukünftig in .NET funktionieren wird. Gtk # funktioniert problemlos unter Windows und .NET.

Nur die Bibliothek Mono.Tasklet kann nicht in .NET implementiert werden, da sie VM-Level-Unterstützung für Fortsetzungen erfordert.

    
Jörg W Mittag 15.08.2010, 14:26
quelle
3

Nein. Mono enthält mehrere alternative UI-Frameworks (Gtk #, wxWindows für .NET usw.).

Wenn Sie nur von Microsoft definierte Klassen verwenden, sollten Sie in Ordnung sein.

    
Stephen Cleary 15.08.2010 14:00
quelle
2

Mono ist eine Implementierung des CLI -Standards, ebenso wie das CLR .

Es enthält viele der Bibliotheken, die Sie in der .NET BCL finden würden, aber keine, die windowsspezifisch sind (WMI ist eine ganze Domäne, die Ihnen in den Sinn kommt).

Solange Sie sich an Funktionen halten, die nicht Windows-spezifisch sind, sollten Sie in Ordnung sein.

Das mono-Team hat ein Tool erstellt, mit dem Sie überprüfen können, ob Ihr Code auf mono - MoMA , dem Mono Migration Analyzer, funktioniert .

Was die Verwendung von Monocode mit den Microsoft-Compilern angeht, so sollten Sie, solange Sie die Bibliotheken, die Sie verwenden, und keine pInvokes unter Linux ausführen, in Ordnung sein.

    
Oded 15.08.2010 14:03
quelle
2

Mono erweitert die BCL-APIs nicht, zumindest nicht im Namespace System . Daher können Sie ziemlich sicher sein, dass eine Anwendung, die nur Typen aus dem Namespace System verwendet, ohne Neukompilierung von Mono zu .NET portierbar ist. Natürlich werden Sie im Namespace Mono nichts mehr finden, sobald Sie in der .NET-Welt sind.

Aus der Mono-FAQ :

  

Planen Sie, .NET zu umarmen und zu erweitern?

     

Eine gute Technologie zu akzeptieren ist gut.   Erweiterung von Technologien inkompatibel   Wege sind schlecht für die Benutzer, also tun wir es   nicht planen, unvereinbar zu machen   Änderungen an den Technologien.

     

Wenn Sie innovative Ideen haben und wollen   um neue Klassen zu schaffen, ermutigen wir   Sie, um diese Klassen zu betreiben   richtig gut in Mono und .NET.   Heute wird Mono mit einer Anzahl von   extra Bibliotheken, die entwickelt wurden   entweder von Mitgliedern des Mono   Gemeinschaft oder andere Gruppen. In einigen   Fälle, wir haben die Bits aus gefunden   Microsoft unvollständig zu sein, aber wir   Vermeiden Sie die API zu brechen, anstatt wir   stellen Sie die fehlende Funktionalität in   neue Assemblys (siehe Mono.Security)

    
Trillian 15.08.2010 14:15
quelle

Tags und Links