يمكن تشغيل بعض المكتبات على صدأ مستقر مع أداء متدهور (على سبيل المثال بدون استخدام NonZero
) أو إمكانيات محدودة (بعض واجهات برمجة التطبيقات معطلة). يبدو أن الممارسة الناشئة تتضمن ميزة unstable
أو nightly
Cargo لتمكين المستخدم من الاشتراك في استخدام ميزات الصدأ غير المستقرة عند توفرها.
أنا أنشر rust-rc كعمل حول std::rc::Weak
غير مستقر بعد. في الوقت الحالي ، لا يبدو أن هناك طريقة لجعل هذا الصندوق تابعًا افتراضيًا ، ولكن _لا _ عندما يتم تمكين ميزة unstable
. هل يمكن أن يضاف هذا إلى الشحن؟
لاحظ أن عكس الإعداد الافتراضي وامتلاك ميزة stable
ينقل المشكلة فقط إلى التبعيات التي يمكن / يجب استخدامها فقط في حالة الصدأ غير المستقر.
أود أيضًا أن أحصل على هذا. في 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
.
هل السلوك الحالي خطأ أم أنه مقصود؟
التعليق الأكثر فائدة
باستخدام بناء الجملة
[target.'cfg(...)'.dependencies]
، يمكن دعم ذلك ببساطة عن طريق السماح لـcfg(feature = "...")
بالتصرف كما هو الحال في كود Rust:حاليًا ، يتم التعامل مع مثل هذا القسم على أنه ممكّن _ بغض النظر عن حالة الميزة ، والذي يبدو بصراحة أنه خطأ بالنسبة لي.