tutorial sharp note minor fsharp ejemplos .net f#

.net - sharp - f# vs c#



¿Cómo se utilizará F#(sharp)? (8)

Tengo problemas para ubicar los conceptos y las posibilidades del lenguaje F # que se presentará de Microsoft.

¿Se utilizará F # solo para declarar funciones? ¿O las aplicaciones se escribirán ''enteramente'' en F # mezclando F # con el código C # o VB normal?


¿Se utilizará F # solo para declarar funciones? ¿O las aplicaciones se escribirán ''enteramente'' en F # mezclando F # con el código C # o VB normal?

Hemos estado escribiendo aplicaciones completas en F # durante más de 3 años. Muchas empresas están aumentando sus bases de códigos existentes con F #.

Los puntos de entrada más fáciles para F # son cosas como enviar muestras de F # que demuestran cómo la API de la biblioteca que estás vendiendo se puede usar desde F #. Esto no es una obviedad para ninguna compañía, ya que las muestras no son críticas para su misión, por lo que la experiencia técnica y el mantenimiento continuo no son un problema. F # también es una gran herramienta para escribir arneses de prueba para código existente en cualquier lenguaje .NET. Nuevamente, el cliente nunca obtiene ese código, por lo que su confiabilidad fuera de su compañía no es una preocupación. En la práctica, no hemos tenido problemas para usar Gung-Ho y usar F # en todas partes y enviarlo a los clientes sin que ellos lo sepan. Eso funciona particularmente bien para las pequeñas empresas porque las mejoras masivas de productividad nos dan una gran ventaja competitiva.


Ciertamente, es posible escribir programas completos en F #. Sin embargo, creo que la mayoría de los programas no irán de esta manera. Es muy probable que F # se use para los algoritmos complejos y la lógica de la aplicación (el corazón del programa), mientras que C # probablemente se use para el "exterior" (la GUI, etc.). .NET está imperativamente estructurado, por lo que en lugares donde se utilizan las bibliotecas con mucha frecuencia, C # probablemente sea más "natural" que F #.


Dependiendo del contexto, podrías considerar ambos.

Puede usar F # para crear aplicaciones .NET completas o conectarlo a otros lenguajes .NET. Puede consumir y exponer bibliotecas desde / hacia otros lenguajes .NET.


Lo he usado durante medio año y creo que se convertirá en un lenguaje de uso general. Es bastante complejo de aprender, así que dudo que se use demasiado en un entorno mixto. Los gerentes quieren mantener los costos al mínimo.

  • La velocidad de refactorización para mí es el mayor punto de venta de F # . Habiendo construido un videojuego simple con él, me he enamorado de los constructos de idiomas. Al principio, la idea de tratar con un motor de estado parecía estar fuera de lugar en un lenguaje funcional, sin embargo, con registros, tuplas e inferencia de tipos hace cambios muy rápidos.

  • F # tiene buena legibilidad . Una vez que esté familiarizado con F #, si permite una combinación de estilos de programación de paradigmas múltiples, el código se vuelve muy conciso y fácil de leer, sin embargo, como todos los idiomas, alguien que no sabe lo que está haciendo puede convertirlo en una pesadilla.

Mi trabajo diario incluye creación de prototipos web, así que espero ver a dónde va FSharp.WebTools y ver más soporte para F # con Microsoft MVC .


Mi expectativa es que F # se usará para piezas de algunos sistemas especializados, los bits que involucran subprocesos complejos / maths / financial / modeling / etc, donde F # funciona bien. Para la mayoría de las otras áreas (IU, DAL, etc.), parece preferible un lenguaje de propósito general como C # (IMO).

Una de las ventajas de F # es que (en teoría) puede probar que el código está funcionando, en lugar de solo probarlo. El soporte de subprocesos (gracias a la inmutabilidad y el uso asíncrono) también es bueno (aunque PLINQ puede competir en subprocesos).

Conectarse a .NET para permitir una integración adecuada entre F #, C #, VB, IronPython, IronRuby, etc. realmente muestra los puntos fuertes de cada uno. Hoy, si estuviera haciendo un montón de interoperabilidad COM, consideraría VB (que cambiará en 4.0 con dynamic ); para la mayoría de los códigos - C #. Para las matemáticas, etc, F #. Ordenado.


Puedo recomendarte encarecidamente que veas la charla de Luca Bolognese de PDC 2008. No solo es muy entretenido, sino que también demuestra casos de uso de F # bastante impresionantes:

Una introducción a Microsoft F # por Luca Bolognese


Tu pregunta implica que todo el código eventualmente se convierte en una aplicación.

Sin embargo, este no es necesariamente el caso, y uno de los puntos fuertes de F # (en comparación con C #, por ejemplo), es que puede "desglosar" su IDE favorito y simplemente ejecutar bits de código, sin toda la infraestructura de Solución / Proyecto / clase .

Para obtener resultados de pruebas de cálculos numéricos, transformar datos, probar un nuevo algoritmo (incluso si termino codificándolo en C # en la ''aplicación''), clasificando los archivos de registro, incluso creando una pequeña utilidad para decirme cuántas referencias de C # en realidad se están utilizando en un ensamblaje dado, F # es ingenioso, rápido y, sin embargo, se puede escalar rápidamente hasta un dll si decido seguir usándolo.


Uso F # en las siguientes áreas:

DLLs y bibliotecas . Casi todo el código nuevo que escribo en mi tiempo libre es F #, y solo busco C # cuando necesito una GUI rápida.

Multiterada . En el trabajo, he estado introduciendo lentamente F #. Tuve la oportunidad de demostrar lo que puede hacer al mover algunos VB.NET de un solo hilo feo a F # multiproceso utilizando flujos de trabajo asíncronos y procesadores de buzones.

DSLs y análisis . En mi última empresa, usé FsLex / FsYacc para analizar SQL en un AST . Una variación del código del prototipo se convirtió en este tutorial .

Scripting . Estoy totalmente <3 scripting con archivos .fsx. Es una forma práctica de escribir pequeños scripts sin tener que escribir un ejecutable completo. También es bueno modificar el código fuente y volver a ejecutarlo sin tiempo de inactividad. He modificado el comportamiento predeterminado de los archivos .fsx para ejecutar fsi en lugar de abrirlos en VS cuando se hace doble clic.