F # cambios en OCaml [cerrado]


F# se deriva de OCaml, pero ¿qué elementos principales faltan o se agregan? Específicamente, tengo curiosidad por saber si los recursos disponibles para aprender OCaml también son útiles para alguien que quiere aprender F#.

Author: Guy Coder, 2008-10-07

5 answers

Las principales diferencias son que F# no soporta:

  • funtores
  • Objetos de estilo OCaml
  • variantes polimórficas
  • el preprocesador camlp4/5 o puntos de extensión (ppx)

Además, F# tiene una sintaxis diferente para los parámetros etiquetados y opcionales.

En teoría, los programas OCaml que no utilizan estas características se pueden compilar con F#. Aprender OCaml es una introducción perfectamente razonable a F# (y viceversa, me imagino).

El la lista completa de diferencias está aquí (nota: archive.org sustitución de enlace muerto).

 83
Author: Chris Conway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-28 07:59:14

Esta pregunta ha sido respondida desde hace algún tiempo, pero me sorprendió bastante que la mayoría de las respuestas digan qué características de OCaml faltan en F# - esto es definitivamente bueno saber si desea portar programas OCaml existentes a F# (que es probablemente la motivación de la mayoría de los artículos referenciados). Sin embargo, hay muchas características que hacen de F# un lenguaje diferente (¡no solo una versión limitada de OCaml para. NET!) Aquí hay un par de cosas que se agregan en F#:

  • Unidades de medida que le permiten verificar el código que trata con cálculos numéricos
  • Metaprogramación {[6] } usando comillas (lo que hace posible usar LINQ en F# y también es esencial para promisar proyectos como la plataforma WebSharper)
  • Patrones activos para crear abstracciones para tipos de datos funcionales (y generalmente una característica muy útil para aplicaciones de coincidencia de patrones más complicadas)
  • Expresiones de cálculo que es un característica de lenguaje detrás de flujos de trabajo asíncronos (una biblioteca para programación asíncrona de E/S/servicio web/GUI)
  • . NET compatible object-system que permite interoperar completamente con la plataforma. NET (OCaml también tiene un soporte para objetos pero diferente - hay por supuesto algunos beneficios en ambos sistemas).
  • Operadores sobrecargados - Por lo que sé, OCaml no tiene operadores sobrecargados-en F # puede usar + para todos los números tipos, así como los tipos que lo soportan.

Y, honestamente, creo que también vale la pena mencionar el Visual Studio IDE. Esto no es parte del lenguaje, pero realmente mejora la experiencia del usuario (¡El soporte de IntelliSense en Visual Studio es realmente bueno!)

Si nos fijamos en la lista, hay muchas cosas que contribuyeron en gran medida a la popularidad de F#, por lo que es mucho más que solo "OCaml sin funtores". F # está definitivamente basado en OCaml (y toma ideas de otros idiomas como Haskell) y comparte muchos aspectos con ellos, sin embargo, también hay muchas otras cosas. Supongo que sin cosas como flujos de trabajo asíncronos, OO estilo. NET y meta-programación, la División de Desarrolladores de Microsoft nunca incluiría F # en Visual Studio 2010.

 109
Author: Tomas Petricek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-02 15:27:30

Siempre describo F# como un primo de OCaml porque OCaml tiene muchas características que F# no tiene y nunca es probable que obtenga. F # está más estrechamente relacionado con el lenguaje CAML anterior. En particular, F # tiene un soporte muy limitado para la abstracción y ningún soporte para la tipificación estructural (como los objetos de OCaml y las variantes polimórficas ) en absoluto.

Contrariamente a lo que algunos respondientes han escrito, F # tiene (limitado) soporte para etiquetado ("named") y opcional argumento.

Sin embargo, todas estas son características avanzadas y ciertamente puede comenzar a familiarizarse con las ideas básicas detrás de la programación funcional de estilo OCaml a pequeña escala utilizando recursos sobre OCaml. La primera gran diferencia que descubrirá son los problemas de mayor escala como la encapsulación y la abstracción que se resuelven de maneras completamente diferentes en OCaml y en F#. Si quieres aprender a hacer eso en F#, la única literatura disponible es este artículo sobre puramente funcional estructuras de datos.

También he descubierto que el maravilloso sistema de módulos de OCaml hace que sea fácil parametrizar código sobre tipos (como estructuras de datos), pero las alternativas de OOP no solo son horribles, sino que casi no se usan en .NET. Además, cuando intento escribir estructuras de datos elegantemente parametrizadas, golpeo docenas de errores en el compilador F# porque nadie ha intentado hacer esto antes. El F # stdlib contiene algunas buenas implementaciones de estructura de datos, pero prácticamente no reutilización, es decir, es un trabajo cut'n'pasta.

 16
Author: Jon Harrop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-04 00:59:16

F# y OCaml son clases taxonómicas en la familia de lenguas ML, que también incluye un passle completo de otros animales extraños. F # es más reciente que OCaml, y todavía no tiene funtores [funciones de módulo -> módulo] ni tipos de fila [clases de objetos y variantes polimórficas]. Entre ellos, esas dos simplificaciones probablemente hacen que la curva de aprendizaje sea más fácil para alguien que desarrolla en la plataforma.Net. Lamentablemente, esas dos características del lenguaje son enormemente poderosas en OCaml, por lo que leer el La literatura de OCaml para obtener información sobre cómo codificar para F # probablemente conducirá a una frustración prematura con este último cuando es probablemente una excelente alternativa a C# donde ambos están disponibles.

 8
Author: james woodyatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-25 17:30:38

F# soporta la sintaxis OCaml directamente. Puede que no sea 100% compatible, pero creo que está bastante cerca.

Http://plus.kaist.ac.kr / ~shoh/fsharp/html/index.html

Aquí hay una lista de diferencias (no estoy seguro de cuán actualizada está)

Http://plus.kaist.ac.kr / ~shoh/fsharp/html/fsharp-vs-ocaml.html

 2
Author: Lou Franco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-07 17:28:46