YAML के पक्ष में
(opensource.posit.co)- YAML 1.2 मनुष्यों द्वारा सीधे लिखी जाने वाली nested configuration files के लिए indentation-आधारित serialization format है, और पुराने PyYAML अनुभवों से पैदा हुई अस्थिरता संबंधी आलोचनाओं से इसे अलग करके देखना ज़रूरी है
- configuration file formats समय के साथ INI की सपाटता, XML की लंबाई-चौड़ाई, और JSON में comments व multi-line strings की कमी जैसी पुरानी पीढ़ी की सीमाओं को सुधारते हुए विकसित हुए हैं
- TOML
pyproject.tomlऔरCargo.tomlजैसे उथले ढाँचों में स्पष्ट है, लेकिन गहरे nested structures में path repetition और array tables के कारण पढ़ना व संपादित करना अधिक बोझिल हो जाता है - YAML 1.2 Core Schema
yes,no,on,off,y,nको strings की तरह मानता है और sexagesimal numbers व core type के रूप में timestamps को हटाकर पुराने implicit type inference की समस्याएँ कम करता है - py-yaml12 Python के लिए YAML 1.2 parser और formatter है, जो Rust implementation के जरिए सुरक्षित defaults,
yaml-test-suiteके साथ 100% compliance, और PyYAML C extension के मुकाबले की performance देता है
समस्या की पृष्ठभूमि
- पिछले कुछ वर्षों में configuration file formats को लेकर माहौल इस तरफ गया है कि YAML बुरा है और TOML अच्छा, लेकिन YAML का मूल्यांकन इतिहास, spec में हुए बदलाव, और 2026 के tooling state को साथ देखकर ही किया जाना चाहिए
- YAML की आलोचना लंबे समय तक वाजिब रही है और सावधान users ने भी अप्रत्याशित behavior झेला है, लेकिन spec बदल चुकी है और tooling ecosystem भी धीरे-धीरे उसके साथ आ रहा है
- आज की YAML आलोचना को समझने के लिए configuration file formats की वंशावली को साथ देखना ज़रूरी है, क्योंकि यह बहस बार-बार दोहराई गई है कि अगला format पिछले format की अति को कैसे सुधारता है
configuration file formats का संक्षिप्त इतिहास
- INI files 1980 के शुरुआती दशक में MS-DOS और शुरुआती Windows के साथ आईं, और key-value pairs, square-bracket sections, तथा semicolon comments वाले सपाट, पढ़ने में आसान, human-editable format थीं
- INI उस समय device driver configuration, font paths, और application settings जैसी ज़रूरतों के लिए पर्याप्त था, लेकिन इसमें एक स्तर से अधिक nesting नहीं हो सकती थी और कोई औपचारिक spec न होने के कारण अलग-अलग parsers अपनी-अपनी dialects लागू करते थे
- XML 1990 के दशक के अंत में enterprise software दुनिया में व्यापक रूप से अपनाया गया, और arbitrary hierarchy, schema, namespaces, transformations, तथा self-describing structure देता था, लेकिन वास्तविक configuration files बेहद verbose हो जाती थीं और हाथ से maintain करना मुश्किल था
- JSON XML के हल्के विकल्प के रूप में आया और JavaScript object literal की सादगी के आधार पर 2000 के दशक के अंत और 2010 के दशक की शुरुआत में web APIs में XML की जगह लेने लगा, लेकिन configuration files के लिए इसमें comments की कमी, multi-line strings का अभाव, और trailing commas पर रोक जैसी सीमाएँ थीं
- YAML 2001 में और TOML 2013 में JSON द्वारा छोड़ी गई जगह भरने के लिए आए; YAML ने indentation-आधारित syntax के साथ arbitrary nesting, multi-document support, references, और custom types दिए, जबकि TOML ने explicit types और औपचारिक spec के साथ “standardized INI” बनने की दिशा ली
- हर पीढ़ी का नया format पिछले format की अतियों के जवाब में पैदा हुआ, और आज YAML से जुड़ी बहुत-सी समस्याएँ format design से ज़्यादा किसी खास spec version और उस version से बंधे parsers का परिणाम हैं
YAML के खिलाफ रहे तर्क
- YAML की आलोचना बनावटी नहीं थी, बल्कि कई वर्षों तक programmers के वास्तविक अनुभवों पर आधारित थी
- सबसे मशहूर Norway problem में YAML 1.1 unquoted scalar
NOको booleanfalseकी तरह पढ़ता था, जिससे country code list मेंnofalse value में बदल जाता थाcountries: - dk - fi - is - no - se["dk", "fi", "is", false, "se"] - यही नियम
yes,on,off,y,nऔर कई uppercase-lowercase variants पर भी लागू होता था;22:22जैसे port mappings sexagesimal integer बन जाते थे,10.23जैसे version numbers strings के बजाय floating-point माने जाते थे, और date जैसे दिखने वाले values timestamps की तरह parse हो जाते थे - data science और machine learning code में स्वाभाविक variable names जैसे
nऔरyभी YAML 1.1 के implicit boolean rules के तहत string keys नहीं बल्किFalseऔरTruekeys की तरह interpret हो सकते थे{"variables": {"x": "features", False: "sample_size", True: "target"}} - YAML 1.1 का आक्रामक implicit type inference unquoted
trueको boolean की तरह पढ़ने जैसी readability देने के लिए था, लेकिन वास्तविक configuration files में इसने unpredictability बढ़ा दी - configuration files अक्सर बार-बार edit नहीं की जातीं और कई बार मूल लेखक के अलावा कोई और उन्हें बदलता है, इसलिए चुपचाप हुई गलत parsing महीनों तक पूरे system में फैल सकती है; यह ऐसा क्षेत्र है जहाँ अप्रत्याशित behavior सबसे कम स्वीकार्य होता है
- पूरे YAML spec की complexity भी एक बोझ थी, और YAML 1.2.2 spec 10 chapters तथा चार-स्तरीय numbering वाली sections के साथ एक बड़ा दस्तावेज़ है
- multi-line strings लिखने के कई तरीके हैं, और anchors व aliases शक्तिशाली reference system बनाते हैं, लेकिन ज़्यादातर configuration कामों के लिए यह ज़रूरत से अधिक conceptual weight जोड़ते हैं
- tag-based object deserialization की security समस्याएँ, खासकर Python की
yaml.load()vulnerability, एक जाने-पहचाने attack vector बन गईं; इसलिए यह आलोचना YAML 1.1 और उसके आसपास के tooling ecosystem के लिए सही थी
TOML क्या अच्छा करता है
- TOML सपाट या उथले configuration structures में साफ, पढ़ने में आसान और unambiguous format है
- TOML syntax उन लोगों को परिचित लगती है जिन्होंने INI files देखी हैं, लेकिन इसमें explicit types, औपचारिक spec, और dot-separated keys के ज़रिए nested tables का support भी जुड़ता है
pyproject.tomlऔरCargo.tomlमें आमतौर पर एक या दो स्तर गहरे, अच्छी तरह परिभाषित sections और predictable contents होते हैं, इसलिए वे TOML के लिए उपयुक्त उदाहरण हैं- TOML में strings हमेशा quotes में रहती हैं, इसलिए
noboolean है या शब्द, यह अस्पष्ट नहीं रहता; integers, floating-point values, और dates first-class types हैं, और comments भी अपेक्षित तरीके से काम करते हैं - Python packaging ecosystem में PEP 518 को अपनाना और Rust community में Cargo का उपयोग इस बात का प्रमाण है कि ऐसी problem scope के लिए TOML उपयुक्त विकल्प है
- TOML spec इतनी छोटी है कि कोई सक्षम programmer सप्ताहांत में compatible parser लिख सकता है; इसका नतीजा यह है कि parser ecosystem बड़ा, अच्छी तरह tested, और अपेक्षाकृत consistent है
- TOML में YAML 1.1 और 1.2 जैसी version split समस्या नहीं है; TOML 1.0 हर जगह TOML 1.0 ही है
जहाँ TOML भारी पड़ने लगता है
- जब configuration file को गहराई व्यक्त करनी होती है, तब TOML की nested structure dot-separated section headers (
[servers.alpha]) या arrays of tables ([[products]]) पर निर्भर करती है, और nesting बढ़ने के साथ इसे पढ़ना कठिन होता जाता है - PyTOML के Martin Vejnár ने अपनी library को
pipdependency बनने देने से इनकार करते हुए यह अनुभव बताया कि configuration schema जटिल होने पर TOML syntax बदसूरत और पढ़ने में कठिन लगने लगती है - YAML में indentation hierarchy को एक नज़र में दिखा देती है, जबकि TOML में हर section header में पूरा path बार-बार लिखना पड़ता है
services: web: image: nginx:latest environment: DB_HOST: postgres DB_PORT: 5432 resources: limits: memory: 512M cpu: "0.5"[services.web] image = "nginx:latest" [services.web.environment] DB_HOST = "postgres" DB_PORT = 5432 [services.web.resources.limits] memory = "512M" cpu = "0.5" - TOML reader को सपाट qualified names की श्रृंखला से tree structure को दिमाग में फिर से बनाना पड़ता है, और StrictYAML documentation के माप के अनुसार वही data व्यक्त करने पर TOML file path prefixes की पुनरावृत्ति के कारण लगभग 50% अधिक characters इस्तेमाल करती है
- Python ने बहुत पहले दिखा दिया था कि indentation को structure की तरह इस्तेमाल करना कमजोरी नहीं बल्कि ताकत है, क्योंकि इससे visual structure और syntax structure के बीच mismatch से पैदा होने वाले bugs खत्म होते हैं
- YAML इसी indentation-आधारित structure के फायदे को अपनाता है, लेकिन TOML indentation नहीं मांगता, इसलिए key और उसके भीतर की table का संबंध file की physical layout में नहीं बल्कि सिर्फ section headers में मौजूद होता है
- गहराई से nested configuration files में TOML को scan करना कठिन और आत्मविश्वास के साथ edit करना मुश्किल हो जाता है
YAML 1.2 में क्या बदला
- YAML 1.2 spec 2009 में प्रकाशित हुई थी, और इसका clarification revision 1.2.2 अक्टूबर 2021 में पूरा हुआ
- YAML 1.2 Core Schema में केवल
true,falseऔरTrue,False,TRUE,FALSEको boolean माना जाता है;yes,no,on,off,y,nसामान्य strings हैं 22:22समस्या पैदा करने वाले sexagesimal numeric literals पूरी तरह हटा दिए गए, और timestamps अब core type नहीं हैं; इसलिए Core Schema में unquoted2026-05-05auto-detected date नहीं बल्कि string है- JSON अब YAML 1.2 का एक strict और valid subset है, इसलिए हर valid JSON document उसी तरह YAML के रूप में भी parse होता है
- tag resolution rules अधिक सख्त और स्पष्ट हो गए हैं, और spec खुद भी अब ज़्यादा स्पष्ट रूप से लिखी गई है तथा GitHub पर खुले तौर पर maintain होती है
- लोग जिस YAML की आलोचना करते रहे हैं वह YAML 1.1 है; आज का प्रमुख spec अधिक सुरक्षित और predictable YAML 1.2 है
- समस्या यह है कि users का YAML अनुभव spec से नहीं बल्कि parser के ज़रिए आता है, और अधिकतर Python users के लिए वह parser PyYAML है, जो YAML 1.1 लागू करता है और 2006 के बाद से अपने core semantics में बदलाव नहीं लाया है
Python YAML parsers का परिदृश्य
- PyYAML Python की de facto standard YAML library है, जो performance के लिए C library LibYAML को wrap करती है और pure Python fallback path भी देती है
- PyYAML हर हफ्ते लाखों बार डाउनलोड होती है और अनगिनत packages की dependency है, लेकिन यह YAML 1.1 लागू करती है; इसी वजह से Python ecosystem में “YAML ने country code को boolean की तरह parse कर दिया” वाला अनुभव पैदा हुआ
- PyYAML repository में 200 से अधिक खुले issues और 100 से अधिक खुले pull requests हैं; project maintained तो है, लेकिन धीरे चलता है, और YAML 1.2 semantics की ओर major-version transition अभी तक नहीं हुआ है
- ruamel.yaml YAML 1.2 support के साथ comments, flow style, और key order को preserve करने वाली round-trip editing देता है, इसलिए comment preservation या formatting-aware editing के लिए यह PyYAML से कहीं अधिक शक्तिशाली विकल्प है
- ruamel.yaml अपने default round-trip mode में मुख्यतः pure Python implementation है, इसलिए यह PyYAML के C-based fast path से काफी धीमा है, और namespace package समस्याओं तथा dependency chain के कारण इसकी packaging history ने deployment pipelines को उलझाया भी है
- StrictYAML YAML का एक जानबूझकर सीमित subset लागू करता है, जो सभी implicit type inference, tags, anchors, और flow style को हटा देता है
- StrictYAML दार्शनिक रूप से पूरे YAML से अधिक TOML के करीब है; यह YAML की indentation syntax का उपयोग करने वाला सुरक्षित और सरल format है, लेकिन यह Python-only है, अन्य भाषाओं में इसका implementation नहीं है, और spec compliance इसका लक्ष्य भी नहीं है
- इस परिदृश्य में ऐसी library की कमी रही है जो तेज़ हो, पूरा YAML 1.2 compliance दे, और PyYAML के default interface की जगह आसानी से ले सके
py-yaml12 का परिचय
- py-yaml12 Python के लिए YAML 1.2 parser और formatter है, जिसे speed और accuracy के लिए Rust में implement किया गया है
- py-yaml12, Rust YAML library
saphyrcrate के ऊपर बना है, और loading के लिएparse_yaml(),read_yaml(), तथा serialization के लिएformat_yaml(),write_yaml()जैसा छोटा और focused API देता है -
सरलता
- ज़्यादातर use cases में यह शुरू से अंत तक
dict,list,int,float,str,Noneजैसे basic Python built-in types के साथ काम करने के लिए डिज़ाइन किया गया है - सामान्य path में कोई special document classes या custom node types नहीं हैं, और क्योंकि YAML 1.2 JSON का superset है, हर valid JSON समान रूप से parse हो जाता है
- py-yaml12 community-maintained edge cases और conformance tests के संग्रह
yaml-test-suiteपर 100% compliance हासिल करता है regionslist मेंno, PyYAML के YAML 1.1 behavior में चुपचापFalseबन जाता है, लेकिन py-yaml12 के YAML 1.2 behavior में spec के अनुसार string"no"ही रहता है- file API भी सीधी-सादी है; Python dictionary को disk पर लिखकर फिर वापस पढ़ें तो वही object lossless round trip के साथ मिलता है
- tagged values जैसे advanced YAML features के लिए यह
Yamlwrapper type देता है, लेकिन सामान्य configuration कार्यों में यह optional है
- ज़्यादातर use cases में यह शुरू से अंत तक
-
सुरक्षा
- py-yaml12 के defaults सिर्फ convenience नहीं बल्कि सुरक्षा भी बढ़ाते हैं; इसके विपरीत PyYAML tags को commands की तरह मानने की दिशा में गया, जिससे सिर्फ YAML file पढ़ने भर से arbitrary Python code execution का जोखिम पैदा हो सकता है
- यदि PyYAML के Python object-apply tag namespace को alias करने वाली YAML file को
yaml.load(f, Loader=yaml.Loader)से पढ़ा जाए, तो साधारण dictionary लौटाने से पहले Python code execute हो सकता है - उदाहरण में parsing result
{'debug': False, 'retries': 3}जैसा दिखाई देता है, लेकिन उससे पहले environment variableYAML_PAYLOAD_RANको'1'पर set किया जा चुका होता है; सिर्फ result देखकर execution का पता नहीं चलता - py-yaml12 ऐसे tags को execute नहीं करता जिन्हें स्पष्ट रूप से opt in न किया गया हो, बल्कि उन्हें data की तरह रखता है; unhandled tags value और tag दोनों को रखने वाले
Yamlwrapper के रूप में लौटते हैं
-
गति
- py-yaml12 benchmarks kilobytes से megabytes तक की file sizes पर read और write performance की तुलना PyYAML के default pure Python path, LibYAML-based
CSafeLoaderऔरCSafeDumper, तथा ruamel.yaml से करते हैं - क्योंकि core parsing और formatting logic interpreted Python के बजाय compiled Rust में implement है, py-yaml12 पूरा YAML 1.2 compliance बनाए रखते हुए PyYAML के C extension के मुकाबले की performance देता है
- अभी Python libraries में ऐसे विकल्प बहुत कम हैं जो पूर्ण YAML 1.2 compliance और PyYAML C extension स्तर की performance दोनों साथ दें
- py-yaml12 benchmarks kilobytes से megabytes तक की file sizes पर read और write performance की तुलना PyYAML के default pure Python path, LibYAML-based
निष्कर्ष
- आम YAML बनाम TOML बहस अब काफी हद तक ऐसे format के खिलाफ बहस जैसी है, जो अपनी समस्याग्रस्त पुरानी शक्ल में अब मौजूद ही नहीं है; आलोचना वास्तविक थी, लेकिन उसका स्वभाव ऐतिहासिक है
- YAML की आलोचना अक्सर spec-compliant YAML 1.2 नहीं बल्कि PyYAML के माध्यम से अनुभव की गई YAML 1.1 पर निशाना साधती है
- TOML उथली और सपाट configuration के लिए अब भी अच्छा विकल्प है, और
pyproject.tomlउस भूमिका में ठीक बैठता है; लेकिन यह दावा कि YAML मूलतः असुरक्षित या अप्रत्याशित है, compatible YAML 1.2 parser के सामने टिकता नहीं - असली प्रश्न यह नहीं कि अमूर्त रूप में कौन-सा format सर्वोत्तम है, बल्कि यह है कि कौन-सा format और कौन-से tools किसी खास काम के लिए उपयुक्त हैं
- जटिल, deeply nested, मानव-लिखित configuration files के लिए आधुनिक parser के साथ YAML 1.2 एक मजबूत जवाब है, और formats उसी तरह सुधरते हैं जैसे अगली पीढ़ी पिछली पीढ़ी की खुरदरी किनारों को ठीक करती है
- Python में
pip install py-yaml12चलाकर आधुनिक, spec-compliant YAML अनुभव देखा जा सकता है - R environment में r-yaml12 वही फायदे देता है: पूर्ण YAML 1.2 compliance, Rust-आधारित performance, और सुरक्षित defaults, ठीक Python package की तरह
1 टिप्पणियां
Lobste.rs प्रतिक्रियाएँ
यह कहना अजीब है कि YAML, JSON की कमियाँ भरने के लिए आया था। याददाश्त के हिसाब से YAML, Perl कम्युनिटी से निकला था, और संभव है कि वह JSON जितना पुराना या उससे भी पुराना हो।
असल इतिहास देखने पर YAML के संस्थापकों में से एक Ingy dot Net की दिलचस्प पोस्ट में इसकी शुरुआत नवंबर 1999 से जनवरी 2001 के बीच बताई गई है।
और JSON के इतिहास पर यह लेख देखें तो JSON जैसा प्रारंभिक रूप अप्रैल 2001 में hidden iframe और
<script>टैग के जरिए server से client तक message भेजने के तरीके में दिखता है, और Douglas Crockford ने json.org सार्वजनिक करने के बाद 2002 में जाकर यह एक स्वतंत्र format बना।इसलिए YAML, JSON से थोड़ा पहले आया था, या उदारता से देखें तो दोनों लगभग साथ-साथ विकसित हुए। यह कहना सही नहीं है कि YAML, JSON की प्रतिक्रिया में या उसकी कमियाँ भरने के लिए बना; YAML वास्तव में XML की प्रतिक्रिया था। JSON भी
<script>टैग में data सीधे डालने की व्यावहारिक ज़रूरत से शुरू हुआ था, लेकिन XML के मुकाबले एक सरल विकल्प के रूप में लोकप्रिय हुआ — यह मानने से इनकार करना मुश्किल है।खुद लेख में भी LLM द्वारा लिखा हुआ लगने वाला असर है, और जिस project का ज़िक्र है वह भी vibe-coded लगता है।
हर वाक्य अपने-आप में ठीक लगता है, लेकिन कुल मिलाकर बात उलझी हुई है। और TOML को यह कहकर बचाया जाता है कि वह spec वाला language है, जबकि YAML पर complex spec होने के लिए हमला किया जाता है — यह भी थोड़ा अजीब है। ऐसा लगने लगता है मानो YAML में पहले spec नहीं थी और TOML में थी।
JSON असल में ECMAScript-जैसा Data-E के ज्यादा करीब है। Data-E का archived page देखें तो पता चलता है कि वे भी XML की प्रतिक्रिया में काम कर रहे थे।
अगर inline tables का इस्तेमाल करें, तो “खराब” TOML उदाहरण कुछ ऐसा बनता है:
देखने में ठीक है, और अगर अक्षर गिनें तो YAML उदाहरण से भी छोटा लगता है।
अगर इस लेख का लक्ष्य YAML का बचाव करना है, तो शायद यह दायरे से बाहर हो, लेकिन अच्छा होता अगर TOML 1.1 और नए inline table features की भी बात की जाती। ये JSON की तीन नापसंद चीज़ें ठीक कर देते हैं: बिना quotes वाले key names, comment strings, और trailing commas का support।
Python 3.15, TOML 1.1 को support करता है, और TOML 1.1 का adoption YAML 1.2 की तुलना में कहीं बेहतर लगता है। TOML 1.0 parser को 1.1 पर update करना शायद लगभग मामूली काम होगा, लेकिन YAML 1.1 को 1.2 पर ले जाना वैसा नहीं लगता। yaml.org पर मुझे changes की सूची भी ठीक से नहीं मिली, बस दो बहुत बड़ी specs दिखीं।
“Norway Problem” जैसी चीज़ें YAML को नापसंद करने के कारणों में मेरे लिए बस छोटे footnote जैसी हैं; असली वजह यह है कि इसे edit करना झंझट वाला है, इसमें significant whitespace है, और कुल मिलाकर यह काफी complex है।
मेरे हिसाब से YAML, JSON, और TOML — तीनों की अपनी-अपनी जगह है। जो जगह मुझे लंबे समय तक खाली लगती थी, उसे https://kdl.dev/ ने भर दिया।
JSON = मनमाने तरीके से nested data interchange
YAML = multi-line strings रखने के लिए shallow container format
TOML = लगभग flat config files
KDL = Ruby-style DSL को data के रूप में व्यक्त करना
Norway problem जैसी चीज़ों की वजह से मुझे YAML पसंद नहीं है। YAML 1.2 ने इसे थोड़ा कम किया है, लेकिन बिना quotes वाली strings की वजह से
"","Null","true","FALSE"जैसी strings अभी भी समस्या बनती हैं, और YAML को समझने वाला encoder चाहिए। इसकी कुल मिलाकर complexity भी पसंद नहीं, लेकिन YAML से मेरी नफ़रत की असली वजह यह हैPEP-8 भी indentation में tabs न इस्तेमाल करने की मज़बूती से सिफारिश करता है।
“YAML बुरा नहीं है, YAML 1.1 बुरा था, और वैसे भी ज़्यादातर लोग 1.1 parser इस्तेमाल करते हैं” वाली दलील उतनी असरदार नहीं लगती जितना लेख चाहता है।
मैं सीमित और सावधानी से इस्तेमाल किया गया YAML पसंद करता हूँ, और YAML 1.2 के लिए नए high-performance parsers आना भी अच्छा है, लेकिन अगर “बुरा” version अब भी बहुमत में इस्तेमाल हो रहा है, तो मैं शायद कुछ और चुनूँगा। अगर मैं यह control नहीं कर सकता कि कौन-सा parser इस्तेमाल होगा, इसलिए यह भरोसा भी नहीं कर सकता कि मेरा YAML सही तरह interpret होगा, तो कुल मिलाकर YAML अब भी “बुरी” स्थिति में है।
सबको 1.2 पर जाना चाहिए, लेकिन तब तक YAML को सावधानी से लेना ठीक है
“YAML बनाम TOML बहस अक्सर ऐसे format पर हमला करने वाली बहस है जो अब समस्याग्रस्त रूप में लगभग मौजूद ही नहीं है, और शिकायतें असली हैं लेकिन ऐतिहासिक हैं” — यह पंक्ति GitHub Actions और Kubernetes के सामने चीख निकलवा देती है
बचाव की दलील मज़बूत है। फिर भी बहुत simple documents में TOML ज़्यादा readable है, और लोगों से YAML की बजाय TOML इस्तेमाल करवाना आसान है।
अफ़सोस की बात है कि tools को लेकर public developer perception बदलने में inertia बहुत लंबी चलती है। लोग कोई कहानी पढ़ते हैं, राय बना लेते हैं, और फिर ऐसे दूसरे tool पर चले जाते हैं जिसने सार्वजनिक रूप से ऐसी गलती नहीं की हो
काश Ruby interpreter में शामिल YAML parser YAML 1.2.2 को support करता।
लेकिन ecosystem तोड़े बिना नए version को default पर switch करने का तरीका मुझे समझ नहीं आता
अच्छा होता अगर config file formats में standardized schema specify करने की सुविधा होती। तब editors किसी भी random config file को देखकर typo वाले keys या type mismatch बता सकते।
hover hints में यह भी document किया जा सके कि कोई key किस काम की है, और valid keys की autocomplete भी आसानी से मिलनी चाहिए। अगर गलत values पकड़ने के लिए simple assertions या contracts का support भी हो, तो और अच्छा। उदाहरण के लिए
"color"key को/#[a-fA-F0-9]{6}/से match करना चाहिए।आदर्श रूप से इससे config file data structures भी auto-generate हो सकें
XSDयाRelax NGजैसी कई validation spec formats हैं, और मैं XML DTD से सबसे ज़्यादा परिचित हूँ, इसलिए बाकी के बारे में ज़्यादा नहीं कह सकता$schemaproperty रखना और सही schema define करने वाली JSON Schema file को refer करना काफ़ी आम है। मूल रूप से यह JSON के लिए XSD है। अच्छे editors आम तौर पर इसी आधार पर autocomplete और red underlines दे सकते हैं।अच्छी बात यह है कि TOML और YAML लगभग सिर्फ़ syntax में अलग JSON ही हैं, इसलिए अक्सर JSON Schema files को इनके साथ भी इस्तेमाल किया जा सकता है