TOML Yapılandırması (.toml)

TOML Standart

Tom's Obvious Minimal Language (TOML), GitHub kurucu ortağı Tom Preston-Werner tarafından oluşturulan, net, insan odaklı bir konfigürasyon formatıdır; Rust (Cargo) ve Python (pyproject.toml) gibi modern programlama ekosistemlerinde yaygın olarak benimsenmiştir.

TOML biçimini JSON biçimine dönüştür

Tarayıcında TOML biçimini JSON biçimine ücretsiz dönüştür. Dosyaları cihazında anında dönüştür.

İncele ve Meta Veriler

İşletim sistemleri ve dosya çözümleyicileri, TOML dosyalarını başlangıçtaki ikili sihirli bayt dizisini inceleyerek tanımlar:

Dosyaları buraya seç veya bırak

Özel - dosyalar cihazınızdan asla ayrılmaz

veya yapıştır Ctrl+V
Sıfır Ağ Aktarımı Gizlilik Garantisi: Harici sunuculara 0 bayt yüklendi. Tüm işlemler tarayıcındaki korumalı alanda (sandbox) yerel olarak gerçekleştirildi.

Bayt düzeyinde başlık imzası (sihirli baytlar)

İşletim sistemleri ve dosya çözümleyicileri, TOML dosyalarını başlangıçtaki ikili sihirli bayt dizisini inceleyerek tanımlar:

HEX İMZASI (OFSET 0):

5B ... 5D

ASCII GÖSTERİMİ: [...]

Standartlaştırma: TOML v1.0.0 Specification

Teknik Özellikler

Kapsayıcı mimarisi[tables] bölümleri ve key = value çiftleriyle yapılandırılmış, doğrudan karma tabloya eşlenen insanlarca okunabilir yapılandırma dosyası
SıkıştırmaSıkıştırılmamış metin akışı
Bayt Düzeni (Endianness)UTF-8 metin akışı
Renk UzaylarıN/A (Configuration File)
Kanallar ve YapıTablolar, tablo dizileri, satır içi tablolar, dizgeler, tamsayılar, kayan noktalı sayılar, Boole değerleri ve RFC 3339 tarih-saatleri
Maksimum BoyutlarSınırsız metin uzunluğu
ŞeffaflıkNone
Akış ve Aşamalı İşlemeYapılandırmanın satır satır sıralı ayrıştırılması

Teknik karşılaştırma matrisi: TOML ve rakipleri

Teknik NitelikTOML (Güncel)YAMLJSONINI
Belirsizlik RiskiSıfır (belirtim kesin ve yoruma kapalı)Yüksek (YAML'da 'Norveç sorunu' nedeniyle boole türünde hatalar)Sıfır (katı veri tipleri)Orta (resmi bir standart yok)
Yerleşik tarih ve saat türleriYerel RFC 3339 tarih ve saat desteğiÖrtük dize / tarih ayrıştırmaYok (yalnızca dizeler)Yok (yalnızca dizeler)
Yorum DesteğiYerel (# yorumları)Yerel (# yorumları)Yorumlara izin verilmezYerel (; ve # yorumları)
Birincil EkosistemRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, CI/CD boru hatlarıWeb API'leri, tarayıcı iletişimiEski Windows, Git yapılandırması

Yaygın Bozulma Modları ve Hex Kurtarma Kılavuzu

Ayrıştırıcı hatası: 'Duplicate key in table' (Tabloda yinelenen anahtar) veya 'Invalid table header' (Geçersiz tablo başlığı).

Kök Neden: Belge içinde mevcut bir anahtarın veya tablo ad alanının yeniden tanımlanmaya çalışılması.

Kurtarma: File2File.app TOML Biçimlendiriciyi kullanarak TOML sözdizimini doğrulayın ve yeniden biçimlendirin.

Güvenlik Analizi ve Ayrıştırıcı Saldırı Vektörleri

TOML ayrıştırıcıları, prototip kirlenmesine ve aşırı iç içe geçmiş tablo dizilerinden kaynaklanan CPU tükenmesine karşı koruma sağlamalıdır.

Bilinen Saldırı Vektörleri

  • JavaScript TOML ayrıştırıcılarında Object.prototype içine özellikler enjekte eden prototip kirlenmesi.
  • Derinlemesine iç içe geçmiş tablo dizisi bildirileri yoluyla hizmet reddi (DoS).
  • Devasa satır içi dizi ayrıştırma sırasında sınırsız bellek tahsisi.

Savunmaya yönelik en iyi uygulamalar: Tabloların iç içe geçme sınırlarını doğrula ve prototip kirlenmesine karşı güvenli sözlük nesneleri kullan.

Tarihsel kökenler ve önemli dönüm noktaları

2021TOML v1.0.0 resmi olarak yayınlandı ve çekirdek sözdizimi spesifikasyonu donduruldu.
2018Python, modern derleme yapılandırma standardı olarak 'pyproject.toml' (PEP 518) standardını benimsedi.
2013Tom Preston-Werner, YAML'ın karmaşıklığı olmadan temiz bir konfigürasyon formatı sağlamak için TOML'u yayınladı.

Temel Avantajlar ve Artılar

  • Tamamen belirgin: Beklenmedik tür dönüşümleri olmadan karma tablosuna açık ve öngörülebilir biçimde eşlenir.
  • Dize kaçışlarına gerek kalmadan yerleşik tarih ve saat desteği sunar (RFC 3339 zaman damgaları, tarihler ve saatler).
  • Modern programlama dili araçları için resmî standart yapılandırma biçimi olarak benimsenmiştir (Rust Cargo.toml, Python pyproject.toml).

Teknik Kısıtlamalar ve Eksiler

  • Derinlemesine iç içe geçmiş çok seviyeli nesne ağaçları, YAML ile karşılaştırıldığında uzun ve karmaşık hale gelebilir.
  • Tablo dizileri için sözdizimi ([[table.array]]), yeni başlayanlar için sezgisel olmayabilir.
  • Yüksek hacimli makineden makineye API veri alışverişinde JSON'a göre daha az kompakttır.

İlginç Teknik Bilgiler

  • TOML'u, GitHub'ın kurucu ortaklarından ve Gravatar ile SemVer'in (Semantic Versioning) yaratıcısı Tom Preston-Werner oluşturdu.
  • Cargo paketleri meta verileri, bağımlılıkları ve hedefleri bildirmek için Cargo.toml kullanır; başka derleme sistemlerindeki Rust projeleri farklı dosyalar kullanabilir.
  • JSON'dan farklı olarak TOML, '#' karakterini kullanan yorum satırlarını ve çok satırlı dizeleri yerel olarak destekler.

Sıkça Sorulan Teknik Sorular

TOML ne için kullanılır?

TOML; yazılım yapılandırmasında, özellikle Rust'ın Cargo.toml, Python'un pyproject.toml, Go Hugo yapılandırmaları ve kapsayıcı (container) araçlarında kullanılır.

TOML yapılandırma için neden YAML yerine tercih edilir?

TOML, yorum satırları ve açık tablolarla okunabilirliğini korurken YAML'daki bilinen uç durum ayrıştırma hatalarını (örneğin tırnaksız 'NO' ifadesinin false boole değerine dönüşmesi) önler.

TOML dosyasını JSON veya YAML formatına nasıl dönüştürebilirim?

TOML dosyalarını web tarayıcında doğrudan File2File.app'i kullanarak anında JSON veya YAML'a dönüştürebilirsin.