2012-02-15 15 views
8

Mi chiedevo se c'è una conversione automatica del codice F # nel codice C# che funziona bene nella pratica. La ragione di questo è che abbiamo un bel po 'di logica in F # che vorremmo usare con Mono per Android, MonocMac, MonoTouch ... per creare un'app per ogni piattaforma. Dato che quelli non supportano F # direttamente, sarebbe bello se potessimo continuare a programmare la logica in F # e fare la parte GUI con C# e quegli strumenti.Traduzione automatica da F # a C#

Qualcuno sa qualcosa? Grazie.

+2

non supportano F # direttamente, ma F # di DLL e EXE dovrebbe funzionare con queste piattaforme troppo. Hai provato? –

risposta

5

Qualsiasi decompilatore .NET che supporta sia F # che C# può farlo.

Ad esempio: Cecil.Decompiler e ILSpy.

Steve Gilham ha alcuni buoni articoli sulla decompilazione di F # in C# usando Cecil.Decompiler e ILSpy e altri post di blog sull'interoperabilità tra codice F # e codice C#. Questi articoli potrebbero essere utili per te.

Normalmente, io uso solo ILSpy quando mi chiedo che cosa sta succedendo sotto il codice F #, che sarà più esplicito quando decompilato in C#. Compilare il codice F # in una dll separata e consumarlo nel tuo codice C# è il modo migliore per andare.

+0

Non ci sono problemi nella pratica? F # è un enorme risparmio di tempo e se dobbiamo modificare alcune cose più avanti nel processo va bene, basta che non siano mal di testa ... grazie. –

+4

Il codice C# generato da ILSpy sarebbe improbabile da compilare poiché qualsiasi utilizzo di chiusure in F # genererebbe classi interne con nomi che non sono C# validi. – Robert

6

Perché è necessario tradurre il codice? Un file binario gestito compilato dovrebbe funzionare bene con Mono. Basta aggiungerlo al progetto.

È possibile utilizzare uno strumento come ILSpy per decompilare il codice in un'altra lingua, ma in realtà non cambia molto - questo è l'intero punto di compilazione di linguaggi diversi in .NET CIL.

+0

skolima, sei sicuro di poter aggiungere un binario a un progetto MonoTouch e funzionerà correttamente? Tieni presente che questi framework hanno limiti diversi che mono stesso. –

+3

Sì, ho visto una demo in cui un binario F # è stato eseguito su iPhone tramite mono touch. Ci sono alcune limitazioni, in pratica devi essere in grado di risolvere staticamente tutto, ma puoi colpirle sia in C# che in F #. Le limitazioni sono documentate qui: http://docs.xamarin.com/ios/about/limitations – Robert

+0

@Robert, proverò a cercare quella demo, sarebbe bello. Per quanto riguarda la parte delle limitazioni, il problema è che F # per sua natura è più difficile da risolvere staticamente. Daremo un'occhiata a quei casi allora. Grazie mille, molto utile. –

4

In teoria, si dovrebbe essere in grado di eseguire il codice F # su MonoTouch e Mono per Android. In pratica ... le cose sono più complicate. :-)

MonoTouch e Mono per Android forniscono le proprie librerie di classi di base che sono incompatibili con il desktop .NET (sono in gran parte un superset di Silverlight). Per ottenere il codice F # in esecuzione su MonoTouch e Mono per Android, è necessario prima compilare il codice F # con gli assembly appropriati.

Inoltre, è necessario rimuovere tutte le dipendenze su FSharp.Core.dll (è anche possibile?) O la porta FSharp.Core.dll in modo che possa essere eseguita contro l'equivalente MonoTouch e Mono per assiemi Android. Sono sicuro che sia possibile, ma non ho idea se sia stato fatto o quanto sarebbe stato facile.

Dopo aver rimosso o soddisfatto lo FSharp.Core.dll e le dipendenze correlate, si dovrebbe essere in grado di aggiungere tutti gli assembly richiesti (l'assembly F # più le dipendenze) al progetto ed eseguire.

3

Basta compilare la libreria F # con --standalone (Properties | Build | Other flags | --standalone) e incorporerà FSharp.Core.dll nella libreria.

4

appena trovato questi post nel blog di un F # e tutte le cose Mono Guy: MonoTouch & F# P I e MonoTouch & F# P II

+1

Grazie per avermi aiutato a migliorare la risposta. A parte questo, Miguel de Icaza ha commentato che stanno lavorando per portare F # su Xamarin (http://news.ycombinator.com/item?id=5251413), quindi questa è un'ottima notizia e metterebbe F # a un livello completamente diverso. –

+0

@JacoboPolavieja Alcuni mesi fa è stato aggiunto un modello F # MonoGame. Quindi c'è quello. – Jwosty

+3

Dato che Xamarin ora supporta F #, è emozionante vedere che possiamo avere app F # ovunque: tutti i desktop, web, iOS, Android ... è incredibile come, essendo un linguaggio che non è ancora molto utilizzato, può indirizzare tante piattaforme diverse . È semplicemente fantastico :) –