2011-08-12 12 views
17

मेरे पास cabal package है जो एक प्रकार NBT निर्यात करता है जो अन्य डेवलपर्स के लिए उपयोगी हो सकता है। मैं अपने प्रकार के लिए Arbitrary उदाहरण को परिभाषित करने की परेशानी से गुजर चुका हूं, और यह मेरे काम को एकीकृत करने वाले कोड का परीक्षण करने के लिए अन्य डेवलपर्स को पेश करने की शर्म की बात नहीं होगी।क्विक चेक उदाहरण कैबेल पैकेज में कहां से संबंधित हैं?

हालांकि, मैं उन स्थितियों से बचना चाहता हूं जहां मेरा उदाहरण रास्ते में हो सकता है। शायद Arbitrary उदाहरण के लिए अन्य डेवलपर के पास different idea है। शायद क्विक चेक के किसी विशेष संस्करण पर मेरे पैकेज की निर्भरता क्लाइंट प्रोजेक्ट की निर्भरताओं में हस्तक्षेप या अवांछित हो सकती है।

मेरे विचारों, किसी विशेष क्रम में, कर रहे हैं:

  • प्रकार की परिभाषा के बगल में Arbitrary उदाहरण छोड़ दो, और उदाहरण पीछा या QuickCheck संस्करण संख्या अधिभावी के साथ ग्राहकों सौदा करते हैं।
  • Arbitrary उदाहरण के लिए एक ही पैकेज के भीतर एक अलग मॉड्यूल में एक अनाथ उदाहरण उदाहरण Data.NBT.Arbitrary कहें। समग्र पैकेज के लिए क्विक चेक पर निर्भरता बनी हुई है।
  • Arbitrary उदाहरण को पूरी तरह से अलग पैकेज में ऑफ़र करें, ताकि इसे क्लाइंट प्रोजेक्ट्स के लिए एक अलग परीक्षण निर्भरता के रूप में सूचीबद्ध किया जा सके।
  • सशर्त रूप से Arbitrary उदाहरण और मुख्य पैकेज में क्विक चेक निर्भरता दोनों शामिल हैं, लेकिन केवल तभी जब -ftest जैसे ध्वज सेट हो।

मैंने इन सभी पुस्तकालयों में उपयोग किए गए संयोजनों के संयोजन देखे हैं, लेकिन किसी भी आम सहमति नहीं मिली है जिस पर सबसे अच्छा काम करता है। मैं हैकेज पर अपलोड करने से पहले कोशिश करना और इसे ठीक करना चाहता हूं।

+1

शायद तथ्य यह है कि आप * * इन इस्तेमाल किया तरीकों में से सब देखा है इंगित करता है कि वहाँ वास्तव में * एक आम सहमति नहीं * है? या कम से कम एक आकार-फिट-सभी समाधान नहीं। –

+4

@ सी। ए मैककन: निश्चित रूप से, और यह एक वैध जवाब होगा। हालांकि, यह एक चर्चा के लायक लगता है। – acfoltzer

उत्तर

2

समस्या नीचे आती है: आपकी लाइब्रेरी का उपयोग करने वाला कोई व्यक्ति आपके NBT प्रकार का उपयोग कर क्विक चेक परीक्षण चलाने की इच्छा रखता है?

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

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

मैं सामान्य रूप से क्विक चेक-केवल पैकेज रखने का प्रशंसक नहीं हूं, हालांकि यह कुछ स्थितियों में उपयोगी हो सकता है।

+2

+1 - इस विशेष मामले में "दस्तावेज़ीकरण में नमूना उदाहरण" उचित लगता है। वैकल्पिक रूप से, यदि आपके पास पैकेज के साथ बंडल किया गया है (नई कैबल परीक्षण सुविधाओं का उपयोग करके) तो दस्तावेज़ केवल पैकेज के स्रोत में उदाहरण को इंगित कर सकता है (जिसे केवल परीक्षण के लिए संकलित किया गया है, स्थापना के लिए नहीं) – sclv

3

बहुत ज्यादा नहीं विशिष्ट अनुभव के आधार पर, लेकिन मजबूती के लिए एक सामान्य इच्छा, पैकेज निर्भरता के लिए मार्गदर्शक सिद्धांत शायद उनकी क्षमता के अनुसार

प्रत्येक से होना चाहिए; प्रत्येक को उनकी जरूरत के हिसाब से।

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

यह वास्तव में अच्छा होगा अगर आम सहमति उभरी कि किस स्विच को हमें परीक्षण किट के साथ-साथ बुनियादी कार्यक्षमता प्राप्त करने के लिए झटका लगाने की आवश्यकता है।

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

simplePackage :: (Dependency1, .., Dependencyn) -> Deliverable 

लिखने के लिए मिलता है, लेकिन एक तरह

fancyPackage :: BasicDependency -> (BasicDeliverable, HelpfulExtras -> Gravy) 

तब तक उत्पादों और कार्यों का अधिक व्यापक संयोजन कल्पना कर सकते हैं, विकल्प को सबसे अधिक सटीकता वास्तविक दर्शाता लेने सौदा। और हमें इसके बारे में बताएं, इसलिए हम उस सर्वसम्मति को बना सकते हैं।

+0

विचारों के लिए धन्यवाद, विशेष रूप से निर्भरताओं का अनुवाद; भविष्य में कैबल विकास के लिए यह निश्चित रूप से एक आकर्षक विचार है। समय के लिए, मैं प्रभावी गद्य के सुझाव और @ ivanm के सुझाव के साथ विकल्प 4 का मिश्रण करने जा रहा हूं। – acfoltzer

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