Esiste un modo per eseguire il codice F # in C#? Ho scritto un'app in C# - Mi piacerebbe fornirgli la possibilità di eseguire F #, leggere gli oggetti Record, enumerare gli elenchi da F #. Qual è la soluzione attuale per questo? So che in futuro ci sarà probabilmente un modo per farlo tramite un aggiornamento a Roslyn. Inoltre, curioso di come eseguire il codice F # in F #, al momento. C'è un modo per farlo facilmente?Esegui codice F # in C# - (Come C# in C# usando Roslyn)
risposta
Attualmente, è necessario creare una libreria F # e quindi chiamarla da C#. Poiché F # è solo .NET, l'uso della libreria F # è (principalmente) proprio come l'utilizzo di qualsiasi altra libreria C#. Si potrebbe voler esaminare FSharpX per questa parte, tuttavia, poiché fornisce alcune utilità per facilitare la chiamata di F # da C# e viceversa.
Se si desidera compilare F # in modo dinamico da C#, è necessario utilizzare l'implementazione F # CodeDom da F# Power Pack. Questo ti permetterà di usare CodeDom per compilare F # al volo, e poi eseguirlo da C#.
Si noti che Roslyn non aiuterà in questo caso, anche quando è stato rilasciato, in quanto non supporta F # come modello di codice, solo C# e VB.Net. Sarebbe potenzialmente possibile usare Roslyn per manipolare e compilare C# da F #, ma non viceversa.
In aggiunta alle opzioni che Reed ha già menzionato, ci sono altre due alternative basate sull'uso di F # Interactive - è possibile eseguirlo come processo separato o si può usare la versione open source per fare riferimento e chiamare direttamente (che è piuttosto impegnativo, però).
Quindi, in sintesi, sono disponibili tre opzioni:
è possibile avviare il processo di
fsi.exe
e valutare codice F # in ambiente F # Interactive (con l'invio di codice F # per il processo con standard input). L'associazione F # per MonoDevelop è un buon esempio su come farlo (vedi InteractiveSession.fs).L'unica difficoltà è la comunicazione tra i due processi, ma penso che questo dovrebbe essere possibile utilizzando un canale remoto .NET (o WCF) tra i due. Puoi anche leggere lo standard output di F # Interactive, ma potrebbe essere un po 'troppo semplice.
È possibile utilizzare il rilascio open source di F# compiler & tools per fare riferimento a parti rilevanti del compilatore F # e chiamarle (come libreria) per valutare il codice F #. Questa sarebbe l'opzione migliore e ti darebbe più o meno le stesse opzioni disponibili con C# interattivo di Roslyn.
Purtroppo, questo non è un compito abbastanza facile - stavo giocando con l'idea di fare questo e ho fatto qualche progresso (posso condividerlo), ma non è ancora finito. L'idea è di prendere il codice sorgente di
fsi.exe
(here), rimuovere tutta l'interfaccia utente e trasformarla in una libreria.- Utilizzando CodeDOM, è possibile richiamare il compilatore F # (
fsc.exe
) per compilare il codice F # in un'applicazione (o libreria) autonoma, caricarlo dinamicamente ed eseguirlo.Uno svantaggio è che questo inizierà una nuova istanza del compilatore ogni volta che lo usi e quindi potrebbe essere un po 'lento (dipende dal tuo scenario)
Poiché la domanda è stata posta, c'è stato molto di sviluppo interessante :-)
ora è possibile farlo molto facilmente utilizzando il progetto F# Compiler Services:
il pacchetto # servizi compilatore F è un componente derivato dal codice sorgente # compilatore F che espone funzionalità aggiuntive per l'attuazione di F # collegamenti linguistici, strumenti aggiuntivi basati sul compilatore o sul refactoring utensili. Il pacchetto include anche il servizio interattivo F # che può essere utilizzato per incorporare lo scripting F # nelle tue applicazioni.
- 1. Come scrivere questo codice C# in F #
- 2. Come aggiungere un nuovo operatore in C# usando Roslyn
- 3. Esegui codice .NET IL in C#
- 4. Esegui codice C# su GPU
- 5. Esegui codice C# utilizzando Powershell
- 6. Roslyn C cambiamento # incrementazione
- 7. Esegui codice come utente diverso (C#)
- 8. Utilizzo di Roslyn in F #
- 9. Esegui codice C# dall'applicazione C++ (Android NDK) gratuitamente
- 10. testare il codice in C++ C
- 11. Mystical "F colon" in C#
- 12. implementazione C# EventHandlers in F #
- 13. esegui codice macchina binaria da C
- 14. Come utilizzare il codice C in C++
- 15. F # List.map equivalente in C#?
- 16. Usa codice Python in C/C++
- 17. Come decodificare mp3 in wav usando lame in C/C++?
- 18. riscrivere il codice C# utilizzando Task.WhenAll in F #
- 19. Type.GetType() non funziona per F # di tipo in C# codice
- 20. Codice assembly in C++
- 21. codice offuscato in C
- 22. Come portare il codice C++ esistente in C++ 11
- 23. Converti C# HashSet in F # Set
- 24. codice dinamico in C
- 25. come scrivere javascript in asp.net nel codice dietro usando C#
- 26. ordinamento di default in C# con F #
- 27. Esegui un altro programma in C++
- 28. Codice non sicuro in C#
- 29. codice Parse JavaScript in C#
- 30. Passaggio del compilatore C# di Roslyn