2012-02-15 13 views
8

Me preguntaba si hay alguna conversión automática de código F # a código C# que funcione bien en la práctica. La razón de esto es que tenemos un poco de lógica en F # que nos gustaría utilizar con Mono para Android, MonocMac, MonoTouch ... para crear una aplicación para cada plataforma. Como esos no son compatibles con F # directamente, sería bueno si pudiéramos continuar programando la lógica en F # y hacer la parte de la GUI con C# y esas herramientas.Traducción automática de F # a C#

¿Alguien sabe de algo? Gracias.

+2

no son compatibles con F # F # directamente, sino de exes DLL y debe trabajar con esas plataformas también. ¿Has probado? –

Respuesta

5

Cualquier descompilador de .NET que admita tanto F # como C# puede hacerlo.

Por ejemplo: Cecil.Decompiler y ILSpy.

Steve Gilham tiene algunos buenos artículos sobre la descompilación de F # a C# usando Cecil.Decompiler y ILSpy y algunas otras publicaciones de blog sobre la interoperabilidad entre F # y el código C#. Esos artículos pueden ser útiles para usted.

Normalmente, solo uso ILSpy cuando me pregunto qué está pasando bajo el código F #, que será más explícito cuando se descompile en C#. Compilar el código F # en un archivo DLL separado y consumirlo en su código C# es la mejor manera de hacerlo.

+0

¿No hay ningún problema en la práctica? F # es un gran ahorro de tiempo y si tenemos que modificar algunas cosas más adelante en el proceso está bien, siempre y cuando no sean dolores de cabeza ... gracias. –

+4

No es probable que compile el código de C# generado por ILSpy, ya que cualquier uso de cierres en F # generaría clases internas con nombres que no son válidos C#. – Robert

6

¿Por qué necesita traducir el código? Un binario administrado compilado debería funcionar bien con Mono. Solo agrégalo al proyecto.

Puede usar una herramienta como ILSpy para descompilar su código en otro idioma, pero eso realmente no cambia mucho; ese es el objetivo de compilar diferentes idiomas en .NET CIL.

+0

skolima, ¿está seguro de que puede agregar un binario a un proyecto MonoTouch y se ejecutará correctamente? Tenga en cuenta que estos marcos tienen diferentes limitaciones que el mono mismo. –

+3

Sí, he visto una demostración en la que se ejecutaba un binario F # en el iPhone a través de un toque único. Hay algunas limitaciones, básicamente necesitas poder resolver todo estáticamente, pero puedes golpearlas tanto en C# como en F #. Las limitaciones se documentan aquí: http://docs.xamarin.com/ios/about/limitations – Robert

+0

@Robert, intentaré buscar esa demostración, sería agradable. Sobre la parte de las limitaciones, creo que el problema es que F # por su naturaleza es más difícil de resolver estáticamente todo. Echaremos un vistazo a esos casos entonces. Muchas gracias, muy útiles. –

4

En teoría, debería poder ejecutar su código F # en MonoTouch y Mono para Android. En la práctica ... las cosas son más complicadas. :-)

MonoTouch y Mono para Android proporcionan sus propias bibliotecas de clases base que son incompatibles con .NET de escritorio (en su mayoría son un superconjunto de Silverlight). Para que su código F # se ejecute bajo MonoTouch y Mono para Android, primero debe compilar su código F # con los ensamblajes apropiados.

Además, deberá eliminar todas las dependencias en FSharp.Core.dll (¿eso es posible?) O en el puerto FSharp.Core.dll para que se pueda ejecutar contra los ensamblajes MonoTouch y Mono equivalentes para Android. Estoy seguro de que esto es posible, pero no tengo idea de si se hizo o de lo fácil que sería.

Una vez que haya eliminado o completado el FSharp.Core.dll y dependencias relacionadas, debería poder simplemente agregar todos los ensamblajes necesarios (su ensamblado F # más dependencias) al proyecto y ejecutarlos.

3

Simplemente compila tu biblioteca F # con --standalone (Properties | Build | Other flags | --standalone) e incorporará FSharp.Core.dll en tu biblioteca.

4

acaba de encontrar estos mensajes de blog por un F # y todas las cosas individuo Mono: MonoTouch & F# P I y MonoTouch & F# P II

+1

Gracias por ayudarlos y mejorar la respuesta. Aparte de eso, Miguel de Icaza ha comentado que están trabajando para llevar F # a Xamarin (http://news.ycombinator.com/item?id=5251413) así que eso es una gran noticia y pondría F # en un nivel completamente diferente. –

+0

@JacoboPolavieja Hace unos meses, se agregó una plantilla F # MonoGame. Entonces hay eso. – Jwosty

+3

Dado que Xamarin ahora admite F #, es emocionante ver que podemos tener aplicaciones F # en todas partes: todos los escritorios, web, iOS, Android ... es increíble cómo, siendo un lenguaje que aún no se usa mucho, puede dirigirse a tantas plataformas diferentes . Es genial :). –