Cargo: لا يتم تطبيق "-لا-ميزات-افتراضية" على التبعيات

تم إنشاؤها على ١١ أغسطس ٢٠١٥  ·  3تعليقات  ·  مصدر: rust-lang/cargo

تخيل أنني أعمل على MyCrate ، والذي يعتمد على الصندوق A ، الذي يحتوي على ميزة افتراضية X .
إذا جمعت MyCrate باستخدام --no-default-features ، فسيظل الصندوق A مبنيًا مع تمكين الميزة X .

هذا أمر مزعج ، لكن من الممكن التغلب عليه باستخدام Cargo.toml مثل:

[dependencies.A]
version = "*"
default-features = false

ومع ذلك ، لا يعمل هذا الحل عندما يعتمد A على صندوق آخر B له ميزاته الافتراضية. في هذه الحالة ، لا يبدو أنه من الممكن تعطيل الميزات الافتراضية لـ B . بمعنى آخر ، يبدو أنه من المستحيل تعطيل الميزات الافتراضية للتبعية غير المباشرة.

حالتي التحفيزية الخاصة هي libc تعتمد بشكل غير ضروري على libstd عند استخدامها من خلال البضائع .

التعليق الأكثر فائدة

alexcrichton :
فهل من المفترض أن يشتمل كل صندوق على [dependencies.*] default-features = false فقط حتى يتمكن المستخدم النهائي من اختيار الانسحاب من بعض الميزات المتداخلة؟ هذا يبدو منفرا إلى حد ما.

ال 3 كومينتر

هذا هو السبب في أن Cargo يسمح لك بإعادة تصدير الميزات من التبعيات في الصندوق الرئيسي نفسه. تهدف التبعيات إلى أن تكون تفاصيل تنفيذ خاصة بدلاً من واجهة عامة ، وإذا كنت ترغب في تصدير الميزة ، فيجب عليك الاشتراك صراحةً للقيام بذلك.

alexcrichton :
فهل من المفترض أن يشتمل كل صندوق على [dependencies.*] default-features = false فقط حتى يتمكن المستخدم النهائي من اختيار الانسحاب من بعض الميزات المتداخلة؟ هذا يبدو منفرا إلى حد ما.

نعم ، هذه هي النية. إن صنع شيء ما بميزة default يعني أنه سيتم تشغيله طوال الوقت تقريبًا ، لذلك لا يُقصد به بالضرورة لجميع الوظائف الاختيارية.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات