2009-02-20 21 views
14

Para aquellos de ustedes que están usando f #, ¿con qué áreas de funcionalidad están codificando? ¿Cuál es el lenguaje realmente adecuado y qué hace con mucho más poder y facilidad que decir C#?¿Qué áreas de código usa f # para?

Respuesta

0

Lugares donde hay muchos cálculos matemáticos.

5

Deep Fried Bytes #24 de podcast cubrió esta:

  • procesamiento algorítmico (incluyendo cálculos)
  • creación DSL
  • El procesamiento simultáneo (datos inmutables, colas de mensajes, flujos de trabajo asíncronos)

Y, por supuesto , para muchos sistemas, F # puede formar un núcleo de procesamiento, pero me parece que, en la mayoría de los casos, estará envuelto (interfaz, usuario u otro) se) con C#/VB para proporcionar una interfaz convencional.

3
  1. trabajos científicos (matemáticos y estadísticos, cálculos visualización, optimización, ..)
  2. Programación paralela (F # soporta flujos de trabajo asíncronos, estilo Erlang concurrencia, de efectos paralelo, ...)
  3. lenguaje de programación orientado (por ejemplo. DSL)
  4. datos análisis intensivo
  5. ...
5

Analizar con FParsec (un puerto-in-espíritu de Parsec de Haskell)

3

Actualmente se exploran los usos de F # en

  • SOA
  • La ejecución paralela
  • uso intensivo de datos
  • Procesos de larga ejecución
+0

¿Cómo es más conveniente que C#? – Cerebrus

+0

Aprender F # me ayuda a comprender las nuevas funciones que se encuentran en C#, también me permite explorar nuevas formas de analizar los problemas y las nuevas soluciones posibles. –

5

Actualmente estoy usando F # para desarrollar mi próximo videojuego independiente. Hasta ahora, estoy descubriendo que mi enfoque OO normal es diferente de cómo desarrollo en C#.

Algunas cosas buenas que he notado es que estoy usando funciones más pequeñas en promedio, es decir, el número de líneas por función es muy bajo. También es más natural ahora que alcance una función de miembro privado estático para estar dentro de otro miembro en lugar de tener que estar expuesto a todo en el objeto. Escribir un algoritmo de colisión fue realmente fácil. Es un poco pronto para mí decir que escribir algoritmos en F # es más fácil, pero ya me estoy inclinando de esa manera.

No todo ha sido rosas desde que empecé a usar F #. Todavía me falta documentación en línea. El experto F # ha sido de alguna ayuda, pero como se desliza sobre OO, me deja perdido muchas veces. Me pone de los nervios que el autor eligió no profundizar mucho en OO cuando actualmente es la forma más popular de desarrollo. No estoy buscando botar OO. Estoy buscando integrar funcional en él.

La mayor ventaja que he visto hasta ahora ha sido la corrección de mis códigos. Sé que suena divertido, pero cada vez que compilé mi código, funcionó como se esperaba. Espero que este siga siendo el caso cuando rompa las diez mil líneas de la marca de código.

+1

También he encontrado que F # carece de falta de documentación en general. –

+2

Aunque no está completo, he encontrado que http://en.wikibooks.org/wiki/F_Sharp_Programming es una buena referencia rápida. –

+1

OOP siendo popular! = OOP es el mejor. La potencia funcional de F # es superior a su potencia OOP. Ojalá hubieran dejado OOP fuera de él, porque mientras esté allí, la gente lo usará. : | – Rayne

1

Estoy considerando utilizar F # para el procesamiento de HTML porque la sintaxis de coincidencia de patrones de lista se adapta bien al dominio del problema (Prolog es probablemente mejor, pero aún así).

1

1) Simulaciones (hormigas y micelio)

Es fácil aprovechar los flujos de trabajo asincrónicos para hacer simulaciones para masivamente paralelos.

2) pruebas unitarias para C# API

F # hace para pruebas cortas, dulces y muy legibles. Además, FsStory es bastante agradable.

3) Análisis de Datos y Visualización

Tiene grandes bibliotecas de visualización y es muy rápido para probar cosas diferentes a cabo. También me encanta VSLab y espero que vea otro lanzamiento pronto.

4) El rápido desarrollo XNA

