Bayangkan saya sedang mengerjakan MyCrate
, yang bergantung pada crate A
, yang memiliki fitur default X
.
Jika saya mengkompilasi MyCrate
dengan --no-default-features
, peti A
masih dibangun dengan fitur X
diaktifkan.
Ini menjengkelkan, tetapi mungkin untuk mengatasinya dengan menggunakan Cargo.toml seperti:
[dependencies.A]
version = "*"
default-features = false
Namun, solusi ini tidak bekerja ketika A
bergantung pada peti lain B
yang memiliki fitur default sendiri. Dalam hal ini, tampaknya tidak mungkin untuk menonaktifkan fitur default B
. Dengan kata lain, tampaknya tidak mungkin untuk menonaktifkan fitur default dari ketergantungan tidak langsung.
Kasus motivasi khusus saya adalah libc tidak perlu bergantung pada libstd ketika digunakan melalui cargo .
Inilah sebabnya mengapa Cargo memungkinkan Anda untuk mengekspor kembali fitur dari dependensi di peti utama itu sendiri. Dependensi dimaksudkan sebagai detail implementasi pribadi alih-alih antarmuka publik, dan jika Anda ingin fitur tersebut diekspor, Anda harus secara eksplisit memilih untuk melakukannya.
@alexcrichton :
Jadi, apakah setiap peti seharusnya menyertakan [dependencies.*] default-features = false
hanya agar pengguna akhir dapat memilih untuk keluar dari beberapa fitur bersarang? Itu tampaknya agak tumpul.
Ya, itu niatnya. Menjadikan sesuatu sebagai fitur default
berarti fitur itu akan diaktifkan hampir sepanjang waktu, jadi fitur ini tidak selalu dimaksudkan untuk semua bagian fungsionalitas opsional.
Komentar yang paling membantu
@alexcrichton :
Jadi, apakah setiap peti seharusnya menyertakan
[dependencies.*] default-features = false
hanya agar pengguna akhir dapat memilih untuk keluar dari beberapa fitur bersarang? Itu tampaknya agak tumpul.