Cargo: Ketergantungan opsional saat fitur *tidak* diaktifkan.

Dibuat pada 27 Jul 2015  ·  3Komentar  ·  Sumber: rust-lang/cargo

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.

A-features

Komentar yang paling membantu

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.

Semua 3 komentar

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?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat