Automatische Übersetzung von F # nach C #

8

Ich habe mich gefragt, ob es eine automatische Umwandlung von F # -Code in C # -Code gibt, die in der Praxis gut funktioniert. Der Grund dafür ist, dass wir in F # ein gutes Stück Logik haben, die wir gerne mit Mono für Android, MonocMac, MonoTouch ... verwenden würden, um eine App für jede Plattform zu erstellen. Da diese nicht direkt F # unterstützen, wäre es schön, wenn wir weiterhin die Logik in F # programmieren könnten und den GUI-Teil mit C # und diesen Werkzeugen machen könnten.

Weiß jemand etwas? Danke.

    
Jacobo Polavieja 15.02.2012, 11:36
quelle

5 Antworten

6

Warum müssen Sie den Code übersetzen? Eine kompilierte verwaltete Binärdatei sollte gut mit Mono funktionieren. Fügen Sie es einfach zum Projekt hinzu.

Sie können ein Werkzeug wie ILSpy verwenden, um Ihren Code in eine andere Sprache zu dekompilieren, aber das ändert nicht wirklich viel - Das ist der springende Punkt beim Kompilieren verschiedener Sprachen in .NET CIL.

    
skolima 15.02.2012 11:43
quelle
5

Jeder .NET-Decompiler, der sowohl F # als auch C # unterstützt, kann dies tun.

Zum Beispiel: Cecil.Decompiler und ILSpy .

Steve Gilham hat einige gute Artikel über das Dekompilieren von F # nach C # mit Cecil.Decompiler und ILSpy und einige andere Blogbeiträge zur Interoperabilität zwischen F # und C # -Code. Diese Artikel können hilfreich für Sie sein.

Normalerweise verwende ich nur ILSpy , wenn ich mich frage, was unter F # -Code vor sich geht, was bei der Dekompilierung nach C # deutlicher wird. Das Kompilieren von F # -Code in eine separate DLL und das Verwenden in Ihrem C # -Code ist der beste Weg zu gehen.

    
pad 15.02.2012 11:42
quelle
4

Habe gerade diese Blogposts von einer F # und allen Dingen gefunden, die Mono-Typ: MonoTouch & amp; F # P I und MonoTouch & amp; F # P II

    
Jwosty 01.03.2013 03:49
quelle
4

Theoretisch sollten Sie Ihren F # -Code auf MonoTouch und Mono für Android ausführen können. In der Praxis ... sind die Dinge komplizierter. : -)

MonoTouch und Mono für Android stellen ihre eigenen Basisklassenbibliotheken zur Verfügung, die mit Desktop .NET nicht kompatibel sind (sie sind größtenteils eine Obermenge von Silverlight). Um Ihren F # Code unter MonoTouch und Mono für Android laufen zu lassen, müssen Sie zuerst Ihren F # -Code mit den entsprechenden Assemblys kompilieren.

Außerdem müssen Sie entweder alle Abhängigkeiten von FSharp.Core.dll (ist das sogar möglich?) oder port FSharp.Core.dll entfernen, damit sie gegen die entsprechenden MonoTouch- und Mono für Android-Assemblies ausgeführt werden können. Ich bin mir sicher, dass das möglich ist, aber ich habe keine Ahnung, ob es getan wurde oder wie einfach das wäre.

Sobald Sie FSharp.Core.dll und verwandte Abhängigkeiten entweder entfernt oder erfüllt haben, sollten Sie in der Lage sein, einfach alle benötigten Assemblys (Ihre F # Assembly plus Abhängigkeiten) zum Projekt hinzuzufügen und auszuführen.

    
jonp 16.02.2012 03:29
quelle
3

Kompilieren Sie einfach Ihre F # -Bibliothek mit --standalone (Properties | Build | Other flags | --standalone) und es wird FSharp.Core.dll in Ihre Bibliothek integrieren.

    
Maximilian Wilson 16.08.2012 08:10
quelle