programming net language c# oop f# functional-programming

c# - .net programming language



¿En qué áreas F#hace "absoluto sin sentido en el uso"? (9)

Don Syme en su charla SPLASH dice que F # NO pretende ser un reemplazo para C # aunque tenga las capacidades generales. Él continúa diciendo que hay áreas donde F # no tiene sentido en el uso, pero no se expande en la tesis.

  1. ¿Alguien puede decirme qué áreas se deben evitar al usar F #?
  2. También podría mencionar áreas donde brilla C #.

Pregunta relacionada:

¿En qué áreas podría el uso de F # ser más apropiado que C #?


Aplicaciones web donde Frameworks, por ejemplo, ASP.NET MVC se prestan mejor a C #. "Absolutamente sin sentido" es extremo, diría "en circunstancias normales".

Por supuesto, podría usarse para bibliotecas a las que se hace referencia en la aplicación web, pero no para la propia aplicación en sí.


Buena pregunta. Diría que hay razones de lenguaje cero y muchos desafortunados motivos de conjunto de habilidades, aptitudes y actitudes por parte de los desarrolladores, gerentes y clientes.


Bueno, a riesgo de afirmar lo obvio, F # es ante todo un lenguaje de programación funcional y la programación OOP en F # puede ser un dolor de cabeza. Entonces, si estás trabajando con un problema que se expresa mejor con OOP, imagino que usar C # tiene más sentido.

Los tipos mutuamente recursivos y la implementación explícita de interfaces son los primeros ejemplos que me preguntan por qué OOP en F # puede ser engorroso.

Un ejemplo (a menudo citado) de "problema que se expresa mejor con OOP" es crear una biblioteca de UI. Tienes muchos widgets que encapsulan su propio estado y quieres pedirles que hagan algunas cosas como "dibujarte" polimórficamente (¿es eso una palabra?)


Es posible que desee pensar dos veces antes de usarlo para el desarrollo del kernel del sistema operativo o sistemas incrustados de bajo nivel :-)


Esta es una pregunta difícil, porque no está muy bien calificada. ¿Estás hablando del idioma en general , o estás hablando del idioma junto con el soporte actual de IDE? ¿O estás hablando de usar F # dadas las bibliotecas disponibles?

  • Lenguaje en general : no creo que haya áreas donde el uso de F # sería una absoluta tontería. Sería genial para la programación de sistemas de SO totalmente administrado (por ejemplo, Singularity) y creo que los programas funcionales serían más fáciles de verificar formalmente (lo que podría ser un gran problema para OS). Para sistemas embebidos de bajo nivel, puede usar meta-programación e instalaciones orientadas a lenguaje (por ejemplo, para modelar flujo de señal en hardware, etc.)

  • Idioma con IDE actual: el F # IDE actual tiene algunas limitaciones: no funciona con el diseñador de WinForms (pero funciona bien con Blend y WPF).

  • Idioma dado educación del desarrollador : es más difícil contratar programadores F # que contratar programadores C #. Si está creando alguna aplicación que no tiene ningún núcleo complicado (por ejemplo, la "interfaz para una base de datos"), desarrollarla en C # será más barato (si pudiera contratar buenos desarrolladores de F #, probablemente terminarían más rápido y con menos errores, pero puede no valer la pena el costo).

  • Bibliotecas proporcionadas por el lenguaje disponibles : si desea restringirse al uso de F # solo con bibliotecas que funcionan bien con él, el dominio se reducirá un poco más. Por ejemplo, LINQ to SQL y ASP.NET MVC se pueden usar con F #, pero no es perfecto. Sin embargo, para muchos proyectos tendría sentido desarrollar sus propias bibliotecas y luego F # se convierte en un excelente lenguaje para eso.


Hasta que f # sea totalmente compatible con Visual Studio (ASP.NET, WebForms, WPF, etc.) y herramientas de terceros, f # siempre será un ciudadano de segunda clase.

Afrontémoslo, la elección del idioma generalmente no hace mucha diferencia en la productividad cuando se compara con una biblioteca sólida (.NET, disponible tanto para c # yf #, sin ventaja aquí), IDE (intellisense, coloreado de sintaxis, etc.), (solo soporte parcial disponible para f # hasta donde yo sé ... por ejemplo, sin soporte Razor) y herramientas de terceros (por ejemplo, reafilado).

Entonces, con eso en mente, no creo que nadie pueda recomendar un reemplazo completo de c # hasta que todas esas herramientas estén en su lugar para f #. Un buen compromiso es usar f # en las bibliotecas de clase y continuar usando c # en el front-end.


Mi opinión es que reemplazar un lenguaje tan rico y maduro como C # sería muy costoso . Así que, por ejemplo, en este momento , C # es absolutamente la mejor opción para el desarrollo de WinForms si el diseñador de Visual Studio WinForms puede darle una ventaja: F # no tiene ningún diseñador de WinForms.

C # también tiene mejor soporte de LINQ a SQL en este momento. Estoy seguro de que hay muchos otros ejemplos en esta línea.

Luego está requiriendo que toda la fuerza de trabajo calificada de C # actualice sus habilidades a F #, mientras que preserva las habilidades de C # para mantener las aplicaciones, nuevamente caras.

Finalmente, C # es un lenguaje excelente con muchas funciones excelentes, algunos F # ni siquiera tienen genéricos de variante co / contra y soporte inmediato para programación dinámica contra el DLR (F # solo tiene un operador no implementado).

Así que al no esperar que F # reemplace a C #, F # puede evolucionar de maneras nuevas en lugar de gastar todo el tiempo en ponerse al día en áreas que ya están bien cubiertas.


Muchas de las tecnologías de interfaz de usuario de Microsoft como WPF tienen un excelente soporte para enlaces de datos . La vinculación efectiva de datos utiliza un enlace bidireccional para actualizar los objetos subyacentes cuando el usuario interactúa con la interfaz de usuario. Esto implica que un enlace de datos efectivo requiere objetos mutables .

F #, con su énfasis en los tipos inmutables , es una combinación bastante pobre para ese tipo de modelo de enlace de datos. Si bien es posible crear tipos mutables en F #, hacerlo eliminaría muchos de los beneficios del lenguaje. Simplemente tiene más sentido usar un lenguaje (como C #) donde la mutabilidad es más natural.


Si está dispuesto a renunciar a herramientas específicas de C #, y paga cualquier costo de adopción aplicable, no hay un área en particular donde F # no sea tan capaz como C #.