2010-11-21 25 views
16

Buenos días todo,compatibilidad de código entre OCaml y F #

estoy desarrollando un pequeño proyecto de manía en OCaml. Me preguntaba qué fácil sería migrarlo a F #. Yo sé que F # tiene algunas características que OCaml no, pero yo estaba esperando que mi código OCaml requeriría poco esfuerzo a puerto. No necesariamente quiero migrar, quiero conservar/desarrollar en ambas plataformas.

Gracias de antemano, Michael

+2

Debería ver http://stackoverflow.com/questions/179492/f-and-ocaml –

Respuesta

0

no han hecho ninguna OCaml a F # -porting, pero sé F # ha sido diseñado con la compatibilidad OCaml en mente. Como sé, F # es principalmente un superconjunto de OCaml básico.

Debe ser compatible (y sin #light limitarse a) la mayoría de las palabras clave de OCaml y tener equivalentes de la mayoría de las funciones estándar en las bibliotecas principales (o en el .Net framework). Así que supongo que, al menos para los proyectos de hobby, la migración debería ser realmente fácil.

F # no tiene sistema de módulo avanzado de OCaml embargo, por lo que tendrá problemas con la implementación de ejemplo funtores.

+0

Esto fue cierto hace varios años, pero no creo que ya sea preciso. Un montón de cosas básicas en F # hace tiempo que divergieron de OCaml. Por ejemplo, la indexación de una matriz es 'a. (I)' en OCaml pero 'a. [I]' con una anotación de tipo en F #. Los operadores aritméticos básicos de OCaml sobre números de coma flotante ('+ .',' * .', etc.) ya no funcionan correctamente en F #. –

+1

F # no es principalmente un superconjunto de OCaml, sino un subconjunto con algunas extensiones (patrones activos, etc.). La respuesta de Jon enumera algunas de las características de OCaml que no son compatibles con F #. –

13

Escribir código compilación cruzada parece un mundo de dolor para mí. John Whitington de PDF coherente es la única persona que conozco que ha intentado hacer esto en cualquier grado real.

He traducido una gran cantidad de código OCaml a F # (probablemente más que cualquier otra persona en el mundo) y los principales problemas son #light sintaxis, el uso de cualquier característica OCaml no trivial (objetos, variantes polimórficas, orden superior módulos, etiquetados y argumentos opcionales y así sucesivamente), bibliotecas (por ejemplo lablgl, lablgtk, ocamlgraph, la pereza), macros (análisis sintáctico, corrientes, las extensiones de coincidencia de patrones) y cambios en la sintaxis básica como matriz de indexación. Por ejemplo, intenté portar el Almabench benchmark de OCaml a F # y tardé varias horas porque terminé teniendo que reescribir cada a.[i] a mano a.(i) debido a una multitud de errores en el compilador F #: su modo de compatibilidad OCaml es bastante frágil

Así que le aconsejo que elegir entre los idiomas en lugar de tratar de compilación cruzada.

+0

Muchas gracias. Lo que quería evitar era aprender un idioma adicional. Como tengo un conocimiento práctico de .NET (C#) y conocimientos básicos de OCaml (de mi curso de programación de funciones), pensé que F # era (casi) un hecho. Aparentemente no lo es. :) – user515232

+1

No hay problema. Probablemente te resulte más útil que un obstáculo aprender tanto OCaml como F # al mismo tiempo porque son muy similares, pero probablemente también encuentres las diferencias muy esclarecedoras. –

Cuestiones relacionadas