YAML’ı Savunurken
(opensource.posit.co)- YAML 1.2, insanların doğrudan yazdığı iç içe yapılandırma dosyaları için girintiye dayalı bir serileştirme biçimidir; eski PyYAML deneyimlerinden kaynaklanan güvenilmezlik eleştirileriyle bunun ayrıştırılması gerekir
- Yapılandırma dosyası biçimleri, INI’nin düz yapısı, XML’in aşırı ayrıntılı oluşu, JSON’ın yorum ve çok satırlı string eksikliği gibi önceki kuşakların sınırlamalarını düzeltme yönünde evrilmiştir
- TOML,
pyproject.tomlveCargo.tomlgibi sığ yapılarda nettir; ancak derin iç içe yapılar söz konusu olduğunda yol tekrarları ve tablo dizileri nedeniyle okuma ve düzenleme yükü artar - YAML 1.2 Core Schema,
yes,no,on,off,y,ndeğerlerini string olarak işler; 60 tabanlı sayıları ve çekirdek tür olarak zaman damgalarını kaldırarak geçmişteki örtük tür çıkarımı sorunlarını azaltır - py-yaml12, Python için bir YAML 1.2 ayrıştırıcı ve biçimlendiricisidir; Rust uygulaması sayesinde güvenli varsayılanlar,
yaml-test-suiteile %100 uyumluluk ve PyYAML C eklentisiyle yarışabilecek performans sunar
Sorunun çerçevesi
- Son birkaç yılda yapılandırma dosyası biçimleri etrafındaki hava, YAML kötüdür ve TOML iyidir yönüne kaydı; ancak YAML değerlendirmesi tarihçeyi, belirtimdeki değişiklikleri ve 2026’daki araç durumunu birlikte görmeyi gerektiriyor
- YAML eleştirileri uzun süre boyunca haklıydı ve dikkatli kullanıcılar bile beklenmedik davranışlarla karşılaştı; fakat belirtim değişti ve araç ekosistemi de buna yetişiyor
- Günümüzdeki YAML eleştirilerini anlamak için yapılandırma dosyası biçimlerinin soy ağacına bakmak gerekir; önceki biçimlerin aşırılıklarının sonraki biçimlerce düzeltilmesi tartışması tekrar eden bir akıştır
Yapılandırma dosyası biçimlerinin kısa tarihi
- INI dosyaları 1980’lerin başında MS-DOS ve ilk Windows sürümleriyle ortaya çıktı; anahtar-değer çiftleri, köşeli parantezli bölümler ve noktalı virgül yorumları içeren, düz yapılı ve kolay okunur, insan tarafından düzenlenebilir bir biçimdi
- INI, aygıt sürücüsü yapılandırması, yazı tipi yolu tanımlama ve uygulama ayarları gibi dönemin ihtiyaçları için yeterliydi; ancak bir seviyeden fazla iç içe yapı kuramaması ve resmi bir belirtiminin olmaması nedeniyle ayrıştırıcıların farklı lehçeler uygulamasına yol açan yapısal sınırlamalara sahipti
- XML, 1990’ların sonlarında kurumsal yazılım dünyasında yaygın biçimde benimsendi; keyfi hiyerarşi, şema, ad alanları, dönüşümler ve kendini açıklayan yapı sundu, fakat gerçek yapılandırma dosyaları fazlasıyla ayrıntılı hale geldi ve elde bakımı zorlaştı
- JSON, XML’e daha hafif bir tepki olarak ortaya çıktı ve JavaScript nesne literallerinin sadeliği sayesinde 2000’lerin sonu ile 2010’ların başında web API’lerinde XML’in yerini aldı; ancak yapılandırma dosyası olarak kullanıldığında yorum yokluğu, çok satırlı string desteğinin olmaması ve sondaki virgüllerin yasaklanması gibi kısıtlar getirdi
- YAML 2001’de, TOML ise 2013’te JSON’ın bıraktığı boşluğu doldurmak için ortaya çıktı; YAML girinti tabanlı sözdizimiyle keyfi iç içelik, çoklu belge, referanslar ve kullanıcı tanımlı türler sunarken, TOML açık türler ve resmi bir belirtimle “standartlaştırılmış INI” olmayı hedefledi
- Her yeni kuşak biçim, önceki biçimin aşırılıklarından yola çıktı; bugün YAML ile ilgili sorunların önemli bir kısmı biçim tasarımının kendisinden ziyade belirli belirtim sürümlerinin ve onlara bağlı ayrıştırıcıların ürünü
YAML’a karşı öne sürülen sorunlar
- YAML eleştirileri uydurulmuş değildi; yıllar boyunca gerçek programcıların yaşadığı deneyimlere dayanıyordu
- En ünlü örnek olan Norway sorunu, YAML 1.1’de tırnaksız skaler
NOdeğerinin booleanfalseolarak yorumlanması ve ülke kodu listelerindekinodeğerinin false’a dönüşmesiydicountries: - dk - fi - is - no - se["dk", "fi", "is", false, "se"] - Aynı kural
yes,on,off,y,nve bunların farklı büyük-küçük harf varyasyonlarına da uygulanıyordu; ayrıca22:22gibi port eşlemeleri 60 tabanlı tamsayıya,10.23gibi sürüm numaraları string yerine kayan noktalı sayıya, tarih gibi görünen değerler ise zaman damgasına çevriliyordu - Veri bilimi ve makine öğrenimi kodlarında doğal değişken adları olan
nveyde, YAML 1.1’in örtük boolean kuralları altında string anahtarlar yerineFalseveTrueanahtarları olarak yorumlanabiliyordu{"variables": {"x": "features", False: "sample_size", True: "target"}} - YAML 1.1’in agresif örtük tür çıkarımı, tırnaksız
truedeğerini boolean olarak okuyarak okunabilirlik sağlamayı amaçlıyordu; fakat gerçek yapılandırma dosyalarında sonuç çoğu zaman öngörülemezlik oldu - Yapılandırma dosyaları sık düzenlenmez ve çoğu zaman ilk yazan kişi dışındaki insanlar tarafından değiştirilir; sessiz yanlış ayrıştırmalar aylar boyunca sisteme yayılabildiğinden, beklenmedik davranışların en az tolere edilebildiği alanlardan biridir
- Tüm YAML belirtiminin karmaşıklığı da ek bir yük oluşturuyordu; YAML 1.2.2 belirtimi, 10 bölüm ve dört seviyeli numaralı bölüm yapısı içeren oldukça kapsamlı bir dokümandır
- Çok satırlı string ifade etmenin birçok yolu vardır ve anchor ile alias güçlü bir referans sistemi kurar; ancak bunlar çoğu yapılandırma işi için gerekli olandan daha ağır kavramsal araçlardır
- Etiket tabanlı nesne ters serileştirmesinin güvenlik sorunları, özellikle Python’daki
yaml.load()açığı, iyi bilinen bir saldırı vektörü haline geldi; bu eleştiriler YAML 1.1 ve çevresindeki araç ekosistemi için geçerliydi
TOML’in iyi yaptığı şeyler
- TOML, düz ya da sığ yapılandırma yapılarında temiz, okunabilir ve belirsizlik içermeyen bir biçimdir
- TOML sözdizimi, INI dosyası görmüş herkes için tanıdıktır; bunun üzerine açık türler, resmi belirtim ve noktayla ayrılmış anahtarlar üzerinden iç içe tablolar desteği ekler
pyproject.tomlveCargo.toml, genellikle bir veya iki seviye derinlikte iyi tanımlanmış bölümler ve öngörülebilir içerik taşıdıkları için TOML’e çok uygundur- TOML’de string’ler her zaman tırnak içindedir; bu sayede
nodeğerinin boolean mı yoksa kelime mi olduğu belirsiz değildir, tamsayı, kayan noktalı sayı ve tarih birinci sınıf türlerdir, yorumlar da beklendiği gibi çalışır - Python paketleme ekosisteminde PEP 518’in benimsenmesi ve Rust topluluğunda Cargo kullanımı, bu problem alanında TOML’in uygun bir seçim olduğunu gösterir
- TOML belirtimi, yetkin bir programcının hafta sonunda uyumlu bir ayrıştırıcı yazabileceği kadar kısadır; bunun sonucu olarak ayrıştırıcı ekosistemi geniş, iyi test edilmiş ve tutarlıdır
- TOML’de, YAML 1.1 ile 1.2 arasındaki sürüm bölünmesine benzer bir sorun yoktur; TOML 1.0 her yerde TOML 1.0’dır
TOML’in zorlandığı noktalar
- Yapılandırma dosyası derinlik ifade etmek zorunda kaldığında, TOML’in iç içe yapısı noktayla ayrılmış bölüm başlıklarına (
[servers.alpha]) veya tablo dizilerine ([[products]]) dayanır; iç içelik arttıkça yapı daha zor okunur hale gelir - PyTOML’den Martin Vejnár, kendi kütüphanesinin
pipbağımlılığı olmasını reddederken, yapılandırma şeması karmaşıklaştıkça TOML sözdiziminin çirkinleştiği ve okunmasının zorlaştığı deneyimini gerekçe gösterdi - YAML’de girinti hiyerarşiyi tek bakışta gösterir; TOML’de ise tam yolun her bölüm başlığında tekrar edilmesi gerekir
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 okuyucusu, düzleştirilmiş niteleyici isimler dizisinden ağaç yapısını zihninde yeniden kurmak zorundadır; StrictYAML belgelerindeki ölçümlere göre aynı veriyi ifade ederken TOML dosyası, tekrar eden yol önekleri nedeniyle yaklaşık %50 daha fazla karakter kullanır
- Python, girintiyi yapı olarak kullanmanın zayıflık değil güç olduğunu uzun zaman önce gösterdi; görsel yapı ile sözdizimsel yapının ayrışmasından doğan hata türlerini ortadan kaldırır
- YAML, bu girinti tabanlı yapı avantajını devralır; TOML ise girintiyi zorunlu kılmadığından, anahtarlarla kapsayan tablolar arasındaki ilişki dosyanın fiziksel yerleşiminde değil yalnızca bölüm başlıklarında bulunur
- Derin iç içe yapılandırma dosyalarında TOML taraması zor, güvenle düzenlemesi daha da zordur
YAML 1.2’deki değişiklikler
- YAML 1.2 belirtimi 2009’da yayımlandı, açıklık getiren 1.2.2 revizyonu ise Ekim 2021’de tamamlandı
- YAML 1.2 Core Schema, yalnızca
true,falseileTrue,False,TRUE,FALSEdeğerlerini boolean olarak tanır;yes,no,on,off,y,nise normal string’lerdir 22:22sorununu yaratan 60 tabanlı sayı literalleri tamamen kaldırıldı ve zaman damgası artık çekirdek tür olmadığından, Core Schema altında tırnaksız2026-05-05otomatik algılanan tarih değil string’dir- JSON, YAML 1.2’nin katı ve doğru bir alt kümesi haline geldi; geçerli her JSON belgesi YAML olarak da aynı şekilde ayrıştırılır
- Etiket yorumlama kuralları daha sıkı ve nettir; belirtimin kendisi de daha açık yazılmıştır ve GitHub üzerinde açık biçimde sürdürülür
- İnsanların eleştirdiği YAML çoğu zaman YAML 1.1’dir; bugün dili tanımlayan baskın belirtim ise daha güvenli ve daha öngörülebilir YAML 1.2’dir
- Sorun şu ki kullanıcıların YAML deneyimi belirtim üzerinden değil, ayrıştırıcılar üzerinden şekillenir; Python kullanıcılarının çoğu için bu ayrıştırıcı, YAML 1.1 uygulayan ve 2006’dan beri temel anlambilimini değiştirmemiş olan PyYAML’dir
Python YAML ayrıştırıcı ekosistemi
- PyYAML, Python’un fiili standart YAML kütüphanesidir; performans için C kütüphanesi LibYAML’i sarar ve saf Python yedek yolu da sunar
- PyYAML haftada milyonlarca kez indirilir ve sayısız paketin bağımlılığıdır; ancak YAML 1.1 uygular ve Python ekosistemindeki “YAML ülke kodunu boolean’a çevirdi” deneyiminin kaynağıdır
- PyYAML deposunda 200’den fazla açık issue ve 100’den fazla açık pull request bulunur; proje bakım görüyor olsa da yavaş ilerliyor ve YAML 1.2 anlambilimine büyük sürüm geçişi henüz gerçekleşmedi
- ruamel.yaml, YAML 1.2 desteğiyle birlikte yorumları, flow style’ı ve anahtar sırasını koruyan round-trip düzenleme imkânı sunar; yorum koruma veya biçim duyarlı düzenleme için PyYAML’den çok daha güçlü bir seçenektir
- ruamel.yaml, varsayılan round-trip modunda çoğunlukla saf Python uygulaması kullandığından, PyYAML’in C tabanlı hızlı yolundan belirgin biçimde daha yavaştır; ayrıca namespace package sorunları ve bağımlılık zinciri nedeniyle dağıtım süreçlerini zorlaştıran bir paketleme geçmişi vardır
- StrictYAML, YAML’in kasıtlı bir alt kümesini uygular; tüm örtük tür çıkarımını, etiketleri, anchor’ları ve flow style’ı kaldırır
- StrictYAML felsefi olarak tam YAML’den çok TOML’e yakındır; YAML’in girinti sözdizimini kullanan güvenli ve sade bir biçimdir, ancak yalnızca Python’a yöneliktir, başka dil uygulamaları yoktur ve belirtime tam uyum hedeflemez
- Bu tabloda, hızlı, tam YAML 1.2 uyumlu ve PyYAML’in temel arayüzünün yerine kolayca geçebilecek bir kütüphane eksikti
py-yaml12’ye giriş
- py-yaml12, Python için bir YAML 1.2 ayrıştırıcı ve biçimlendiricisidir; hız ve doğruluk için Rust ile uygulanmıştır
- py-yaml12, Rust YAML kütüphanesi
saphyrcrate’i üzerine kuruludur ve yükleme içinparse_yaml(),read_yaml(), serileştirme içinformat_yaml(),write_yaml()adlarında küçük ve odaklı bir API sunar -
Sadelik
- Çoğu kullanım senaryosunda baştan sona yalnızca
dict,list,int,float,str,Nonegibi temel Python yerleşik türleriyle çalışacak şekilde tasarlanmıştır - Genel yolda özel belge sınıfları veya kullanıcı tanımlı düğüm türleri yoktur; YAML 1.2 JSON’ın üst kümesi olduğundan tüm geçerli JSON aynı şekilde ayrıştırılır
- py-yaml12, topluluk tarafından sürdürülen uç durum ve uygunluk testleri koleksiyonu olan
yaml-test-suiteiçinde %100 uyumluluk sağlar regionslistesindekino, PyYAML’in YAML 1.1 davranışında sessizceFalseolurken, py-yaml12’nin YAML 1.2 davranışında belirtimin gerektirdiği string"no"olarak kalır- Dosya API’si de doğrudandır; bir Python sözlüğünü diske yazıp geri okuduğunuzda aynı nesneyi veren kayıpsız bir round-trip davranışı sağlar
- Etiketli değerler gibi ileri YAML özellikleri için
Yamlsarmalayıcı türü sunar; fakat tipik yapılandırma işleri için bu isteğe bağlıdır
- Çoğu kullanım senaryosunda baştan sona yalnızca
-
Güvenlik
- py-yaml12’nin varsayılanları yalnızca kullanım kolaylığı değil, güvenlik de sağlar; PyYAML’in ters yaklaşımı etiketleri komut gibi ele alır ve yalnızca bir YAML dosyasını okumak bile keyfi Python kodunun çalıştırılması riskini doğurabilir
- PyYAML’in Python object-apply etiket ad alanına takma ad veren bir YAML dosyasını
yaml.load(f, Loader=yaml.Loader)ile okumak, sıradan bir sözlük döndürmeden önce Python kodunun çalıştırılmasına yol açabilir - Örnekte ayrıştırma sonucu
{'debug': False, 'retries': 3}gibi görünür; ancak bundan önceYAML_PAYLOAD_RANortam değişkeni'1'olarak ayarlanmıştır ve yalnızca sonuca bakarak yürütmenin gerçekleştiği anlaşılmaz - py-yaml12, açıkça seçmediğiniz etiketleri çalıştırmaz; onları veri olarak tutar ve işlenmeyen etiketleri değer ile etiketi içeren bir
Yamlsarmalayıcı olarak döndürür
-
Hız
- py-yaml12 kıyaslamaları, kilobayttan megabayta kadar dosya boyutlarında okuma ve yazma performansını PyYAML’in varsayılan saf Python yolu, LibYAML tabanlı
CSafeLoaderveCSafeDumper, ayrıca ruamel.yaml ile karşılaştırır - Temel ayrıştırma ve biçimlendirme mantığı yorumlanan Python yerine derlenmiş Rust ile yazıldığından, py-yaml12 tam YAML 1.2 uyumluluğunu korurken PyYAML’in C eklentisiyle yarışabilecek performans sunar
- Günümüzde Python kütüphaneleri arasında hem tam YAML 1.2 uyumluluğu hem de PyYAML C eklentisi düzeyinde performans sağlayan seçenek sayısı azdır
- py-yaml12 kıyaslamaları, kilobayttan megabayta kadar dosya boyutlarında okuma ve yazma performansını PyYAML’in varsayılan saf Python yolu, LibYAML tabanlı
Sonuç
- Yaygın YAML ve TOML tartışması, sorunlu hali artık fiilen var olmayan bir biçim etrafında dönen bir tartışmaya daha çok benziyor; eleştiriler gerçekti ama tarihsel nitelik taşıyor
- YAML eleştirileri çoğu zaman belirtime ve doğru uygulanmış YAML 1.2’ye değil, PyYAML üzerinden deneyimlenen YAML 1.1’e yöneliktir
- TOML, sığ ve düz yapılandırmalar için hâlâ iyi bir seçimdir ve
pyproject.tomlbu role çok uygundur; ancak YAML’in özünde güvensiz veya öngörülemez olduğu iddiası, uyumlu bir YAML 1.2 ayrıştırıcısı karşısında geçerli değildir - Asıl önemli soru, soyut olarak hangi biçimin en iyi olduğu değil; belirli bir iş için hangi biçim ve hangi aracın uygun olduğudur
- Karmaşık ve iç içe, insanlar tarafından yazılan yapılandırma dosyaları için modern ayrıştırıcılı YAML 1.2 güçlü bir yanıttır; biçimler, önceki kuşakların pürüzlerinin sonraki kuşaklarca giderilmesiyle gelişir
- Python’da
pip install py-yaml12ile modern ve belirtime uygun bir YAML deneyimi denenebilir - R ortamında ise r-yaml12, tam YAML 1.2 uyumluluğu, Rust tabanlı performans ve güvenli varsayılanlar dahil aynı avantajları sunar
1 yorum
Lobste.rs görüşleri
YAML’ın JSON’daki boşlukları doldurmak için ortaya çıktığı açıklaması tuhaf. Hatırladığım kadarıyla YAML, Perl topluluğundan çıktı ve JSON’la yaşıt, hatta ondan daha eski olma ihtimali var
Gerçek tarihe bakınca, YAML’ın yaratıcılarından Ingy dot Net’in ilginç yazısında kökeni 1999 Kasım ile 2001 Ocak arasına tarihlendiriliyor
Ayrıca JSON tarihçesi yazısına bakılırsa, ilkel JSON biçimi 2001 Nisan’ında sunucudan istemciye gizli iframe ve
<script>etiketiyle mesaj gönderme yönteminde ortaya çıkmış, ancak Douglas Crockford’un json.org’u yayımladığı 2002’de bağımsız bir format haline gelmişBu yüzden YAML JSON’dan biraz daha önce gelmiş olabilir ya da en cömert yorumla ikisi eşzamanlı gelişmiş sayılır. JSON’a bir tepki olarak ya da JSON’daki boşlukları doldurmak için ortaya çıktığı açıklaması doğru değil; YAML aslında XML’e bir tepkiydi. JSON da
<script>etiketine veriyi doğrudan gömmeye yönelik pratik bir ihtiyaçtan doğdu, ama XML’den daha basit bir alternatif olarak yerleşip popülerleştiğini inkâr etmek zorYazının kendisinde de sanki bir LLM yazmış gibi izler var; tanıtılan proje de vibe coding ile yapılmış gibi duruyor
Cümlelerin her biri tek tek makul ama bütün olarak kafa karıştırıcı. Ayrıca TOML’ü spesifikasyonu olan bir dil diye savunurken YAML’ı karmaşık bir spesifikasyonu var diye eleştirmesi de biraz tuhaf. Sanki YAML’ın başta spesifikasyonu yokmuş da TOML’ün varmış gibi bir izlenim doğuyor
JSON aslında fiilen ECMAScript tarzı bir Data-E’ye daha yakın. Data-E’nin arşivlenmiş sayfasına bakınca onların da XML’e tepki verdiği görülüyor
Inline table kullanılırsa “kötü” TOML örneği şöyle oluyor
Gayet iyi görünüyor; hatta harf sayısını sayarsak YAML örneğinden de kısa gibi duruyor
Bu yazının amacı YAML’ı savunmak olduğu için kapsam dışı sayılabilir ama TOML 1.1 ve yeni inline table özelliklerinin de ele alınmasını isterdim. JSON’da hoşuma gitmeyen üç şeyi çözüyor: tırnaksız anahtar adları, yorum dizeleri ve sonda virgül desteği
Python 3.15, TOML 1.1’i destekliyor ve TOML 1.1’in benimsenmesi YAML 1.2’den çok daha iyi görünüyor. TOML 1.0 ayrıştırıcısını 1.1’e güncellemek muhtemelen neredeyse önemsiz bir işken, YAML 1.1’den 1.2’ye geçmek öyle görünmüyor. yaml.org’da değişiklik listesini de pek bulamadım, sadece iki devasa spesifikasyon görüyorum
“Norway Problem” gibi şeyler YAML’dan hoşlanmamamın küçük bir dipnotu sayılır; asıl sebep düzenlemesinin zor olması, anlam taşıyan boşluklar kullanması ve genel olarak epey karmaşık olması
Bence YAML, JSON ve TOML’ün her birinin kendi alanı var. Uzun süre boş olduğunu düşündüğüm yeri ise https://kdl.dev/ doldurdu
JSON = keyfi biçimde iç içe geçebilen veri alışverişi
YAML = çok satırlı dizeler barındıran sığ kapsayıcı format
TOML = neredeyse düz yapıdaki yapılandırma dosyası
KDL = Ruby tarzı DSL’nin veri olarak ifadesi
Norway problemi gibi şeyler yüzünden YAML'dan hoşlanmıyorum. YAML 1.2 bunu biraz azalttı ama tırnaksız dizgeler yüzünden
"","Null","true","FALSE"gibi dizgeler hâlâ sorun çıkarıyor ve YAML'ı bilen bir encoder gerekiyor. Genel karmaşıklığından da hoşlanmıyorum ama YAML'dan gerçekten nefret etmemin asıl sebebi şuPEP-8 de girintide tab kullanılmamasını güçlü biçimde tavsiye eder
“Sorunlu olan YAML değil, YAML 1.1'di; ama çoğu şey 1.1 parser'ı” argümanının yazının istediği kadar ikna edici olmadığını düşünüyorum
Ölçülü kullanıldığında YAML'ı seviyorum ve YAML 1.2 için yeni yüksek performanslı parser'ların çıkmasını da memnuniyetle karşılıyorum, ama “kötü” sürüm hâlâ çoğunlukta kullanılıyorsa ben muhtemelen başka bir şey seçerim. Hangi parser'ın kullanılacağını kontrol edemediğim için kendi YAML'ımın doğru yorumlanacağına güvenemiyorsam, YAML'ın geneli hâlâ “kötü” durumdadır
Herkesin 1.2'ye geçmesi gerekir ama o zamana kadar YAML'a temkinli yaklaşmanın makul olduğunu düşünüyorum
“YAML vs TOML tartışması, genelde artık sorunlu biçimde var olmayan bir formatı hedef alan; şikâyetleri gerçek ama tarihsel olan bir tartışmadır” cümlesi karşısında GitHub Actions ve Kubernetes yüzünden çığlık atmak geliyor içimden
Savunma argümanı güçlü. Yine de çok basit belgelerde TOML daha okunaklı ve insanlara YAML yerine TOML kullandırmak daha kolay
Ne yazık ki araçlar hakkındaki kamusal geliştirici algısını değiştirmede uzun bir atalet kuyruğu var. İnsanlar bir hikâye okuyup fikrini oluşturuyor, sonra da kamuya açık hatalar yapmamış başka araçlara geçiyor
Ruby yorumlayıcısına gömülü YAML parser'ının YAML 1.2.2 desteklemesini isterdim
Ama ekosistemi bozmadan yeni sürüme varsayılan olarak nasıl geçileceğini pek bilmiyorum
Yapılandırma dosyası biçimlerinin standartlaştırılmış bir şema belirtmesini isterdim. Böylece editörler rastgele bir yapılandırma dosyasına bakıp yazım hatalı anahtarları veya tür uyuşmazlıklarını gösterebilirdi
Anahtarların ne işe yaradığını “hover” ipuçlarıyla belgelemek ve geçerli anahtarlar için otomatik tamamlama sunmak da kolay olmalı. Hatalı değerleri yakalamak için basit assertion'lar veya sözleşmeler bile desteklense daha iyi olurdu. Örneğin
"color"anahtarı/#[a-fA-F0-9]{6}/ile eşleşmeli gibiİdeal olarak bununla yapılandırma dosyası veri yapıları da otomatik üretilebilmeli
XSDya daRelax NGgibi çeşitli doğrulama belirtim biçimleri var; ben en çok XML DTD'ye aşinayım, bu yüzden diğerleri hakkında çok şey söyleyemem$schemaözelliğini koyup doğru şemayı tanımlayan bir JSON Schema dosyasına başvurmak oldukça yaygın. Bu özünde JSON için XSD demek. İyi editörler genelde buna dayanarak otomatik tamamlama ve kırmızı alt çizgi sağlayabiliyorGüzel yanı şu: TOML ve YAML kabaca sadece sözdizimi farklı JSON sayıldığı için, çoğu zaman aynı JSON Schema dosyaları onlarla da kullanılabiliyor