SlideShare una empresa de Scribd logo
1 de 23
Rust por rustáceos
Hour of Code 2017 – Universidad de Valladolid
Adrián Arroyo Calle – https://blog.adrianistan.eu
¿Por qué Rust?
● Alto rendimiento
● Abstracciones de coste cero
● Sin condiciones de carrera
● Seguridad de memoria
● Programación funcional
EficienciaSeguridad
Concurrencia
Rust
Instalando Rust
1)Instalar rustup
2)(opcional) Configurar un editor
https://rustup.rs/
https://hourofcode.inf.uva.es/
Un clásico “hola mundo”
Creamos un proyecto
– > cargo new hola_mundo --bin
> cargo run
En Flandes se usaba Cargo…
Cargo es una herramienta, incluida con Rust,
que nos ayuda en la compilación, tests,
documentación y
la gestión de dependencias.
Variables
● let
● Inferencia de tipos
● Inmutables por defecto
● Casting con as
Algunos tipos interesante
Propósito Tipos
Numerales U8, u16, u32, u64, i32,
f64,...
Texto String, str
Arrays [u8;5], Vec<T>, ...
Tuplas (i32,i32), (f64, String),...
Memoria dinámica Box<T>
Punteros inteligentes Rc<T>, RefCell<T>,
Cell<T>, Arc<T>,
Mutex<T>
Encapsulados Option<T>, Result<T,U>
match
Match es un switch que ha tomado esteroides
if, while, loop y for
El bucle for itera sobre
cualquier variable que
implemente un Iterador
Dueños y préstamos
● Todas las variables por referencia tienen un dueño
● El dueño puede transferir la propiedad de la variable o
prestar la variable a: un escritor o a infinitos lectores.
● Para transferir: nada
● Para prestar en modo lectura: &
● Para prestar en modo escritura: &mut
La semántica de movimiento puede costar de entender
al principio, pero prestar es muy interesante,
yo me hice rico prestando dinero, no te digo más
Funciones
Las funciones se definen
con fn
Toman argumentos de
varios tipos y
devuelven un
valor de otro tipo
Se puede retornar la función con return o
con una última expresión (sin punto y coma)
Las funciones soportan genericidad
Option y Result
Solo sé que no sé nada. No todas las funciones
tienen por qué pueden devolver un valor (Option)
o realizarse sin errores (Result)
I call it my billion
dollar mistake.
The invention of
the null in 1965
Option = Some(T) | None
Result = Ok(T) | Err(U)
Option y Result
Solo sé que no sé nada. No todas las funciones
tienen por qué pueden devolver un valor (Option)
o realizarse sin errores (Result)
I call it my billion
dollar mistake.
The invention of
the null in 1965
Option = Some(T) | None
Result = Ok(T) | Err(U)
Leer archivos
BufReader mejora el rendimiento y trae más métodos
que usar File directamente. ¿Desea que me vaya?
● Sí
● Ya estás tardando
Struct, impl, trait
● Rust no está orientado a objetos en el sentido estricto
del término
● Existen struct (solo datos) que pueden tener funciones
asociadas
● A su vez, estas struct pueden implementar traits
(similar a interfaces de otros lenguajes)
● No hay herencia, no hay constructores reales
Struct, impl
Rust es un lenguaje con clase,
aunque no tenga clases
Se puede usar pub
para marcar un método
como público.
Existe azúcar sintáctico
para diferenciar métodos
estáticos y de instancia
HashMap
El HashMap es una estructura de
datos muy útil. Almacena pares
clave-valor.
lambda
Las funciones lambda se definen
con barras, y se pueden asignar
a una variable
Las funciones lambda son muy útiles
para operar con iteradores:
map, filter, reduce, take_while,...
Threads
En nuestra especie superior podemos
Hacer varias cosas a la vez. Usar Rust
para la concurrencia y el paralelismo es
lo más cercanos que estáis los humanos
de pareceros a nosotros
Para compartir información
entre hilos se puede usar
Arc y Mutex o el sistema
de envío de mensajes.
Macros
Las macros se indican con una
exclamación. No son funciones como tal.
Forman parte de la metaprogramación.
Pero son una súper pasada
Macros de interés
println!
print!
format!
vec!
try!
assert!
include_bytes!
Panic!
FIN
Gracias por venir
BONUS: Fractal de Koch
Descubierto por Hegel van Koch
se basa en una estructura muy simple
que se aplica de forma recursiva.
¿Qué hay más navideño que el
turrón, las uvas, mi discurso
y los fractales de Koch?
https://github.com/aarroyoc/fractal_koch_rust

