2010-05-12 16 views
6

एक कबाल फ़ाइल की निर्भरता अनुभाग में:hackage पैकेज निर्भरता और भविष्य प्रूफ पुस्तकालयों

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0 

मैं की तरह

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0 && < 0.3.0 

(संकुल मैं निर्भर के संस्करणों पर ऊपरी सीमा डाल कुछ कर रही किया जाना चाहिए चालू)

या नहीं?

मैं कोई वास्तविक उदाहरण का उपयोग करेंगे: मैं सीमा डाल नहीं है, तो Hackage पर अपने "सूची" पैकेज (सूची इकाई ट्रांसफार्मर और वर्ग)

  • - मेरी पैकेज में "बदलाव के कारण टूट सकता ट्रांसफार्मर "
  • अगर मैं सीमा डाल करते हैं - का उपयोग करता है एक उपयोगकर्ता" ट्रांसफॉर्मर "लेकिन यह के एक नए संस्करण का उपयोग कर रहा है क्योंकि यह केवल ट्रांसफार्मर-0.2 की इन कक्षाओं का एक उदाहरण है ListT साथ lift और liftIO उपयोग करने के लिए सक्षम नहीं होगा .x

मुझे लगता है कि अनुप्रयोगों को हमेशा ऊपरी सीमाएं रखना चाहिए ताकि वे कभी नहीं तोड़ें, इसलिए यह प्रश्न केवल पुस्तकालयों के बारे में है:

क्या मैं निर्भरताओं पर ऊपरी संस्करण सीमा का उपयोग करूंगा या नहीं?

उत्तर

4

एक स्पष्ट policy ऊपरी सीमाओं की सिफारिश करने वाला है - विशेष धारा 3 ("कैबेल में निर्भरता") में देखें। अन्य उत्तरों इस नीति के लिए कुछ और औचित्य देते हैं।

संक्षेप में - ऊपरी सीमा < A.(B+1) के रूप में होनी चाहिए जहां ए और बी वर्तमान संस्करण (A.B.C...) के पहले तत्व हैं। ऐसा इसलिए है क्योंकि A.B में वृद्धि का मतलब यह होना चाहिए कि संस्करण पुराने एपीआई को तोड़ देता है।

+2

मैंने आपके उत्तर में उल्लिखित नीति का एक त्वरित सारांश जोड़ा। मुझे उम्मीद है कि आपको कोई फर्क नहीं पड़ता है, लेकिन यदि आप करते हैं, तो इसे बदलने/रीफ्रेश/इसे वापस करने के लिए स्वतंत्र महसूस करें। – yairchu

1

आईएमओ स्वीकार किए गए संस्करण संख्याओं पर ऊपरी सीमा डालने का सही काम है। हैकेज द्वारा उपयोग किए गए संस्करण संख्याओं के अर्थशास्त्र को देखते हुए निश्चित रूप से कोई गारंटी नहीं है कि आपका पैकेज इस मामले में ट्रांसफॉर्मर 0.3.0 के साथ काम करेगा।

मैंने इस बारे में कोई वास्तविक चर्चा नहीं देखी है, हालांकि मूल पैकेज को छोड़कर ऊपरी सीमाओं का उपयोग करने के लिए सामान्य अनुशंसा नहीं होती है।

2

विफलता मोड के बारे में सोचो:

  • ऊपरी सीमा के साथ

    , या तो अपने पैकेज बनाता है या कबाल एक असंतुष्ट निर्माण निर्भरता के बारे में bleats। दोष स्पष्ट रूप से असाइन किया गया है।

  • ऊपरी बाउंड के बिना, ग्राहक के पास ट्रांसफार्मर का एक हालिया संस्करण है और यह पीछे की ओर संगत नहीं है। आपका सॉफ़्टवेयर निर्माण करने में विफल रहता है; जीएचसी इस बारे में ब्लीट करता है कि आपका कोड कैसे संकलित नहीं होता है। आपका सॉफ़्टवेयर कमजोर दिखता है।

ऊपरी बाउंड में रखें।

+0

ऊपरी बाउंड के साथ, कैबल एक असंतुष्ट बिल्ड निर्भरता के बारे में ब्लीट नहीं करेगा, मैंने इसका परीक्षण किया और यह प्रिंट करता है "चेतावनी: यह पैकेज अप्रत्यक्ष रूप से उसी पैकेज के कई संस्करणों पर निर्भर करता है। यह संकलन विफलता का कारण बनने की अत्यधिक संभावना है। "।फिर ग्राहक पैकेज शायद अनुपलब्ध उदाहरण – yairchu

+1

@Yairchu के कारण संकलित करने में विफल रहेगा: क्या इसका मतलब यह है कि आपके पैकेज में आयात किया गया पैकेज 'ट्रांसफॉर्मर्स' पर निर्भर करता है, लेकिन इसमें अलग-अलग संस्करण बाधाएं हैं? – jberryman

+0

@ जेबरीमैन: बिल्कुल। मेरा टेस्ट पैकेज सूची पर निर्भर करता है जो ट्रांसफार्मर> = 0.2.0 और हो सकता है कि हो सकता है कि ट्रांसफॉर्मर 0.1 पर निर्भर करता है। * – yairchu

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