alejandro hidalgo fernández miguel caballero pinto rafael campos godoy
DESCRIPTION
F#. Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy. F#. Su creador fue Don Syme (MSR Cambridge, UK). .NET. Características de F#. Conciso Fuertemente Tipado Inferido como ML Scripting interactivo como Python Portable Concurrente Orientado a objetos - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/1.jpg)
F#Alejandro Hidalgo FernándezMiguel Caballero PintoRafael Campos Godoy
![Page 2: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/2.jpg)
.NETF#
Orientado a
Objetos
Imperativo
Funcional
F#Su creador fue Don Syme (MSR Cambridge,
UK)
![Page 3: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/3.jpg)
Características de F#• Conciso• Fuertemente Tipado• Inferido como ML• Scripting interactivo como Python• Portable• Concurrente• Orientado a objetos• Plataforma .NET
![Page 4: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/4.jpg)
F#El origen se encuentra en Ocaml y HaskellEditor
• Visual Studio
• Editor• Consola
Compilador
• Todas los CLI
• Intermediate Language
![Page 5: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/5.jpg)
F# Aplicaciones realesCTP Septiembre 2008
![Page 6: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/6.jpg)
F#. Preguntas a Don Syme¿Próxima release?¿Código compartido?¿Estará F# en .NET 4.0?¿Será F# el OCaml para .NET?
Programación orientada a objetosProgramación reflexivaComputación de expresiones
¿Seguirá MS Research trabajando sobre F#?Cambridge, Redmon, Vancouver, China, Alemania y New York
![Page 7: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/7.jpg)
¿Qué aporta F# a .Net?Ejemplo:
Una aplicación que analiza millones de feedbacks. Es sistema lee los datos desde una BD SQL Server y escribe los resultados en un fichero de Matlab.
C#1000 líneas aprox.
~ 2 días
![Page 8: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/8.jpg)
Sintaxis de F#• Literales• Tuplas• Identificadores (let)• Funciones• Funciones anónimas• Recursión• Operadores
![Page 9: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/9.jpg)
Programación ImperativaF# contiene recursos de la programación imperativa, añadiendo cambios de estado:
• Tipos• Registros • Llamadas a métodos estáticos • Creación de objetos • Control de flujo• Eventos• ...
![Page 10: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/10.jpg)
Programación OOEl objetivo es encapsular la implementación y el estado. Conseguimos una mejor estructura del programa.
Tenemos herencia, muy útil al trabajar con GUIs
F# tiene:− Interfaces− Casting− Clases
![Page 11: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/11.jpg)
F# vs Haskell
Comparativa
![Page 12: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/12.jpg)
F# vs HaskellF#• No es puramente
funcional• Ejecución perezosa
solo de forma explícita
• Disponibilidad de todas las librerías del Framework .NET
• Más amigable para un programador imperativo
• Integración con Visual Studio
Haskell• Puramente
funcional• Ejecución perezosa• Posibilidad de
descargar multitud de librerías de Internet
• Curva de aprendizaje más inclinada
• Multitud de editores
![Page 13: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/13.jpg)
F# vs Haskell: SintaxisF#• Uso de palabra
clave let para asignar valores a símbolos:
let rec fact = function
| 0 -> 1 | n -> n * fact(n - 1)
Haskell• No es necesario
introducir ninguna palabra clave para asignar valores a símbolos:
fact n | n == 0 = 1 | otherwise = n * fact
(n-1)
![Page 14: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/14.jpg)
Comparación de patronesF#• Uso match …
with • No permite
emparejar patrones en la definición de la función.
Haskell• Sin palabras
claves• Empareja
patrones en la definición de la función
![Page 15: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/15.jpg)
Evaluación perezosaF#• Evaluación perezosa
desactivada por defecto.
• Uso de lazy para evaluación perezosa.
• Las listas no permiten evaluación perezosa.− Uso de Seq− Construcción de
listas infinitas usando unfold.
Haskell• Evaluación
perezosa activada por defecto.
• Uso del operador $! para forzar la evaluación.
• Las listas trabajan de forma nativa con evaluación perezosa.
![Page 16: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/16.jpg)
¿Código imperativo?F#• F# permite código
imperativo (al estilo de C#).
• Permite el uso de variables (let mutable).
• Efectos laterales llamando a funciones .NET o a funciones auxiliares de F# como print_any.
Haskell• Haskell es un
lenguaje puramente funcional: no permite código imperativo.
• Al asociar un valor a un símbolo este permanece inmutable.
• Efectos laterales mediante mónadas.
![Page 17: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/17.jpg)
F# vs Haskell:Rendimiento
![Page 18: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/18.jpg)
F# vs HaskellFibonacci
fib 10 fib 15 fib 20 fib 25 fib 300
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000
Haskell (ms)F# (ms)
![Page 19: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/19.jpg)
F# vs HaskellFibonacci (recursión de cola)
fibCola 100 fibCola 1000 fibCola 5000 fibCola 10000 fibCola 150000
20
40
60
80
100
120
Haskell (ms)F# (ms)
![Page 20: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/20.jpg)
F# vs HaskellFibonacci (sobre listas)
fibList 5000 fibList 10000 fibList 15000 fibList 20000 fibList 225000
100
200
300
400
500
600
Haskell (ms)F# (ms)
![Page 21: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/21.jpg)
F# vs HaskellFactorial
fact 1000 fact 5000 fact 10000 fact 143500
500
1000
1500
2000
2500
3000
3500
4000
Haskell (ms)F# (ms)
![Page 22: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/22.jpg)
F# vs HaskellQuicksort (lista aleatoria)
qsort r 1000 qsort r 10000 qsort r 25000 qsort r 50000 qsort r 700000
2000
4000
6000
8000
10000
12000
Haskell (ms)F# (ms)
![Page 23: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/23.jpg)
F# vs Haskell:Rendimiento
• ¿Y si compilamos Haskell?− Utilizaremos el compilador ghc
− Glasgow Haskell Compiler− main +RTS –sstderr
• F# es un lenguaje interpretado
![Page 24: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/24.jpg)
F# vs Haskell (compilado)Fibonacci
fib 10 fib 15 fib 20 fib 25 fib 30 fib 350
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000
F# (ms)ghc(ms)
![Page 25: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/25.jpg)
F# vs Haskell (compilado)Fibonacci (recursión de cola)
fibCola 100 fibCola 1000 fibCola 5000 fibCola 10000 fibCola 150000
5
10
15
20
25
30
35
40
45
F# (ms)ghc(ms)
![Page 26: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/26.jpg)
F# vs Haskell (compilado)Fibonacci (sobre listas)
fibList 5000 fibList 10000 fibList 15000 fibList 20000 fibList 225000
10
20
30
40
50
60
70
80
90
F# (ms)ghc(ms)
![Page 27: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/27.jpg)
F# vs Haskell (compilado)Quicksort (lista aleatoria)
qsort r 1000 qsort r 10000 qsort r 25000 qsort r 50000 qsort r 700000
200
400
600
800
1000
1200
1400
1600
1800
2000
F# (ms)ghc(ms)
![Page 28: Alejandro Hidalgo Fernández Miguel Caballero Pinto Rafael Campos Godoy](https://reader035.vdocuments.co/reader035/viewer/2022062520/56815e7e550346895dcd0b2c/html5/thumbnails/28.jpg)
Conclusiones comparativa
• GHC otorga un rendimiento óptimo en aplicaciones funcionales.
• F# permite una fácil integración en cualquier tipo de aplicación.
• Winhugs nos ofrece un entorno de desarrollo amigable.
Haskell (I) Haskell (C) F#
Rendimiento
Pobre Muy bueno Bueno
Depuración
Fácil Media Muy fácil
Interfaz GUI (Winhugs)
Consola GUI (VS)