Más contenido relacionado

Similar a Rust Hour Of Code 2017 - Valladolid

Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018Eudris Cabrera
 
presentacindslintro-151124180611-lva1-app6891.pdf
presentacindslintro-151124180611-lva1-app6891.pdfpresentacindslintro-151124180611-lva1-app6891.pdf
presentacindslintro-151124180611-lva1-app6891.pdfFranciscoBlancoFis
 
Introducción a DSL (Lenguajes Específicos de Dominios) con Python
Introducción a DSL (Lenguajes Específicos de Dominios) con PythonIntroducción a DSL (Lenguajes Específicos de Dominios) con Python
Introducción a DSL (Lenguajes Específicos de Dominios) con PythonJuan Rodríguez
 
Curso básico de lenguaje R aplicado a las Ciencias Sociales
Curso básico de lenguaje R aplicado a las Ciencias SocialesCurso básico de lenguaje R aplicado a las Ciencias Sociales
Curso básico de lenguaje R aplicado a las Ciencias SocialesNicolas Robinson-Garcia
 
Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajesPedro Contreras Flores
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Eudris Cabrera
 
Curso de C++ (2014)
Curso de C++ (2014)Curso de C++ (2014)
Curso de C++ (2014)Miriam Ruiz
 
Lenguajes de programación: Paradigmas de Programación
Lenguajes de programación: Paradigmas de ProgramaciónLenguajes de programación: Paradigmas de Programación
Lenguajes de programación: Paradigmas de ProgramaciónLuis Fernando Aguas Bucheli
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacionGinger Mega Red
 
Portafolio de evidencias actividades
Portafolio de evidencias actividadesPortafolio de evidencias actividades
Portafolio de evidencias actividadesJames Logan
 

Similar a Rust Hour Of Code 2017 - Valladolid (20)

Clase1_Python-CTIC
Clase1_Python-CTICClase1_Python-CTIC
Clase1_Python-CTIC
 
Clase02 paradigmas
Clase02 paradigmasClase02 paradigmas
Clase02 paradigmas
 
Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018
 
presentacindslintro-151124180611-lva1-app6891.pdf
presentacindslintro-151124180611-lva1-app6891.pdfpresentacindslintro-151124180611-lva1-app6891.pdf
presentacindslintro-151124180611-lva1-app6891.pdf
 
Introducción a DSL (Lenguajes Específicos de Dominios) con Python
Introducción a DSL (Lenguajes Específicos de Dominios) con PythonIntroducción a DSL (Lenguajes Específicos de Dominios) con Python
Introducción a DSL (Lenguajes Específicos de Dominios) con Python
 
Curso básico de lenguaje R aplicado a las Ciencias Sociales
Curso básico de lenguaje R aplicado a las Ciencias SocialesCurso básico de lenguaje R aplicado a las Ciencias Sociales
Curso básico de lenguaje R aplicado a las Ciencias Sociales
 
Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajes
 
EXPO PERL UTT
EXPO PERL UTTEXPO PERL UTT
EXPO PERL UTT
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
 
3
33
3
 
Curso de C++ (2014)
Curso de C++ (2014)Curso de C++ (2014)
Curso de C++ (2014)
 
Lenguajes de programación: Paradigmas de Programación
Lenguajes de programación: Paradigmas de ProgramaciónLenguajes de programación: Paradigmas de Programación
Lenguajes de programación: Paradigmas de Programación
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
1poo
1poo1poo
1poo
 
Portafolio de evidencias actividades
Portafolio de evidencias actividadesPortafolio de evidencias actividades
Portafolio de evidencias actividades
 
Clase 3
Clase 3Clase 3
Clase 3
 
Consulta c++
Consulta c++Consulta c++
Consulta c++
 
Java12
Java12Java12
Java12
 
Estadística con Lenguaje R: Sesión 1
Estadística con Lenguaje R: Sesión 1Estadística con Lenguaje R: Sesión 1
Estadística con Lenguaje R: Sesión 1
 
C#
C#C#
C#
 

Último

PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 

Último (7)

PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 

