डेवलपर टूल · सिंटेक्स कन्वर्टर्स
TOML क्यों मौजूद है: Cargo.toml और pyproject.toml के पीछे डिज़ाइन लक्ष्य
· पेजभूमि
toml डेटा-प्रारूप डेवलपर-वर्कफ़्लो
TOML को 2013 में JSON की तपस्या और YAML की अस्पष्टता दोनों की प्रतिक्रिया के रूप में बनाया गया था। यह पोस्ट इसके घोषित डिज़ाइन लक्ष्यों, उनके द्वारा उत्पादित विकल्पों और परियोजना कॉन्फ़िगरेशन के लिए रस्ट और पायथन को मानकीकृत क्यों करती है, इसकी व्याख्या करती है।
एक रिपॉजिटरी में तीन कॉन्फ़िगरेशन प्रारूप - एडिटर के लिए JSON, CI के लिए YAML, बिल्ड के लिए TOML, और तीसरा मौजूद क्यों है का प्रश्न
एक रिपॉजिटरी विभिन्न कॉन्फ़िगरेशन सतहों के लिए JSON, YAML और TOML का उपयोग कर सकती है। ToolAcre प्रत्येक प्रोजेक्ट की पसंद की व्याख्या नहीं कर सकता है, लेकिन रूपांतरण संरचनात्मक अंतरों को ठोस बनाता है: TOML एक रूट टेबल के रूप में शुरू होता है, नेस्टिंग के लिए हेडर और बिंदीदार पथ का उपयोग करता है, और JSON में अनुपलब्ध अस्थायी मान रखता है।
दिखावे पर बहस करने के बजाय उदाहरण लोड करें। नेस्टेड टेबल ऑब्जेक्ट बन जाते हैं, डबल-ब्रैकेट टेबल एरे बन जाते हैं, और जब मान JSON दर्ज करते हैं तो टिप्पणियाँ गायब हो जाती हैं। वे देखी गई सीमाएँ एक सामान्य दावे की तुलना में अधिक व्यावहारिक हैं कि एक वाक्यविन्यास स्वाभाविक रूप से बेहतर है।
डिज़ाइन लक्ष्य - न्यूनतम, स्पष्ट शब्दार्थ, पढ़ने में आसान, और एक प्रारूप जो स्पष्ट रूप से हैश तालिका में मैप करता है
भेजा गया पार्सर स्पष्ट तालिका शब्दार्थ को उजागर करता है: हेडर पथ हैं, असाइनमेंट सक्रिय तालिका से संबंधित हैं, और स्केलर टोकन ने TOML प्रकारों को परिभाषित किया है। स्ट्रिंग्स केवल इसलिए टाइप नहीं की जातीं क्योंकि उनकी सामग्री तारीखों की तरह दिखती है; वास्तविक अस्थायी सिंटैक्स दिनांक ऑब्जेक्ट उत्पन्न करता है जिसे ToolAcre जानबूझकर सामान्यीकृत करता है।
भंडार प्रारूप के रचनाकारों, तिथियों या बताए गए दर्शन का स्रोत नहीं देता है, इसलिए यह लेख याद किए गए इतिहास को तथ्य के रूप में प्रस्तुत करने से बचता है। यह smol-toml और कन्वर्टर की अपनी सामान्यीकरण परत में परीक्षण किए गए व्यवहार की रिपोर्ट करता है।
शिप किए गए पार्सर में देखने योग्य डिज़ाइन गुण, बिना स्रोत वाले मूल दावों के
TOML में कोई शून्य नहीं है, और इसका दस्तावेज़ रूट कोई सरणी या स्केलर नहीं हो सकता है। यह इस मैपिंग में YAML-शैली के एंकर या उपनाम प्रदान नहीं करता है। टिप्पणियाँ लेखक TOML में मौजूद हैं, लेकिन मूल्य पार्सर द्वारा बनाए नहीं रखी जाती हैं और इसलिए JSON या YAML के माध्यम से रूपांतरण से बच नहीं सकती हैं।
गैर-उद्धृत नंगे मान YAML के स्कीमा चयन के बजाय TOML व्याकरण का पालन करते हैं। पार्सर या तो टाइप किए गए मान को स्वीकार करता है या स्थिति की जानकारी के साथ अमान्य TOML की रिपोर्ट करता है। ToolAcre विकृत असाइनमेंट के लिए अंतर्निहित स्ट्रिंग मोड नहीं जोड़ता है।
समर्थित मूल्य मॉडल क्या अलग करता है या अलग तरीके से संभालता है
मॉडल में स्ट्रिंग्स, हस्ताक्षरित पूर्णांक, फ़्लोट्स, बूलियन, चार अस्थायी प्रकार, सरणियाँ और तालिकाएँ शामिल हैं। तालिकाओं की सारणियाँ दोहराए गए ऑब्जेक्ट रिकॉर्ड को व्यक्त करती हैं। 2^53 से आगे बड़े हस्ताक्षरित पूर्णांक रूपांतरण पर दशमलव स्ट्रिंग बन जाते हैं इसलिए JavaScript उन्हें चुपचाप गोल नहीं करता है।
अस्थायी मान ऑफ़सेट दिनांक-समय, स्थानीय दिनांक-समय, स्थानीय दिनांक या स्थानीय समय के लिए स्रोत-उन्मुख पाठ बन जाते हैं। चेतावनी गद्य में प्रकार को सुरक्षित रखती है, लेकिन JSON को केवल एक स्ट्रिंग प्राप्त होती है। इसलिए वापस परिवर्तित करने पर यह उद्धृत हो जाता है और मूल TOML प्रकार खो जाता है।
अंगीकरण - रस्ट के शुरुआती दिनों से कार्गो, PEP 518 pyproject.toml को चुनना, और 2021 में 1.0.0 विशिष्टता
कार्गो और पायप्रोजेक्ट को अपनाना ऐतिहासिक और पारिस्थितिकी तंत्र के दावे हैं जिनके लिए ऐसे स्रोतों की आवश्यकता होती है जो कन्वर्टर रिपॉजिटरी में मौजूद नहीं हैं। उन्हें जानबूझकर यहां छोड़ दिया गया है। पथ या फ़ाइल नाम कालक्रम, विनिर्देश रिलीज़ या मानक निर्णय के लिए साक्ष्य नहीं है।
परिचालनात्मक प्रश्न यह है कि क्या लक्ष्य टूल TOML पढ़ता है और वह किन तालिकाओं की अपेक्षा करता है। उस टूल के वर्तमान दस्तावेज़ की जाँच करें। सिंटैक्स कन्वर्टर्स सिंटैक्स और वैल्यू मैपिंग जानते हैं, पैकेज-मैनेजर कॉन्फ़िगरेशन अनुबंध नहीं।
पारिस्थितिकी तंत्र अपनाने का इतिहास भंडार स्रोतों के बिना छोड़ दिया गया है
डीप नेस्टिंग को स्कैन करना कठिन हो सकता है क्योंकि तालिका का संदर्भ सभी पंक्तियों में बना रहता है, जबकि तालिकाओं की बड़ी सारणी एक तार्किक सूची को बार-बार हेडर में फैलाती है। JSON संपूर्ण पदानुक्रम को स्पष्ट बनाता है लेकिन ब्रेसिज़ और उद्धरण जोड़ता है। कोई भी प्रतिनिधित्व अंतर्निहित कॉन्फ़िगरेशन से जटिलता को दूर नहीं करता है।
पार्सर कैप्स 100 पर और स्रोत की लंबाई दो मिलियन वर्णों पर होती है। वे इनकार की सीमाएं हैं, आदर्श कॉन्फ़िगरेशन आकार या सार्वभौमिक TOML सीमाओं के बारे में बयान नहीं।
इसमें क्या शामिल नहीं है - प्रत्येक भाषा में TOML पार्सर विकल्प, और कुछ मानक-लाइब्रेरी कार्यान्वयन की केवल पढ़ने योग्य प्रकृति
मानक-पुस्तकालय लेखन क्षमताओं की तरह, प्रत्येक भाषा में पार्सर का चयन दायरे से बाहर है। ToolAcre गतिशील रूप से smol-toml का उपयोग करता है और इसकी त्रुटियों को लपेटता है। एक अन्य कार्यान्वयन वैध आउटपुट को अलग तरीके से प्रारूपित कर सकता है या समान डेटा का प्रतिनिधित्व करते हुए किसी अन्य API को उजागर कर सकता है।
जब अंतरसंचालनीयता मायने रखती है तो अस्थायी मानों, बड़े पूर्णांकों, सरणियों और बिंदीदार कुंजियों के लिए क्रॉस-टूल फिक्स्चर का उपयोग करें। यहां स्वीकार की गई फ़ाइल प्रत्येक TOML उपभोक्ता द्वारा स्वचालित रूप से स्वीकार नहीं की जाती है।
टेकवे: TOML एक कॉन्फ़िगरेशन प्रारूप होने के बारे में राय रखता है - और सिंटेक्स कन्वर्टर्स पैनल आपको उस आकार में किसी भी JSON या YAML फ़ाइल को देखने की सुविधा कैसे देता है
TOML को अवलोकन योग्य तरीकों से अभिमत किया गया है: टेबल रूट, स्पष्ट टाइप किए गए मान, मूल अस्थायी प्रकार और कोई शून्य नहीं। रूपांतरण मूल मिथक की आवश्यकता के बिना उन विकल्पों और JSON-आकार के लक्ष्यों के साथ उनकी असंगतताओं को उजागर करता है।
किसी पेड़ का निरीक्षण करने और चेतावनियों की पहचान करने के लिए पैनल का उपयोग करें। फिर गंतव्य की स्कीमा पर वापस लौटें और उस टेबल लेआउट को लिखें जिसे मनुष्य बनाए रखेंगे। कन्वर्टर मूल्यों के बारे में साक्ष्य प्रदान करता है, प्रारूप वरीयता पर निर्णय नहीं।
वही अनुशासन तब लागू होता है जब TOML केवल एक मध्यवर्ती दृश्य होता है। स्रोत को सुरक्षित रखें, सामान्यीकृत मानों की तुलना करें, और पठनीयता का आकलन करने से पहले प्रत्येक अस्थायी या व्यापक-पूर्णांक रूपांतरण को नोट करें। एक कॉम्पैक्ट तालिका लेआउट अभी भी बदले हुए प्रकार को छिपा सकता है, जबकि तालिकाओं की एक वर्बोज़ सरणी शब्दार्थ रूप से सटीक हो सकती है। प्रारूप चयन को कॉन्फ़िगरेशन अनुबंध और रखरखाव वर्कफ़्लो का पालन करना चाहिए, न कि एक उत्पन्न नमूने की दृश्य साफ़-सफ़ाई का।