Imagine que estoy trabajando en MyCrate
, que depende de la caja A
, que tiene una función predeterminada X
.
Si compilo MyCrate
con --no-default-features
, la caja A
aún se crea con la característica X
habilitada.
Esto es molesto, pero es posible solucionarlo usando un Cargo.toml como:
[dependencies.A]
version = "*"
default-features = false
Sin embargo, esta solución no funciona cuando A
depende de otra caja B
que tiene sus propias funciones predeterminadas. En este caso, no parece posible deshabilitar las funciones predeterminadas B
. En otras palabras, parece imposible deshabilitar las funciones predeterminadas de una dependencia indirecta.
Mi caso motivador particular es que libc depende innecesariamente de libstd cuando se usa a través de cargo .
Esta es la razón por la que Cargo le permite volver a exportar características de las dependencias en la caja principal. Las dependencias están destinadas a ser un detalle de implementación privado en lugar de una interfaz pública, y si desea que la función se exporte, debe optar explícitamente por hacerlo.
@alexcrichton :
Entonces, ¿se supone que cada caja debe incluir [dependencies.*] default-features = false
solo para que un usuario final pueda optar por no participar en alguna función anidada? Eso parece bastante obtuso.
Sí, esa es la intención. Hacer que algo sea una característica default
significa que se activará casi todo el tiempo, por lo que no necesariamente está diseñado para todas las funciones opcionales.
Comentario más útil
@alexcrichton :
Entonces, ¿se supone que cada caja debe incluir
[dependencies.*] default-features = false
solo para que un usuario final pueda optar por no participar en alguna función anidada? Eso parece bastante obtuso.