Beberapa perpustakaan dapat berjalan pada Rust yang stabil dengan kinerja yang menurun (misalnya tanpa menggunakan NonZero
) atau kemampuan terbatas (beberapa API dinonaktifkan). Praktik yang muncul tampaknya memiliki fitur Kargo unstable
atau nightly
untuk memungkinkan pengguna memilih untuk menggunakan fitur Rust yang tidak stabil saat tersedia.
Saya menerbitkan rust-rc sebagai solusi untuk std::rc::Weak
yang belum stabil. Saat ini, sepertinya tidak ada cara untuk menjadikan peti ini sebagai ketergantungan secara default, tetapi _not_ ketika fitur unstable
diaktifkan. Bisakah ini ditambahkan ke Kargo?
Perhatikan bahwa membalikkan default dan memiliki fitur stable
hanya memindahkan masalah ke dependensi yang hanya dapat/seharusnya digunakan pada Rust yang tidak stabil.
Saya juga ingin memiliki ini. Di midir , ada beberapa backend (ALSA dan/atau JACK di Linux, CoreMIDI dan/atau JACK di OSX, WinMM di Windows), dan rencana saya adalah memiliki flag fitur jack
yang memungkinkan JACK dan menonaktifkan yang lain (asli). Saya juga ingin menghapus ketergantungan pada ALSA/CoreMIDI dalam hal kompilasi untuk JACK, sehingga bahkan dapat digunakan jika ALSA tidak diinstal pada sistem.
Ide pertama saya adalah apa yang diminta di atas, yaitu untuk menonaktifkan ketergantungan alsa-sys
jika fitur jack
dipilih.
Alternatif untuk ini adalah memiliki fitur default (misalnya native
), yang dapat dinonaktifkan jika jack
diaktifkan, dan kemudian memiliki dependensi khusus platform untuk fitur ini (yaitu alsa-sys
di Linux dan CoreMIDI di OSX), menggunakan sesuatu seperti [target.x86_64-unknown-linux-gnu.features]
. Tampaknya saat ini juga tidak mungkin untuk memiliki set fitur default khusus platform target, yang juga akan menyelesaikan masalah.
Sejauh ini saya tidak dapat menemukan solusi yang berfungsi tanpa mendefinisikan dependensi/fitur yang bergantung pada platform dalam peti dependen, tetapi saya mungkin telah mengabaikan sesuatu.
Dengan sintaks [target.'cfg(...)'.dependencies]
, ini dapat didukung hanya dengan mengizinkan cfg(feature = "...")
untuk berperilaku seperti dalam kode Rust:
[target.'cfg(not(feature = "std"))'.dependencies]
hashmap_core = "0.1.2"
Saat ini, bagian tersebut diperlakukan sebagai _terlepas dari_ status fitur yang diaktifkan, yang sejujurnya tampak seperti bug bagi saya.
Kasus yang sama untuk saya:
[target.'cfg(not(feature = "std"))'.dependencies]
heapless = "0.2.7"
[features]
default = ["std"]
std = []
Saya hanya ingin ketergantungan heapless
jika fitur std
tidak diaktifkan.
heapless
berfungsi dengan nightly, tetapi saya ingin perpustakaan saya kompatibel dengan stable jika std
diaktifkan.
Apakah perilaku saat ini merupakan bug atau memang disengaja?
Komentar yang paling membantu
Dengan sintaks
[target.'cfg(...)'.dependencies]
, ini dapat didukung hanya dengan mengizinkancfg(feature = "...")
untuk berperilaku seperti dalam kode Rust:Saat ini, bagian tersebut diperlakukan sebagai _terlepas dari_ status fitur yang diaktifkan, yang sejujurnya tampak seperti bug bagi saya.