हिन्दी

डेवलपर टूल · सिंटेक्स कन्वर्टर्स

नॉर्वे समस्या: YAML 1.1 बनाम 1.2 और क्यों NO गलत हो जाता है

· पेजभूमि

yaml डेटा-प्रारूप डिबगिंग

जब लीगेसी बूलियन पथ को पार कर लिया जाता है तो पाठ NO एक स्ट्रिंग बना रहता है
मूल ToolAcre वेक्टर चित्रण

YAML 1.1 में गैर-उद्धृत मान NO एक बूलियन है, इस तरह नॉर्वे देश की सूची से गायब हो जाता है। यह पोस्ट YAML की अंतर्निहित टाइपिंग का इतिहास बताती है, 1.2 विनिर्देश क्या बदल गया, और आज के टूलींग में समस्या क्यों बनी हुई है।

उन देशों की सूची जिनमें एक लापता है - NO को गलत के रूप में पार्स किया गया है, और ओस्लो कार्यालय से एक बग रिपोर्ट

क्लासिक बग एक गैर-उद्धृत देश कोड `NO` है जो गलत हो रहा है। ToolAcre के परीक्षण साबित करते हैं कि यहां ऐसा नहीं होता है: दोनों स्कीमा विकल्प `NO`, हां, नहीं, को स्ट्रिंग के रूप में चालू और बंद रखते हैं। इस पैनल के अंदर नॉर्वे के गायब होने से शुरू होने वाली कहानी कार्यान्वयन का खंडन करेगी।

यह उदाहरण संगतता चेतावनी के रूप में उपयोगी बना हुआ है। जब कोई अन्य YAML उपभोक्ता विरासत नियमों का उपयोग करता है, तो ToolAcre का लेखक अस्पष्ट स्ट्रिंग उद्धृत करता है ताकि डाउनस्ट्रीम पाठक उनकी पुनर्व्याख्या न करें। पाठक और लेखक रूपरेखा में वर्णित विफलता को रोकने के लिए तैयार हैं।

नॉर्वे इस कन्वर्टर में गायब नहीं होता है: NO पाठ रहता है

यह भंडार js-yaml के प्रतिबंधित JSON और कोर स्कीमा और उनके देखे गए स्केलर व्यवहार का दस्तावेजीकरण करता है। इसमें YAML की 2001 उत्पत्ति, लेखकों के इरादे या ऐतिहासिक डिज़ाइन बहस के स्रोत शामिल नहीं हैं। उन दावों को स्मृति से पुनर्निर्मित करने के बजाय छोड़ दिया गया है।

व्यावहारिक मार्गदर्शन के लिए वर्तमान तंत्र पर्याप्त है। सादा अदिश रिज़ॉल्यूशन एक चयनित स्कीमा के अंतर्गत होता है; उद्धृत मान पाठ बने रहते हैं; असमर्थित टैग अस्वीकार कर दिए जाते हैं. कोड के बारे में साक्ष्य को बिना स्रोत वाले मानक इतिहास में शामिल नहीं किया जाना चाहिए।

रिपॉजिटरी साक्ष्य वर्तमान पार्सर कॉन्फ़िगरेशन को कवर करता है, न कि YAML के मूल इतिहास को

YAML 1.1 आमतौर पर हां, नहीं, चालू और बंद वेरिएंट को बूलियन के रूप में माना जाता है। यह बताता है कि नॉर्वे की समस्या कुछ पारिस्थितिक तंत्रों में क्यों मौजूद है। ToolAcre कोई 1.1 स्विच नहीं दिखाता है और ऐसे मोड के तहत कभी भी सेक्सजेसिमल या लीगेसी ऑक्टल रूपांतरण प्रदर्शित नहीं करता है।

बाहरी पार्सर आउटपुट की समीक्षा करने के लिए खतरे का उपयोग करें, न कि इस पैनल की भविष्यवाणी करने के लिए। यदि कोई अन्य टूल गलत उत्पन्न करता है, तो उसकी लाइब्रेरी और स्कीमा रिकॉर्ड करें। ToolAcre का परिणाम एक विपरीत YAML 1.2 रीडिंग के रूप में काम कर सकता है, लेकिन इस बात के प्रमाण के रूप में नहीं कि अन्य कार्यान्वयन इसके अनुबंध के लिए गलत तरीके से कॉन्फ़िगर किया गया है।

विरासत YAML 1.1 बूलियन खतरे की व्याख्या करते हैं लेकिन यहां सक्षम नहीं हैं

सख्त JSON स्कीमा केवल JSON-संगत स्केलर वर्तनी को पहचानती है। कोर अतिरिक्त रूप से टिल्ड और खाली मानों को शून्य, हेक्साडेसिमल या `0o` पूर्णांक और गैर-परिमित संख्याओं में हल करता है। इनमें से कोई भी बूलियन शब्दावली को सत्य और असत्य से परे विस्तारित नहीं करता है।

