roast programming moz latest language develop syntax rust

syntax - programming - rust latest version



¿Qué significa "dyn" en un tipo? (1)

TL; DR: es una sintaxis para especificar el tipo de objeto de un rasgo y debe preferirse por razones de claridad.

Desde Rust 1.0, los rasgos han llevado una doble vida. Una vez que se ha declarado un rasgo, se puede usar como un rasgo o como un tipo:

// As a trait impl MyTrait for SomeType {} // As a type! impl MyTrait {} impl AnotherTrait for MyTrait {}

Como puedes imaginar, este doble significado puede causar cierta confusión. Además, dado que el tipo MyTrait es un tamaño sin tamaño / tamaño dinámico, esto puede exponer a las personas a mensajes de error muy complejos.

Para mejorar este problema, RFC 2113 introdujo la sintaxis de dyn . Esta sintaxis está disponible a partir de Rust 1.27:

use std::{fmt::Display, sync::Arc}; fn main() { let display_ref: &dyn Display = &42; let display_box: Box<dyn Display> = Box::new(42); let display_arc: Arc<dyn Display> = Arc::new(42); }

Esta nueva palabra clave es paralela a la sintaxis del impl Trait y se esfuerza por hacer que el tipo de objeto del rasgo sea más claramente distinto de la sintaxis del rasgo "simple".

Es probable que en una edición posterior de Rust , la sintaxis básica quede en desuso y luego se elimine.

  • ¿Por qué implementar métodos en un rasgo en lugar de como parte del rasgo?
  • ¿Qué hace que algo sea un "objeto de rasgo"?

Recientemente he visto código usando la palabra clave dyn :

fn foo(arg: &dyn Display) {} fn bar() -> Box<dyn Display> {}

¿Qué significa esta sintaxis?