इस प्रकार, मैं दो उपकरणों का उल्लेख करूंगा जिनकी तुलना केबल-इंस्टॉल और स्टैक के रूप में की जा रही है । विशेष रूप से, मैं काबाल लाइब्रेरी के साथ भ्रम से बचने के लिए कैब-इंस्टॉल का उपयोग करूंगा , जो कि दोनों उपकरणों द्वारा उपयोग किया जाने वाला सामान्य बुनियादी ढांचा है।
मोटे तौर पर हम कह सकते हैं कबाल से स्थापित और ढेर करने के लिए फ़्रंटएंड्स हैं कबाल । दोनों उपकरण हास्केल परियोजनाओं का निर्माण करना संभव बनाते हैं जिनकी निर्भरता के सेट एकल सिस्टम की सीमा के भीतर एक दूसरे के साथ संघर्ष कर सकते हैं। उनके बीच महत्वपूर्ण अंतर यह है कि वे इस लक्ष्य को कैसे पूरा करते हैं:
डिफ़ॉल्ट रूप से, केबल-इंस्टॉल इच्छा, जब एक परियोजना का निर्माण करने के लिए कहा जाता है, तो इसकी .cabal
फ़ाइल में निर्दिष्ट निर्भरता को देखें और पैकेज और पैकेज संस्करणों के एक सेट का पता लगाने के लिए एक निर्भरता सॉल्वर का उपयोग करें जो इसे संतुष्ट करता है। यह सेट एक पूरे - सभी पैकेजों और सभी संस्करणों, अतीत और वर्तमान के रूप में हैकेज से तैयार किया गया है । एक बार एक संभव निर्माण योजना मिल जाने के बाद, निर्भरता के चुने हुए संस्करण को एक डेटाबेस में स्थापित और अनुक्रमित किया जाएगा ~/.cabal
। निर्भरता के बीच संस्करण संघर्षों को उनके संस्करणों (साथ ही अन्य प्रासंगिक कॉन्फ़िगरेशन विकल्पों) के अनुसार स्थापित पैकेजों को अनुक्रमित करने से बचा जाता है, ताकि विभिन्न परियोजनाएं एक दूसरे के पैर की उंगलियों पर कदम रखे बिना निर्भरता संस्करणों को प्राप्त कर सकें। यह व्यवस्था क्या है"निक्स-शैली स्थानीय बिल्ड" द्वारा कैब-इंस्टॉल प्रलेखन का मतलब है ।
जब एक प्रोजेक्ट बनाने के लिए कहा जाता है , तो हैकेज में जाने के बजाय , स्टैक विल, के resolver
क्षेत्र को देखें stack.yaml
। डिफ़ॉल्ट वर्कफ़्लो में, वह फ़ील्ड स्टैकेज स्नैपशॉट निर्दिष्ट करता है , जो कि फिक्स्ड संस्करणों के साथ हैकेज पैकेज का सबसेट है, जो पारस्परिक रूप से संगत होने के लिए जाना जाता है। ढेर तो निर्भरता में निर्दिष्ट संतुष्ट करने का प्रयास करेंगे .cabal
फ़ाइल (या संभवतः फ़ाइल का उपयोग करते हुए केवल क्या स्नैपशॉट द्वारा प्रदान की जाती है - अलग स्वरूप, वही भूमिका)। प्रत्येक स्नैपशॉट से स्थापित पैकेज अलग-अलग डेटाबेस में पंजीकृत हैं, जो एक-दूसरे के साथ हस्तक्षेप नहीं करते हैं।project.yaml
हम कह सकते हैं कि जब एक बिल्ड कॉन्फ़िगरेशन को निर्दिष्ट करने की बात आती है तो स्टैक अप्रोच सीधेपन के लिए कुछ सेटअप लचीलेपन को ट्रेड करता है। विशेष रूप से, यदि आप जानते हैं कि आपकी परियोजना एलटीएस 15.3 स्नैपशॉट का उपयोग करती है, तो आप इसके स्टैकेज पेज पर जा सकते हैं और जान सकते हैं, एक नज़र में, स्टैकेज से किसी भी निर्भरता स्टैक के संस्करण खींच सकते हैं। उस ने कहा, दोनों उपकरण उन सुविधाओं की पेशकश करते हैं जो मूल वर्कफ़्लोज़ से परे जाती हैं ताकि, प्रत्येक और बड़े सभी एक दूसरे के साथ ऐसा कर सकें (संभवतः कम सुविधाजनक तरीके से)। उदाहरण के लिए, एक ज्ञात अच्छे बिल्ड कॉन्फ़िगरेशन के सटीक संस्करणों को फ्रीज करने और कैबिन - इंस्टॉलेशन के साथ हैकेज की एक पुरानी स्थिति के साथ निर्भरता को हल करने के तरीके हैं।, और स्टैक का उपयोग करते समय गैर-स्टैकेज निर्भरता या ओवरराइड स्नैपशॉट पैकेज संस्करणों की आवश्यकता होती है ।
अंत में, काबा-इंस्टॉल और स्टैक के बीच एक और अंतर जो इस अवलोकन में ध्यान देने योग्य है कि स्टैक का उद्देश्य पूर्ण बिल्ड वातावरण प्रदान करना है, जिसमें स्वत: जीएचसी स्थापना प्रबंधन और डॉकर एकीकरण जैसी विशेषताएं हैं । इसके विपरीत, केबल-इंस्टाल का अर्थ पारिस्थितिकी तंत्र के अन्य भागों के लिए रूढ़िवादी होना है, और इसलिए यह इस तरह की सुविधा प्रदान करने का प्रयास नहीं करता है (विशेष रूप से, जीएचसी संस्करणों को अलग से स्थापित और प्रबंधित किया जाना चाहिए, यह लिनक्स डिस्ट्रो के माध्यम से होना चाहिए संकुल, विंडोज़ में हास्केल प्लेटफ़ॉर्म कोर , या घिच टूल )।
cabal-install
स्टैकेज का उपयोग करता है और जितना संभव हो उतना स्टैकेज का उपयोग करता है - कुछ बिंदु पर केबल-इंस्टाल में कुछ बैक-इंटीग्रेशन हो सकता है और मुझे लगता है कि समुदाय को यकीन नहीं है कि यह अच्छी बात है या नहीं, क्योंकि यह समुदाय को विभाजित कर सकता है)