2010-02-11 27 views
20

Estoy empezando a aprender F #. Soy un buen conocedor de lenguajes de programación como C# (y uso del framework .NET en general), pero la programación funcional es nueva para mí. La forma en que aprendo mejor es tomando un libro sobre el tema y comenzando a leer, así que agarré una copia de "Expert F #" y "F # for scientists". Algunas veces tuve la impresión de que esos libros parecen estar ya desactualizados debido a los cambios recientes en el lenguaje, nada demasiado dramático, pero da la sensación de que puede haber más.¿Cuáles son los cambios recientes a F #?

Ahora que F # 2.0 parece haberse estabilizado, sería bueno ver cómo ha resultado el 'verdadero' F # comparado con las versiones del lenguaje descrito en esos (y libros similares).

Así que mis preguntas son:

  • qué temas han cambiado desde que se imprimieron los libros, y ya no son válidos como se describe? ¿Hay algún capítulo que pueda omitir por completo? (Soy consciente de que se ha movido alguna funcionalidad al PowerPack, aunque no está totalmente claro para mí qué funcionalidad está en el PowerPack, y cuál está en la instalación estándar)
  • qué características del lenguaje se describen correctamente, pero tienen nuevas alternativas disponibles? (¿La descripción de los eventos aún está actualizada?)
  • ¿Qué características del lenguaje debo tener en cuenta que se agregaron (o modificaron) desde que se escribieron esos libros?
  • ¿Hay otros cambios recientes en el lenguaje que deba tener en cuenta?

edición: Gracias a todos por las respuestas!

En cuanto a las notas de la versión, pude encontrar las siguientes notas sobre "notas detalladas de publicación" en el blog de Don Syme, aplicando versiones de F # después de 1.9.2 (la versión "Expert F #" menciona que es versión utilizada en el libro):

No he encontrado nada sobre la versión 1.9.5 - no siempre existe esa?

+1

Esto debería ser wiki de la comunidad; es una forma de pregunta de encuesta y es bastante amplia. No hay nada de malo en la pregunta: solo un poco amplio para no ser wiki comunitario en mi humilde opinión. –

Respuesta

13

que probablemente no puede dar una respuesta completa, pero aquí hay algunas cosas que vienen a la mente como que ha sufrido cambios no triviales en los últimos dos años he estado trabajando en F # ...

Menor cambios:

  • Muchas funciones de biblioteca han sido renombraron. Originalmente hubo una inclinación por los caracteres de subrayado que tiene desde que se eliminó para ser más . Similar a la red. Por ejemplo,Seq.to_array es ahora Seq.toArray. Algunos cambios significativos en async y API de citas también.
  • #light es ahora la predeterminada, puede dejar de ponerla en la parte superior de cada archivo
  • algunos cambios en las API/declaraciones de eventos y enumeraciones (el language reference y library docs en MSDN son buenos para obtener información actualizada)
  • hay más necesidad de [<OverloadID>] para hacer funciones miembro sobrecargados

nuevas características:

  • Las unidades de medida eran nuevas en Beta1.
  • comparison y equality restricciones eran nuevas en Beta2.
  • unmanaged restricción en RC.
  • (echa un vistazo a las "notas de la versión" para varios comunicados, vinculados en balas anteriores, para más)
+0

Si #light es el valor predeterminado ahora, ¿cuál es la directiva para #heavy? – BuddyJoe

+0

Está '#indent" off "' – Brian

6

Estoy haciendo un viento de la última versión (1.9.9.9) y anterior (1.9.7.8) de FSharp.

Noté muchas llamadas agregadas a checkNonNull en Array, Seq, Reflect y el módulo de citas. Supongo que estas llamadas se agregaron para proteger F # libs de pasar nulos desde otro idioma como C#. ¿Alguna idea de Brian? La función nullArg arroja una ArgumentNullException.

let inline checkNonNull argName arg = 
    match box arg with 
    | null -> nullArg argName 
    | _ ->() 
  • Hay una nueva ToString override en conjunto y mejoró el formato de conjunto y el mapa de impresión con sformat aka printf "% A".
  • Parte de la limpieza interna de BigInteger para su uso con .net 4.0.
  • Veo una gran cantidad de cambios internos a la sincronización como Brian mencionó.
  • Algunos cambios internos al evento para usar IObserver.

Terminé de revisar todos los archivos fs modificados y la mayoría de los cambios corresponden a funciones privadas que no están expuestas directamente. Lo único que puede afectar al usuario es una impresión bastante diferente de conjuntos y mapas.

Cuestiones relacionadas