2017-07-24 9 views
9

cargo build of the same code: spurious compile time errors? पता लगाना करने के बाद, मुझे पता है कि ऐसी समस्या को रोकने के लिए करना चाहते हैं:मैं कार्गो को अलग-अलग सुविधाओं के साथ समान निर्भरता विलय करने से कैसे रोक सकता हूं?

$ cargo new feature_merge 
$ cargo add nmea 
$ cargo check > /dev/null 2>&1 && echo "success" 
success 
$ cargo add cexpr 
$ cargo check > /dev/null 2>&1 || echo "failed" 
failed 
$ cargo rm cexpr && cargo check > /dev/null 2>&1 && echo "success" 
success 

मैं हटाने/किसी भी संशोधन के बिना कोड निर्भरता जोड़ सकते हैं और इस बिल्ड परिणाम को प्रभावित करती है। निर्भरता, कार्गो के रूप में

nom = "3.1.0" 

केवल NMEA के साथ:

nom = {version = "^3", features = ["verbose-errors"] } 

जबकि nmea इस तरह निर्भरता का वर्णन करता है:

समस्या, as I described के स्रोत, कि cexpr इस तरह nom पर निर्भर करता है विशेषताओं के एक सेट के साथ नाम बनाता है, जबकि कार्गो सुविधाओं के एक और सेट के साथ नाम के खिलाफ cexpr और nmea बनाता है।

मैं अपने द्वारा बनाए गए निमा क्रेट के ऐसे गलत उपयोग को रोकने का एक तरीका चाहता हूं।

मुझे "`nom` compiled with wrong features" जैसे संकलन समय त्रुटि चाहिए, या नाम के दो प्रकारों का निर्माण करने के लिए कार्गो को मजबूर करना होगा।

मैं nmea/Cargo.toml में इस तरह बात करने की कोशिश की:

nom = { version = "3.1.0", default-features = false } 

यह कुछ भी नहीं बदला; cexpr और nmea संयुक्त होने पर अभी भी संकलन समय त्रुटि है।

+0

यहां अधिक विशिष्ट ज्ञान वाले लोगों को शामिल करने के लायक हो सकते हैं; हो सकता है कि आपको आर/जंग या जंग उपयोगकर्ता मंच पर सवाल को क्रॉस-पोस्ट करने पर विचार करें, या यहां तक ​​कि कार्गो गिथब रिपोजिटरी पर एक बग खोलना चाहिए। –

+0

@MatthieuM। मैंने https: // github पोस्ट किया।कॉम/जंग-लैंग/चार्ज/मुद्दे/4323 कुछ समय पहले – fghj

उत्तर

1

यह है ज्ञात मुद्दा, संबंधित लिंक:

cargo issue 1

cargo issue 2

cargo rfc

संक्षिप्त सारांश:

टोकरा की सुविधाओं additive होने की अपेक्षा की जाती है

दूसरे शब्दों में क्रेट में प्रत्येक सुविधा केवल कार्यक्षमता को जोड़ना चाहिए, एपीआई नहीं बदलना चाहिए। दुर्भाग्यवश इस समस्या को अवरुद्ध करने के लिए कोई अच्छा दस्तावेज नहीं है, और कम से कम इस पल में इस आविष्कार के परीक्षण के लिए कोई स्वचालन नहीं है। इस विशेष मुद्दे nom बग (github issue), बोली से संबंधित है वहाँ से:

समस्या यहां है कि, जब "सरल त्रुटियों" का उपयोग, प्रकार nom::simple_errors::Err<E> बस nom::ErrorKind<E> का एक प्रकार उर्फ, के साथ है, जबकि "वर्बोज़ त्रुटियां" प्रकार nom::verbose_errors::Err<E> एक समर्पित enum है, इसलिए "साथ-सुविधा" और "बिना फीचर" इंटरफेस असंगत हैं।

संबंधित मुद्दे