कोर इन्फिनिटी और NaN बाद में चेतावनियों के साथ JSON में शून्य हो जाते हैं क्योंकि JSON में उनके लिए कोई प्रतिनिधित्व नहीं है। इसलिए स्कीमा विकल्पों के बीच अंतर दिखाई देता है और कभी-कभी हानिपूर्ण भी होता है, भले ही नॉर्वे का मूल्य स्थिर रहता है।

भेजे गए दोनों विकल्प YAML 1.2 स्कीमा हैं

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

ToolAcre का YAML लेखक स्ट्रिंग्स के चारों ओर सुरक्षात्मक उद्धरण जोड़ता है जिसे पुराने पाठक अलग तरह से टाइप कर सकते हैं, जिसमें `NO`, `yes`, `1.0`, `0755` और दिनांक-दिखने वाला पाठ शामिल है। यह अनुकूलता आउटपुट आधुनिक पार्सर अपनाने के बारे में एक व्यापक बयान की तुलना में मापने योग्य और सुरक्षित है।

खतरा अन्य पार्सर्स में बना रहता है; इस टूल से सामान्यीकरण करने के बजाय उन्हें सत्यापित करें

`countries: [SE, NO, DK]`, `answers: [yes, no, on, off]`, `mode: 0755`, `octal: 0o755`, `version: 1.10` और `empty:` को रूपांतरित करें। सख्त के तहत, JSON-मूल मान को छोड़कर सभी स्ट्रिंग बने रहते हैं। कोर के अंतर्गत, ऑक्टल 493 हो जाता है और खाली शून्य हो जाता है; देश और उत्तर शब्द तार बने रहते हैं।

पाठ को बाध्य करने के लिए प्रत्येक टोकन को उद्धृत करें। फिर JSON परिणाम को YAML पर वापस लिखें और सीरियलाइज़र द्वारा चुने गए उद्धरणों का निरीक्षण करें। यह कोड-सटीक तुलना YAML 1.1 मोड को निष्पादित करने का दिखावा किए बिना टूल के नियमों को प्रकट करती है जो मौजूद नहीं है।

कार्यान्वित उदाहरण: दो भेजे गए स्कीमाओं के अंतर्गत देश कोड और अदिश समानार्थी

भाषा-विशिष्ट पार्सर स्विच, संस्करण डिफ़ॉल्ट और फ़्रेमवर्क रैपर इस कार्यान्वयन के बाहर हैं। उनके नाम और व्यवहार स्वतंत्र रूप से बदलते रहते हैं। उस घटक से परामर्श करें और परीक्षण करें जो कॉन्फ़िगरेशन का उपभोग करेगा।

पैनल एप्लिकेशन सिमेंटिक्स को भी मान्य नहीं करता है। किसी देश कोड के लिए `NO` को एक स्ट्रिंग के रूप में रखना आवश्यक है, लेकिन यह साबित नहीं कर सकता कि `NO` किसी विशिष्ट स्कीमा में एक अनुमत मान है।

टेकअवे: अपनी स्ट्रिंग्स को उद्धृत करें, अपने पार्सर के संस्करण को जानें - और ब्राउज़र में YAML को JSON में कैसे परिवर्तित करने से अंतर्निहित टाइपिंग दृश्यमान हो जाती है

उस पाठ को उद्धृत करें जिसे दोबारा टाइप किया जा सकता है, वास्तव में उपयोग में आने वाली स्कीमा को जानें और उपभोक्ता का परीक्षण करें। ToolAcre के दो YAML 1.2 विकल्प उनके सीमित अंतर को दृश्यमान बनाते हैं और जानबूझकर विरासत बूलियन जाल से बचते हैं।

सबक यह नहीं है कि हर पार्सर एक ही तरह से व्यवहार करता है। यह है कि अंतर्निहित टाइपिंग कॉन्फ़िगरेशन है, और एक कन्वर्टर को उस कॉन्फ़िगरेशन को बताना चाहिए। यहां सबूत कहते हैं कि नॉर्वे `"NO"` बना हुआ है।

जब कॉन्फ़िगरेशन सिस्टम को पार करता है, तो एक इंटरऑपरेबिलिटी फ़िक्स्चर जोड़ें जिसमें आपके डोमेन की अनुमति वाले प्रत्येक अस्पष्ट टोकन शामिल हों। प्रत्येक वास्तविक उपभोक्ता में इसे रूपांतरित करें या पार्स करें और टाइप किए गए मानों की तुलना करें, प्रस्तुत नहीं किए गए YAML। यह किसी देश सूची या अनुमति मोड के उत्पादन तक पहुंचने से पहले एक विरासत बूलियन तालिका, एक ऑक्टल नियम या एक खाली-मूल्य अंतर को पकड़ लेता है। ज्ञात स्ट्रिंग्स को उद्धृत करना सबसे सरल पोर्टेबल बचाव है क्योंकि यह पर्यावरण डिफ़ॉल्ट पर भरोसा करने के बजाय दस्तावेज़ में इरादे को रिकॉर्ड करता है।