Rust Hour Of Code 2017 - Valladolid

  • 1. Rust por rustáceos Hour of Code 2017 – Universidad de Valladolid Adrián Arroyo Calle – https://blog.adrianistan.eu
  • 2. ¿Por qué Rust? ● Alto rendimiento ● Abstracciones de coste cero ● Sin condiciones de carrera ● Seguridad de memoria ● Programación funcional EficienciaSeguridad Concurrencia Rust
  • 3. Instalando Rust 1)Instalar rustup 2)(opcional) Configurar un editor https://rustup.rs/ https://hourofcode.inf.uva.es/
  • 4. Un clásico “hola mundo” Creamos un proyecto – > cargo new hola_mundo --bin > cargo run En Flandes se usaba Cargo… Cargo es una herramienta, incluida con Rust, que nos ayuda en la compilación, tests, documentación y la gestión de dependencias.
  • 5. Variables ● let ● Inferencia de tipos ● Inmutables por defecto ● Casting con as
  • 6. Algunos tipos interesante Propósito Tipos Numerales U8, u16, u32, u64, i32, f64,... Texto String, str Arrays [u8;5], Vec<T>, ... Tuplas (i32,i32), (f64, String),... Memoria dinámica Box<T> Punteros inteligentes Rc<T>, RefCell<T>, Cell<T>, Arc<T>, Mutex<T> Encapsulados Option<T>, Result<T,U>
  • 7. match Match es un switch que ha tomado esteroides
  • 8. if, while, loop y for El bucle for itera sobre cualquier variable que implemente un Iterador
  • 9. Dueños y préstamos ● Todas las variables por referencia tienen un dueño ● El dueño puede transferir la propiedad de la variable o prestar la variable a: un escritor o a infinitos lectores. ● Para transferir: nada ● Para prestar en modo lectura: & ● Para prestar en modo escritura: &mut La semántica de movimiento puede costar de entender al principio, pero prestar es muy interesante, yo me hice rico prestando dinero, no te digo más
  • 10.
  • 11.
  • 12. Funciones Las funciones se definen con fn Toman argumentos de varios tipos y devuelven un valor de otro tipo Se puede retornar la función con return o con una última expresión (sin punto y coma) Las funciones soportan genericidad
  • 13. Option y Result Solo sé que no sé nada. No todas las funciones tienen por qué pueden devolver un valor (Option) o realizarse sin errores (Result) I call it my billion dollar mistake. The invention of the null in 1965 Option = Some(T) | None Result = Ok(T) | Err(U)
  • 14. Option y Result Solo sé que no sé nada. No todas las funciones tienen por qué pueden devolver un valor (Option) o realizarse sin errores (Result) I call it my billion dollar mistake. The invention of the null in 1965 Option = Some(T) | None Result = Ok(T) | Err(U)
  • 15. Leer archivos BufReader mejora el rendimiento y trae más métodos que usar File directamente. ¿Desea que me vaya? ● Sí ● Ya estás tardando
  • 16. Struct, impl, trait ● Rust no está orientado a objetos en el sentido estricto del término ● Existen struct (solo datos) que pueden tener funciones asociadas ● A su vez, estas struct pueden implementar traits (similar a interfaces de otros lenguajes) ● No hay herencia, no hay constructores reales
  • 17. Struct, impl Rust es un lenguaje con clase, aunque no tenga clases Se puede usar pub para marcar un método como público. Existe azúcar sintáctico para diferenciar métodos estáticos y de instancia
  • 18. HashMap El HashMap es una estructura de datos muy útil. Almacena pares clave-valor.
  • 19. lambda Las funciones lambda se definen con barras, y se pueden asignar a una variable Las funciones lambda son muy útiles para operar con iteradores: map, filter, reduce, take_while,...
  • 20. Threads En nuestra especie superior podemos Hacer varias cosas a la vez. Usar Rust para la concurrencia y el paralelismo es lo más cercanos que estáis los humanos de pareceros a nosotros Para compartir información entre hilos se puede usar Arc y Mutex o el sistema de envío de mensajes.
  • 21. Macros Las macros se indican con una exclamación. No son funciones como tal. Forman parte de la metaprogramación. Pero son una súper pasada Macros de interés println! print! format! vec! try! assert! include_bytes! Panic!
  • 23. BONUS: Fractal de Koch Descubierto por Hegel van Koch se basa en una estructura muy simple que se aplica de forma recursiva. ¿Qué hay más navideño que el turrón, las uvas, mi discurso y los fractales de Koch? https://github.com/aarroyoc/fractal_koch_rust