تخيل أنني أعمل على MyCrate
، والذي يعتمد على الصندوق A
، الذي يحتوي على ميزة افتراضية X
.
إذا جمعت MyCrate
باستخدام --no-default-features
، فسيظل الصندوق A
مبنيًا مع تمكين الميزة X
.
هذا أمر مزعج ، لكن من الممكن التغلب عليه باستخدام Cargo.toml مثل:
[dependencies.A]
version = "*"
default-features = false
ومع ذلك ، لا يعمل هذا الحل عندما يعتمد A
على صندوق آخر B
له ميزاته الافتراضية. في هذه الحالة ، لا يبدو أنه من الممكن تعطيل الميزات الافتراضية لـ B
. بمعنى آخر ، يبدو أنه من المستحيل تعطيل الميزات الافتراضية للتبعية غير المباشرة.
حالتي التحفيزية الخاصة هي libc تعتمد بشكل غير ضروري على libstd عند استخدامها من خلال البضائع .
هذا هو السبب في أن Cargo يسمح لك بإعادة تصدير الميزات من التبعيات في الصندوق الرئيسي نفسه. تهدف التبعيات إلى أن تكون تفاصيل تنفيذ خاصة بدلاً من واجهة عامة ، وإذا كنت ترغب في تصدير الميزة ، فيجب عليك الاشتراك صراحةً للقيام بذلك.
alexcrichton :
فهل من المفترض أن يشتمل كل صندوق على [dependencies.*] default-features = false
فقط حتى يتمكن المستخدم النهائي من اختيار الانسحاب من بعض الميزات المتداخلة؟ هذا يبدو منفرا إلى حد ما.
نعم ، هذه هي النية. إن صنع شيء ما بميزة default
يعني أنه سيتم تشغيله طوال الوقت تقريبًا ، لذلك لا يُقصد به بالضرورة لجميع الوظائف الاختيارية.
التعليق الأكثر فائدة
alexcrichton :
فهل من المفترض أن يشتمل كل صندوق على
[dependencies.*] default-features = false
فقط حتى يتمكن المستخدم النهائي من اختيار الانسحاب من بعض الميزات المتداخلة؟ هذا يبدو منفرا إلى حد ما.