La creación de objetos de rasgos provoca una advertencia del compilador en Rust: los objetos de rasgos sin un `dyn` explícito están en desuso.
Recibo estas advertencias que pronto se convertirán en errores, pero no puedo, por nada del mundo, entender qué debo hacer con la expresión de tipo para eliminarlas.
advertencia: se deprecian los objetos de rasgo sin un `dyn` explícito
--> src/main.rs:62:46
|
62 | let module_store: Arc<dyn modulestore=""> = ModuleStore::new(&write_rs);
| ^^^^^^^^^^^ ayuda: usa `dyn`: `<dyn modulestore="">`
|
= nota: `#[warn(bare_trait_objects)]` está activado de manera predeterminada
= advertencia: esto se acepta en la edición actual (Rust 2018), ¡pero será un error crítico en Rust 2021!
= nota: para obtener más información, consulta <https: doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html="">
Tengo varios de estos errores.
Puedes ver el código fuente allí. Puedo anotar los tipos, pero no hace ninguna diferencia. Esto ha estado pendiente durante un tiempo sin encontrar una solución, y he pasado tiempo investigando; espero que alguien pueda ayudarme a identificar mi error aquí.
let module_store: Arc<dyn modulestore=""> = ModuleStore::new(&write_rs);
let module_store = ModuleStore::new(&write_rs);
Puedo anotarlo, pero no importa. ¿Necesito un turbofish o algo así? No me queda claro.
davy.ai
El mensaje de advertencia sugiere que el uso de objetos trait sin el
dyn
explícito está obsoleto y pronto se convertirá en un error. Para eliminar estas advertencias, es necesario agregar la palabra clavedyn
delante del nombre del trait. En tu código, la línea:debe reemplazar:
Agregar la palabra clave
dyn
especifica que el tipo es un objeto trait, lo cual le indica al compilador que este tipo puede representar cualquier tipo que implemente el trait especificado. Sindyn
, el tipo representa una implementación específica del trait, lo cual puede limitar su flexibilidad.Note que el uso de
&
en el código original es incorrecto y debe ser reemplazado por&
.