2012-10-29 14 views
13

(इससे पहले कि मैं शुरू: मैं उपयोग करने के लिए कबाल जा रहा हूँ सब कुछ है कि अपने नाम में कबाल है और हास्केल के साथ कुछ है के लिए।)कैबल को पूर्ण पैकेज प्रबंधक क्यों नहीं बनाया गया था?

सामान्य "आप के लिए अद्यतन करने के लिए एक्स की जरूरत थी करने के बाद वाई स्थापित है, लेकिन यह फिर से दूसरे दिन निर्भरता Z "मुद्दा टूट जाएगा, मैंने सोचा कि मैं सिर्फ पूछना चाहते हैं:

  • संशोधन: क्यों किया गया था कबाल, एक पूर्ण पैकेज प्रबंधक होने के लिए बनाया नहीं विशेष रूप से निम्न सुविधाओं के साथ: एक दूसरे के साथ एक पैकेज के कई संस्करणों को स्थापित करें, पैकेज को वसीर लेने दें एड निर्भरताएं। यदि कोई पैकेज संस्करण निर्दिष्ट नहीं है, तो उपलब्ध नवीनतम का उपयोग करें।
  • अद्यतन पैकेज - या बेहतर, भी नवीनतम संस्करण स्थापित करें।
  • निकालें संकुल
  • चेक पैकेज अखंडता

तुम देखो, जहां इस सूची जा रहा है। अभी, मेरे लिए कैबल कुछ हद तक परिष्कृत निर्माण प्रणाली की तरह महसूस करता है (जब आप इसे पहली बार उपयोग करना शुरू करना चाहते हैं तो बेस के किस संस्करण की आवश्यकता है), यह आधा बेक्ड पैकेज इंस्टॉलर के साथ आता है।

तो सवाल फिर से: कैबल को पूर्ण-विशेषीकृत बिल्ड/पैकेज सिस्टम क्यों नहीं बनाया गया था? मुझे यकीन है कि कुछ डिज़ाइन निर्णय थे जो वर्तमान स्थिति को जन्म देते थे।

(यह सवाल कुछ हद तक a rant on Reddit से प्रेरित था, लेकिन यह है कि पुरुष के विपरीत ऊपर। द्वारा किसी को भी अपमान मतलब यह नहीं है) :-)

+3

यह प्रश्न संभवतया लाल रंग पर भी होना चाहिए - एसओ पर संबंधित प्रोग्रामिंग प्रश्नों के प्रकार से बहुत दूर हटा दिया जाना चाहिए। –

+4

* पूछे जाने वाले प्रश्नों पर अक्सर पूछे जाने वाले प्रश्नों से *: "प्रोग्रामर द्वारा आमतौर पर उपयोग किए जाने वाले सॉफ़्टवेयर टूल"? चेक। "व्यावहारिक, उत्तरदायी समस्याएं जो प्रोग्रामिंग पेशे के लिए अद्वितीय हैं"? चेक। – David

+0

क्या आप कैबल को पूर्ण पैकेज मैनेजर में निकालने के लिए स्वयंसेवा कर रहे हैं? –

उत्तर

10

एक ही पैकेज के कई संस्करण स्थापित कर रहा है अभी पूरी तरह से अच्छी तरह से काम (cabal install ansi-terminal-0.5.4 && cabal install ansi-terminal-0.5.5 आज़माएं), लेकिन उसी पैकेज संस्करण के कई उदाहरण इंस्टॉल नहीं करते हैं। यह ऐसा कुछ है जिसे हम समर्थन देना चाहते हैं, क्योंकि इससे हमें hermetic builds लागू करने और "निर्भरता नरक" समस्या हल करने की अनुमति मिल जाएगी, लेकिन यह पूरी तरह से तुच्छ नहीं है। Ghc-pkg और Cabal को कई उदाहरणों के लिए समर्थन जोड़ने के लिए इस वर्ष एक जीएसओसी परियोजना थी, लेकिन पैच अभी तक मुख्य लाइन में नहीं हैं। Here's a video of the HIW 2012 talk about the project's results, और here's the description of the internal design

अपने अन्य प्रश्न के रूप में, वहाँ वास्तव में सभी वर्तमान में इंस्टॉल किए गए पैकेज के नवीनतम संस्करण को स्थापित करने के लिए एक cabal upgrade आदेश हुआ करता था, लेकिन जब से यह अपनी स्थापना (फिर से टूट सकता इसे हटा दिया गया था, उसी के कई उदाहरण के लिए समर्थन कर रहा पैकेज संस्करण इसे ठीक करेगा)। अनइंस्टॉलेशन समर्थन कुछ समय के लिए इच्छा सूची पर रहा है, it's just that no-one had time to implement it yet। मुझे लगता है कि यह डिजिटल हस्ताक्षरित पैकेज और HTTPS के लिए भी जाता है।

इसके अतिरिक्त, यदि आप इन सुविधाओं में से कुछ को लागू करने में रुचि रखते हैं, तो कैबल को पैच हमेशा स्वागत करते हैं, और GitHub पर जाने के साथ कोड को योगदान देने के लिए पहले से कहीं अधिक आसान हो गया है (यदि आप बर्दाश्त कर सकते हैं तो नकदी का योगदान भी ठीक है यह - मुझे लगता है कि Well-Typed इस बारे में आपसे बात करने में बहुत खुशी होगी)।

अद्यतन (सितम्बर 2016): मामलों की वर्तमान स्थिति पर एक अद्यतन के लिए एडवार्ड ज़ेड यांग द्वारा इस पोस्ट देखें: cabal new-build is a package manager

+0

मैं यह समझने के लिए संघर्ष कर रहा हूं कि मेरे हास्केल कॉन्फ़िगरेशन को कैसे बनाए रखा जाए (एक पीआईपी/पायथन मॉडल वाले किसी व्यक्ति के रूप में कैसे काम करना चाहिए ")। उदाहरण के लिए, मान लीजिए कि हास्कल प्लेटफ़ॉर्म बदलता है (कहें कि जीएचसी अपडेट किया गया है)। मुझे अपनी कॉन्फ़िगरेशन को अपडेट करने के लिए क्या करने की आवश्यकता है, जिसमें (ए) कई अतिरिक्त पैकेज शामिल हैं, और (बी) IHaskell, जो (सी) Jupyter में स्थापित है? क्या मुझे प्लेटफॉर्म को हटाने, इसे पुनः स्थापित करने, कैबल के साथ अपने अतिरिक्त पैकेज को पुनर्स्थापित करने, IHaskel को पुनर्स्थापित करने और 'ihaskell इंस्टॉल' को फिर से चलाने की आवश्यकता है? – orome

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