Hablaremos del modelo de pertenencia que Rust ofrece y por qué es una de las aportaciones más importantes que un lenguaje ha ofrecido recientemente. Rust promete un nivel de desempeño similar o mejor a C o C++, pero con las abstracciones de alto nivel a las que uno esta acostumbrado en lenguajes como Java o Ruby.
esión presentada por Norberto Ortigoza en SG Next 2017
8. Tracing Garbage Collectors
(invented by John McCarthy in 1958)
•Algoritmos:
•Mark &Sweep
•Tri-color
•Tipos de Colectores:
•Boehm–Demers–Weiser
•Generacionales
•Incrementales, concurrentes y stop-the-world
•Casos de uso
•Enterprise systems
11. Comparación
Características
Manual
Reference
Counting
Garbage Collector
Smart pointer con
RAII
Velocidad de ejecución
Excelente con
optimización
Muy Buena
Muy buena con
algunas excepciones
Excelente
Consumo de memoria
Poca con
optimización
Poca Regular Poca
Facilidad de uso Complejo
Regular (Ciclos de
retención)
Fácil Regular
Determinístico/
predecible
Si/Si Si/Si Depende/No Si/Si
Runtime o compile-
time
NA
Compile con algo
manual
Runtime Compile
Manejo de recursos No No No Si
Latencia Constante Constante Variable Constante
14. – Rust Team
“Rust wants safe (not vulnerabilities) memory
and resource management without garbage
collection”
15. Rust
características
•Tipado estático con inferencia de tipos.
•No clases. :-)
•Pattern matching.
•Funciones de grado superior.
•Modelo de concurrencia basado en canales.
•Inmutable.
16. Rust
características
•En Rust, como en otros lenguajes con colector de basura, no tienes que liberar de
forma explicita la memoria.
•En Rust, a diferencia de lenguajes con colectores de basura, no necesitas cerrar o
liberar recursos como archivos, sockets y locks.
•Rust logra estos dos puntos sin costos en tiempo de ejecución (colector de basura
o conteo de referencias), y sin sacrificar seguridad.
17. Rust
ownership
•El scope se hace dueño del recurso o memoria.
•Al terminar el scope el recurso o memoria se libera.
•Se puede transferir la propiedad de un recurso o memoria a otra función.
18. Rust
Ejemplo
fn main() {
let s1 = String::from("hello");
let len = calculate_length(s1);
println!("The length of '{}' is {}.", s1, len);
}
fn calculate_length(s: String) -> usize {
s.len()
}
¡Error!
22. Rust
Resumen
•En cualquier momento, puedes tener cualquiera de estas opciones pero no ambas:
•Una referencia mutable.
•Cualquier número de referencias no mutables.
•Las referencias siempre son validas.
23. Comparación
Tipos de manejo de memoria
Manual
Reference
Counting
Garbage
Collector
Ownership
Smart pointer /
RAII
Velocidad de
ejecución
Excelente con
optimización
Buena
Muy buena con
casos especiales
Excelente Excelente
Consumo de
memoria
Poca con
optimización
Poca Regular Poca Poca
Facilidad de uso Complejo
Regular (Ciclos de
retención)
Fácil Regular/Fácil Regular
Determinístico/
predecible
Si/Si Si/Si Depende/No Si/Si Si/Si
Runtime o
compile-time
NA
Compile con algo
manual
Runtime Compile Compile
Manejo de
recursos
No No No Si Si
Latencia Constante Constante Variable Constante Constante
25. Conclusiones
• Siempre debes pensar en tu consumo de
memoria.
• Conoce que estrategia emplea tu lenguaje de
programación.
• Manejo automático de memoria no es igual a no
preocuparse por como tu programa la usa.
• GC son MUY rápidos.
• GC son muy buenos eliminando grupos de
objetos.
26. Conclusiones
• Rust es una alternativa viable para tener control
sobre el uso de memoria y el mecanismo para
administrarla.
• Rust es extremadamente rapido.
• Si tienes un problema donde C o C++ sea la
opción, evaluar mejor usar Rust :-)
• Rust es estable y en fase de creación de
bibliotecas :-)