2010-06-21 10 views
22

मैंने लोगों को * .cfg (पायथन बिल्डआउट), * .xml (जीनोम), * .json (क्रोम एक्सटेंशन), ​​* .yaml (Google App Engine), * .ini और यहां तक ​​कि * ऐप के लिए ऐप का उपयोग करके देखा है। विन्यास फाइलें (Django की तरह)।विभिन्न विन्यास प्रारूपों के लिए पेशेवरों और विपक्ष?

मेरा प्रश्न है: इतने सारे कॉन्फ़िगरेशन फ़ाइल स्वरूप क्यों हैं? मैं एक एक्सएमएल बनाम जेसन दृष्टिकोण (बहुत कम वर्बोज़) या पायथन एक से लाभ प्राप्त कर सकता हूं (कभी-कभी आपके पास पाइथन ऐप होता है और कॉन्फ़िगरेशन फ़ाइल को पार्स करने के लिए केवल एक विशिष्ट मॉड्यूल का उपयोग नहीं करना चाहता), लेकिन दूसरे के बारे में क्या दृष्टिकोण?

मुझे पता है कि उन कॉन्फ़िगरेशन फ़ाइलों की तुलना में और भी प्रारूप हैं जिन्हें मैंने उदाहरण दिया है। एक-दूसरे की तुलना में वास्तव में उनके फायदे क्या हैं? ऐतिहासिक कारण? विभिन्न प्रणालियों के साथ संगतता?

यदि आप किसी प्रकार की कॉन्फ़िगरेशन फ़ाइलों (प्लगइन पारिस्थितिकी तंत्र के साथ) पढ़ने के लिए एक एप्लिकेशन शुरू करेंगे, तो आप किस का उपयोग करेंगे?

जो मैंने उदाहरण के रूप में दिया है वे सबसे पुराने हैं? क्या आप इसका इतिहास जानते हैं?

उत्तर

12

यह ज्यादातर व्यक्तिगत वरीयता, उद्देश्य, और उपलब्ध पुस्तकालयों है। व्यक्तिगत रूप से मुझे लगता है कि एक्सएमएल कॉन्फ़िगरेशन फ़ाइलों के लिए भी वर्बोज़ है, लेकिन यह लोकप्रिय है और इसमें महान पुस्तकालय हैं।

.cfg, .ini विरासत प्रारूप हैं जो अच्छी तरह से काम करते हैं और कई भाषाओं में एक पुस्तकालय शामिल है जो उन्हें पढ़ता है। मैंने जावा, पायथन, सी ++ में मुद्दों के बिना इसका इस्तेमाल किया है। यह वास्तव में डेटा इंटरचेंज प्रारूप के रूप में काम नहीं करता है और यदि मैं डेटा पास कर रहा हूं तो मैं शायद कॉन्फ़िगरेशन और डेटा इंटरचेंज के लिए उसी प्रारूप का उपयोग करूंगा।

यामल, और जेसन एक्सएमएल और सीएफजी/आईएनआई के बीच हैं। आप दोनों में कई डेटा संरचनाओं को परिभाषित कर सकते हैं, या यह सीएफजी के साथ एक साधारण कुंजी-मूल्य हो सकता है। इन दोनों प्रारूपों में अजगर में महान पुस्तकालय हैं और मुझे लगता है कि कई अन्य भाषाओं में लाइब्रेरी भी हैं। मेरा मानना ​​है कि जेसन यम का सबसेट है।

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

पिछली बार जब मैं एक प्रारूप चुन रहा था जिसे मैंने yaml चुना था। यह आसान है लेकिन इसमें कुछ अच्छी विशेषताएं हैं, और पाइथन पुस्तकालय स्थापित करना आसान था और वास्तव में अच्छा था। जेसन एक करीबी दूसरे थे और जब से याम लाइब्रेरी ने जेसन को पार्स किया था, तब मैंने इस पर यमल चुना था।

+0

यह आपकी अनुभवों को जानने के लिए प्रेरित है। धन्यवाद! –

+3

JSON वास्तव में एक वस्तु है, इसे कॉन्फ़िगरेशन फ़ाइल के रूप में उपयोग करने में बहुत गलत लगता है। और इसमें टिप्पणियों का उपयोग करने की क्षमता कम है, ठीक है, ठीक है। आप हमेशा एक कुंजी बना सकते हैं: इसके लिए मूल्य। – Anders

5

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

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

+0

आईएनआई "पार्सर सही पाइथन में बनाया गया" क्या है? –

+1

@mattwilkie यह 'configparser' है, दस्तावेज़ के लिए: https://docs.python.org/3/library/configparser.html –

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