tag ejemplos .net f# functional-programming

.net - ejemplos - ¿Para qué áreas de código está usando f#?



meta tags facebook (15)

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 #?


  1. Trabajos científicos (Cálculos matemáticos y estadísticos, visualización, optimización, ...)
  2. Programación en paralelo (F # admite flujos de trabajo asíncronos, concurrencia de estilo Erlang, FX paralelo, ...)
  3. Programación orientada al lenguaje (por ejemplo, DSL)
  4. Análisis intensivo de datos
  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 comencé 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.


Actualmente exploro los usos de F # en

  • SOA
  • Ejecución en paralelo
  • Intensivo de datos
  • Procesos de larga duración

Estoy considerando usar 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í).


Lugares donde hay muchos cálculos matemáticos.


El podcast Deep Fried Bytes # 24 cubrió esto:

  • Procesamiento algorítmico (incluidos los cálculos)
  • Creación de DSL
  • Procesamiento concurrente (datos inmutables, colas de mensajes, flujos de trabajo asincrónicos)

Y, por supuesto, para muchos sistemas, F # puede formar un núcleo de procesamiento, pero me parece que muy a menudo será envuelto (interfaz, usuario u otro) con C # / VB para proporcionar una interfaz convencional.



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


F # hace casi todo C #, solo 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, daemons,

La pregunta es dónde 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 los próximos lanzamientos.


1) Simulaciones (hormigas y micelio)

Es fácil aprovechar flujos de trabajo asíncronos para realizar simulaciones paralelas masivas.

2) Pruebas unitarias para la API C #

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

3) Análisis y visualización de datos

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

4) Desarrollo rápido de XNA

Una vez que tiene un pequeño marco configurado para mantener a raya la orientación a objetos de XNA, el desarrollo de F # es mucho más rápido y también 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.


Estoy usando F # para desarrollar un motor para un juego de estrategia por turnos con el 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 usando 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.


Pequeños (ish) scripts de procesamiento de datos. 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.

Pruebas usando FsCheck (bueno, vale, supongo que eso es una trampa cuando porté la cosa yo mismo ...), pero ha sido increíblemente útil (en realidad, me sorprendió a mí mismo;)) no solo para probar programas F #, sino también bibliotecas .NET en general. Como FsCheck es un DSL de prueba, creo que también debería unirme al carro de DSL.

Hace tiempo que quería usar F # con WPF o XNA, pero aún no me he acostumbrado.

Al contrario de algunos, he descubierto 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


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 el análisis de los datos recibidos.


Análisis y transformación de programas.


Estos son algunos buenos usos prácticos de F # y la programación funcional de Trauma Pony dado como respuesta a mi pregunta similar .

  • Dinámica de fluidos computacional
  • Procesamiento de Física
  • trazado de rayos
  • Minería de datos
  • Imagenes medicas
  • Software de ingeniería de control
  • Procesamiento de señales digitales
  • Bioinformática

De hecho, consulte esta página para obtener más ejemplos de dónde se ha usado GPGPU.