es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué significa esta restricción de límite superior de rango más alto?

En Salsa, hay un límite de rasgo de rango superior en un rasgo. He visto LRS en definiciones de funciones pero no en un rasgo. ¿Qué significa esto?

pub trait Query: Debug + Default + Sized + for<'d> QueryDb<'d> {
...
    fn query_storage<'a>(
        group_storage: &'a <self as="" querydb<'_="">>::GroupStorage,
    ) -> &'a Arc<self::storage>;
}

https://github.com/salsa-rs/salsa/blob/fc6806a/src/lib.rs#L370

Es decir, ¿cómo debo leer esto? ¿Está diciendo que, para cualquier “Query”, hay un “QueryDB” correspondiente que tiene una cierta duración?

¿En qué se diferencia esto de lo siguiente?

pub trait Query<'d>: Debug + Default + Sized + QueryDb<'d>

además de que las implementaciones no pueden especificar ‘d?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La definición de rasgo en Salsa incluye un límite de rasgo de rango superior (HRTB, por sus siglas en inglés) en el rasgo QueryDb. Esto significa que, para cualquier implementación del rasgo Query, hay una implementación correspondiente del rasgo QueryDb que tiene alguna duración.

    Esto es diferente del segundo fragmento de código, que especifica un parámetro de duración específico 'd para el rasgo QueryDb. En el código de Salsa, este parámetro de duración es desconocido y puede ser determinado por la implementación de Query.

    Además, el uso de un HRTB en un rasgo es menos común que en una definición de función, pero permite más flexibilidad en la implementación del rasgo. Puede ser útil en casos en los que un método de rasgo necesita una referencia con una duración específica, pero esa duración es desconocida de antemano.

Comments are closed.