Upgrade to Pro — share decks privately, control downloads, hide ads and more …

¿Por qué Rust?

¿Por qué Rust?

Rust es un lenguaje de programación de sistemas de alto nivel con abstracciones sin costo. Aprende qué problemas resuelve, cómo los resuelve, y quién lo está usando.

Andrés N. Robalino

March 19, 2019
Tweet

More Decks by Andrés N. Robalino

Other Decks in Programming

Transcript

  1. extern crate libc; extern { fn Focos_Crear(focos: &mut libc::c_ushort); fn

    Focos_PrenderTodos(); fn Focos_Prender(para_foco: libc::c_int); fn Focos_Apagar(para_foco: libc::c_int); }
  2. fn main() { let mut focos = 0u16; unsafe {

    Focos_Crear(&mut focos); Focos_Prender(9); Focos_Prender(8); } println!(“Prendido {}", 0x180); println!("Focos: {}", focos); }
  3. focos $ cargo run Finished dev [unoptimized + debuginfo] target(s)

    in 0.26s Running `target/debug/focos` Prendido 384 Focos: 384
  4. Revisemos un método implementado en Ruby On Rails con puro

    Ruby, como una extensión nativa en C y en Rust.
  5. static VALUE rb_str_blank_as(VALUE str) { rb_encoding *enc; char *s, *e;

    enc = STR_ENC_GET(str); s = RSTRING_PTR(str); if (!s || RSTRING_LEN(str) == 0) return e = RSTRING_END(str); while (s < e) { int n; C
  6. case 0x2029: case 0x202f: case 0x205f: case 0x3000: #if ruby_version_before_2_2()

    case 0x180e: #endif /* found */ break; default: return Qfalse; C
  7. BAJO NIVEL sistemas operativos, servidores, exploradores. 
 WebAssembly
 Web APIs


    Redes
 Blockchain
 IoT
 JUEGOS
 MACHINE LEARNING
  8. CODIGO DE ALTO NIVEL. tipos de datos algrabraicos, genéricos, traits,

    clausuras, funciones de orden superior, macros higienicos, pruebas incorporadas. código rápido, bajo consumo de memoria, no runtime, sin costos ( no hay recolector de basura, etc ) RENDIMIENTO DE BAJO NIVEL.
  9. enum Evento { Carga, TeclaPresionada(char), Click { x: i64, y:

    i64 } } fn imprimir_evento(evento: Evento) { match evento { Evento::Carga => println!("Cargado"), Evento::TeclaPresionada(c) => println!("Tecla {} presionada", c), Evento::Click {x, y} => println!("Clicked en x={}, y={}", x, y), } }
  10. SIN VIOLACION DE ACCESO.
 SIN INVALIDACION DE ITERADORES.
 SIN PUNTEROS

    COLGADOS.
 SIN DOUBLE FREE.
 SIN COMPORTAMIENTO INDEFINIDO.
 SIN PUNTEROS NULOS.
 SIN CONDICIONES DE CARRERA.