¿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?
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 rasgoQuery
, hay una implementación correspondiente del rasgoQueryDb
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 rasgoQueryDb
. En el código de Salsa, este parámetro de duración es desconocido y puede ser determinado por la implementación deQuery
.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.