Cargo: تبعية اختيارية عند * عدم * تمكين الميزة.

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

يمكن تشغيل بعض المكتبات على صدأ مستقر مع أداء متدهور (على سبيل المثال بدون استخدام NonZero ) أو إمكانيات محدودة (بعض واجهات برمجة التطبيقات معطلة). يبدو أن الممارسة الناشئة تتضمن ميزة unstable أو nightly Cargo لتمكين المستخدم من الاشتراك في استخدام ميزات الصدأ غير المستقرة عند توفرها.

أنا أنشر rust-rc كعمل حول std::rc::Weak غير مستقر بعد. في الوقت الحالي ، لا يبدو أن هناك طريقة لجعل هذا الصندوق تابعًا افتراضيًا ، ولكن _لا _ عندما يتم تمكين ميزة unstable . هل يمكن أن يضاف هذا إلى الشحن؟

لاحظ أن عكس الإعداد الافتراضي وامتلاك ميزة stable ينقل المشكلة فقط إلى التبعيات التي يمكن / يجب استخدامها فقط في حالة الصدأ غير المستقر.

A-features

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

باستخدام بناء الجملة [target.'cfg(...)'.dependencies] ، يمكن دعم ذلك ببساطة عن طريق السماح لـ cfg(feature = "...") بالتصرف كما هو الحال في كود Rust:

[target.'cfg(not(feature = "std"))'.dependencies]
hashmap_core = "0.1.2"

حاليًا ، يتم التعامل مع مثل هذا القسم على أنه ممكّن _ بغض النظر عن حالة الميزة ، والذي يبدو بصراحة أنه خطأ بالنسبة لي.

ال 3 كومينتر

أود أيضًا أن أحصل على هذا. في midir ، هناك العديد من الخلفيات الخلفية (ALSA و / أو JACK على Linux و / CoreMIDI و / أو JACK على OSX و WinMM على Windows) ، وخطتي هي الحصول على علامة ميزة jack والتي تمكن JACK وتعطيل واحد آخر (أصلي). أود أيضًا إزالة الاعتماد على ALSA / CoreMIDI في حالة التحويل البرمجي لـ JACK ، لذلك يمكن استخدامه حتى إذا لم يتم تثبيت ALSA على النظام.

كانت فكرتي الأولى هي ما هو مطلوب أعلاه ، أي ببساطة لتعطيل التبعية alsa-sys إذا تم تحديد ميزة jack .

البديل عن ذلك هو أن يكون لديك ميزة افتراضية (على سبيل المثال native ) ، والتي يمكن تعطيلها إذا تم تمكين jack ، ومن ثم يكون لديك تبعيات خاصة بالمنصة لهذه الميزة (أي alsa-sys على Linux و CoreMIDI على OSX) ، باستخدام شيء مثل [target.x86_64-unknown-linux-gnu.features] . يبدو أيضًا أنه من المستحيل حاليًا الحصول على مجموعات ميزات افتراضية خاصة بالمنصة المستهدفة ، والتي من شأنها أيضًا حل المشكلة.

لم أتمكن حتى الآن من العثور على حل بديل يعمل دون تحديد التبعيات / الميزات المعتمدة على النظام الأساسي في الصناديق التابعة ، لكن ربما أغفلت شيئًا ما.

باستخدام بناء الجملة [target.'cfg(...)'.dependencies] ، يمكن دعم ذلك ببساطة عن طريق السماح لـ cfg(feature = "...") بالتصرف كما هو الحال في كود Rust:

[target.'cfg(not(feature = "std"))'.dependencies]
hashmap_core = "0.1.2"

حاليًا ، يتم التعامل مع مثل هذا القسم على أنه ممكّن _ بغض النظر عن حالة الميزة ، والذي يبدو بصراحة أنه خطأ بالنسبة لي.

نفس الحالة بالنسبة لي:

[target.'cfg(not(feature = "std"))'.dependencies]
heapless = "0.2.7"

[features]
default = ["std"]
std = []

أريد فقط التبعية heapless إذا لم يتم تمكين الميزة std .
heapless مع كل ليلة فقط ، لكني أريد أن تكون مكتبتي متوافقة مع المستقر إذا تم تمكين std .

هل السلوك الحالي خطأ أم أنه مقصود؟

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