Una vez que usted tiene un pequeño marco establecido para mantener el objeto de orientación hacia XNA a raya, F # desarrollo es mucho más rápido y mucho más fácil de experimentar.

En resumen, creo que F # es fantástico en cualquier parte donde la velocidad de desarrollo o la inmutabilidad triunfa sobre la corrección de API. Si hubiera un indicador pragma o compilador para desactivar la inferencia de tipo para las funciones públicas y las definiciones de tipo, probablemente también estaría presionando para usarlo con mis API.

2

F # hace casi todo C#, solo que más fácil. Sus funciones avanzadas significan que terminas escribiendo mucho menos código. La sintaxis OO es más detallada que la otra sintaxis F #, pero aún es mejor que usar C#.

Lo estamos usando para servicios web, sitios ASP.NET MVC, demonios,

La pregunta es, donde no usarlo. En este momento, parece ser principalmente donde falta el soporte de herramientas. Entonces, por ejemplo, con ASP.NET, el código en línea de la página ASPX es C#, pero los controladores y todo lo demás está en F #.

Los pocos lugares donde F # no es tan fácil como debería ser, imagino que se resolverán en las próximas versiones.

2

Aquí hay algunos buenos usos prácticos de F # y la programación funcional de Trauma Pony dada como respuesta a mi similar question.

  • dinámica de fluidos computacional
  • procesamiento
  • Física
  • trazado de rayos
  • La minería de datos
  • imágenes médicas
  • software de ingeniería de control
  • de procesamiento de señal digital
  • Bioinformática

De hecho, echa un vistazo a esta página para ver muchos más ejemplos de dónde se ha usado GPGPU.

1

Estoy usando citas, compilación de expresiones linq, dsls, flujos de trabajo async, y las construcciones fp típicas para un cliente en este momento. Mucha interoperabilidad con C#.

3

Pequeños scripts de procesamiento de datos (ish). Piensa en analizar archivos de registro largos e intenta detectar comportamientos "extraños". Los patrones activos y el procesamiento de flujo hacen que los programas sean agradables (y rápidos). Solía ​​escribir esto en C#, pero eran descartables. Utilizando F #, en realidad me encuentro reutilizando guiones anteriores y ampliándolos.

Test con FsCheck (bueno, está bien, supongo que eso es trampa como porté lo mismo ...), pero ha sido increíblemente útil (en realidad estaba sorprendido por esto mismo;)) no sólo para elaboración de proyectos de F #, pero Bibliotecas .NET en general. Como FsCheck es un DSL de prueba, creo que también debería unirme al carro de DSL.

He estado queriendo usar F # con WPF o XNA desde hace años, pero no he tenido tiempo para hacerlo.

Contrario a algunos he encontrado que una vez que conoces la sintaxis implícita de construcción de clases de F #, la programación OO usando F # es igual de agradable, si no más que usar C# o VB.

Es cierto que si escribe una biblioteca en F #, a menos que tenga mucho cuidado, terminará siendo interoperable solo en teoría. Las bibliotecas F # verdaderamente interoperables deben ser muy cuidadosas con lo que F # construye para usar, o escribir un contenedor C#/VB.

Kurt

1

estoy usando F # para desarrollar un motor para un juego de estrategia por turnos que estoy jugando con el diseño. Descubrí que la combinación de funcionalidades y programación OO de F # me permitía manipular los datos del juego de forma concisa de maneras que serían demasiado complicadas en un C# imprescindible como para querer hacer. También es bastante natural separar las acciones que cambian de estado de los pliegues y de tal manera que determinan cómo debe cambiar el estado, lo que definitivamente ayuda a mantener el código más simple y organizado.

La trampa más grande en la que me pueda caer en el proyecto es el uso de anotaciones de tipo de tuplas para un par de tipos de datos que se utilizan con bastante intensidad en una de las clases. Usar tuplas hace que el código sea bastante conciso, pero no estoy seguro de que usar la anotación de tipo en la firma de las funciones que los usan sea suficiente para mantener el código legible en algunos casos.

0

Estoy usando F # para recibir (TCP), analizar y almacenar mensajes de protocolo binario de dispositivos industriales. Actualmente, estoy probando flujos de trabajo asincrónicos.

El siguiente proyecto es la visualización y análisis de los datos recibidos.

1

Programa de análisis y transformación.