2009-02-19 8 views
10

Ich interessiere mich für Völker Erfahrung mit Mono (Open-Source-Implementierung von .NET) in einer C/C++ - Anwendung einzubetten. Wie verteilt man eine solche Anwendung und welche Abhängigkeiten gibt es? Ich habe auf OS X getestet und mono kommt als riesiges Framework (Hunderte von MB). Müssen Nutzer meiner App dieses große Framework verwenden oder kann es heruntergeräumt werden oder alles in die Haupt-ausführbare Datei kompiliert werden.Einbettung: mono vs lua

Ich habe bereits Erfahrung mit der Einbettung von Lua in eine C++ - App, und das funktioniert wirklich gut, weil ich den ganzen Lua-Interpreter statisch mit meiner Hauptdatei verbinden kann. Ich habe also keine externen Abhängigkeiten. Ist es möglich, etwas Ähnliches mit Mono zu machen?

Irgendwelche Lua Leute hier, die kommentieren können, wie sie mono im Vergleich zu Lua gefunden haben?

PS: Durch die Einbettung meine ich eine C++ - Anwendung, die eine Mono-Umgebung initialisiert und eine .NET-Assembly lädt und ausführt und dann die Kommunikation zwischen say C# -Code in Assembly und C++ - Methoden in der Hauptdatei ermöglicht.

Antwort

6

Sie sollten wahrscheinlich auch Monos Small Footprint Seite betrachten, die beschreibt, wie Sie eine kleinere Laufzeit einbetten können. Verdammt, sie machen es selbst mit Moonlight.

Ich hoffe, dass hilft.

+0

Danke. Wenn ich richtig verstehe, ist mscorlib.dll und der JIT die einzigen Dinge, die benötigt werden, um Mono eingebettet zu bekommen? Gibt es eine Möglichkeit, mscorlib.dll statisch zu verbinden? –

+0

Mit Mono können Sie Ihren Code vollständig statisch verknüpfen, so dass Sie wahrscheinlich nicht einmal das JIT benötigen. Schau dir ihre iPhone-Implementierung an. –

2

Dies ist 2 Jahre alte Frage. So kann die Situation jetzt anders werden.

Für mich war der wichtigste Punkt GC. Ich habe Lua für interaktive Apps und Spiele eingebettet, weil inkrementelle GC benötigt werden. Momentan hat Lua 5.1 einen präzisen, inkrementellen GC, aber ich konnte keinen Beweis für inkrementelle oder präzise GC auf Mono finden. So wird Speicher ausgelaufen (sogar es ist sehr klein!), Und Apps werden mit Unterbrechungen kämpfen.

Menschen sagt GC Pause kann durch Abstimmen einige Parameter und die Bündelung Objekte gelöst werden, aber als ich erfahren, es nie ohne jede Art von Verteilung GC Last über die Zeit Ansatz in GC gelöst werden. Der Generations-GC ist einer der Verteilungsalgorithmen, aber er ist zu grob und fast nicht hilfreich.

Da Sie Lebenszeitmuster nicht steuern oder Instanzen nicht erneut verwenden können, indem Sie die Objekte im Code zusammenfassen, die nicht in Ihrem Code enthalten sind. (wie zB Basis-Klassenbibliothek)

Also ich empfehle die C# -Plattform (Mono oder .NET, zumindest noch nicht) für interaktive/(weiche) Realtime-Apps.


bearbeiten

Ich weiß nicht, ob ein inkrementeller/mitlaufende genähert GC auf Mono oder .NET präsentiert wird. Wenn Sie sicher sind, bieten sie die Art von GC, natürlich, es ist in Ordnung zu verwenden :)

+2

Selbst mit über 2000 Spielen, die auf Mono im iOS App Store gebaut wurden? –

+0

@Dave Wie wäre es mit der Anzahl der Spiele in C/C++? :) Die Nummer beweist nicht das Vorhandensein von inkrementellen GC. Wenn Sie keine ernsthafte Interaktivität benötigen, können Sie sich für alte GC entscheiden. Aber wenn Ihre Benutzer nur eine winzige Pause brauchen, werden Sie es bereuen. – Eonil

+0

Ich denke, das ist sinnlos. Wenn andere Spieler ein Spiel in Mono machen können, ist die Anforderung, einen 'inkrementellen GC' zu haben, strittig. –