Imagine que estou trabalhando em MyCrate
, que depende de crate A
, que tem um recurso padrão X
.
Se eu compilar MyCrate
com --no-default-features
, a grade A
ainda será construída com o recurso X
habilitado.
Isso é irritante, mas é possível contornar usando um Cargo.toml como:
[dependencies.A]
version = "*"
default-features = false
No entanto, esta solução não funciona quando A
depende de outra caixa B
que possui seus próprios recursos padrão. Neste caso, não parece possível desabilitar os recursos padrão do B
. Em outras palavras, parece impossível desabilitar os recursos padrão de uma dependência indireta.
Meu caso motivador particular é que libc depende desnecessariamente de libstd quando usado por meio de carga .
É por isso que o Cargo permite reexportar recursos de dependências na própria caixa principal. As dependências destinam-se a ser um detalhe de implementação privada em vez de uma interface pública e, se você quiser que o recurso seja exportado, deverá optar explicitamente por fazê-lo.
@alexcrichton :
Então, cada caixa deve incluir [dependencies.*] default-features = false
apenas para que um usuário final possa optar por não receber algum recurso aninhado? Isso parece bastante obtuso.
Sim, essa é a intenção. Tornar algo um recurso default
significa que ele será ativado quase o tempo todo, portanto, não é necessariamente destinado a todas as funcionalidades opcionais.
Comentários muito úteis
@alexcrichton :
Então, cada caixa deve incluir
[dependencies.*] default-features = false
apenas para que um usuário final possa optar por não receber algum recurso aninhado? Isso parece bastante obtuso.