Configurație TOML (.toml)

Specificația Standard

Tom's Obvious Minimal Language (TOML) este un format de configurare neambiguu, conceput pentru a fi ușor de citit de oameni, creat de co-fondatorul GitHub Tom Preston-Werner și adoptat pe scară largă în ecosistemele de programare moderne, inclusiv Rust (Cargo) și Python (pyproject.toml).

Convertește din TOML în JSON

Convertor gratuit din TOML în JSON direct în browser. Convertește fișiere instantaneu pe dispozitivul tău.

Inspectare și metadate

Sistemele de operare și analizatoarele de fișiere identifică fișierele TOML prin inspectarea secvenței binare inițiale:

Selectează sau plasează fișierele aici

Privat - fișierele nu părăsesc niciodată dispozitivul tău

sau lipește Ctrl+V
Garanție de confidențialitate: nicio transmisie prin rețea: 0 octeți încărcați pe servere externe. Toată procesarea a avut loc local în sandbox-ul browserului tău.

Semnătura antetului la nivel de octet (octeți magici)

Sistemele de operare și analizatoarele de fișiere identifică fișierele TOML prin inspectarea secvenței binare inițiale:

SEMNĂTURĂ HEXAZECIMALĂ (DECALAJ 0):

5B ... 5D

REPREZENTARE ASCII: [...]

Standardizare: Specificația TOML v1.0.0

Specificații tehnice

Arhitectură containerFișier de configurare lizibil, care se mapează fără echivoc la un tabel hash și este structurat cu [tabele] și perechi cheie = valoare
CompresieFlux text necomprimat
Ordinea octețilorFlux text UTF-8
Spații de culoareNu se aplică (fișier de configurare)
Canale și structurăTabele, tablouri de tabele, tabele inline, șiruri, numere întregi, numere în virgulă mobilă, valori booleene și date-timp RFC 3339
Dimensiuni maximeLungime de text nelimitată
TransparențăNu există
Streaming și progresivAnaliză secvențială a configurației, rând cu rând

Matrice de comparație tehnică: TOML vs. concurenți

Atribut tehnicTOML (Curent)YAMLJSONINI
Risc de ambiguitateZero (specificație strict lipsită de ambiguitate)Ridicat (erori legate de valorile booleene cauzate de 'problema Norvegiei' în YAML)Zero (tipuri de date stricte)Moderat (fără standard formal)
Tipuri native de dată și orăSuport nativ pentru dată și oră RFC 3339Interpretarea implicită a șirurilor / datelorNiciunul (doar șiruri de caractere)Niciunul (doar șiruri de caractere)
Suport pentru comentariiNativ (comentarii cu #)Nativ (comentarii cu #)Nu sunt permise comentariiNativ (comentarii cu ; și #)
Ecosistem principalRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, fluxuri CI/CDAPI-uri Web, comunicare în browserWindows și configurarea Git din sisteme vechi

Moduri comune de corupție și ghid de recuperare hexazecimală

Eroare de analizor: 'Duplicate key in table' sau 'Invalid table header'.

Cauză principală: Încercarea de a redefini o cheie existentă sau un spațiu de nume de tabel în cadrul documentului.

Recuperare: Validează și reformatează sintaxa TOML folosind File2File.app TOML Formatter.

Analiză de securitate și vectori de atac asupra parserului

Analizoarele TOML trebuie să se protejeze împotriva poluării prototipurilor și a epuizării procesorului cauzate de imbricarea patologică a matricelor de tabele.

Vectori de atac cunoscuți

  • Poluarea prototipurilor în analizoarele TOML JavaScript, injectând proprietăți în Object.prototype.
  • Refuz de serviciu (DoS) prin declarații de matrice de tabele imbricate profund.
  • Alocare nelimitată de memorie în timpul analizei matricelor inline masive.

Cele mai bune practici de securitate: Validează limitele de imbricare a tabelelor și folosește obiecte dicționar protejate împotriva poluării prototipurilor.

Origini istorice și repere

2021Este lansat oficial TOML v1.0.0, care fixează specificația de bază a sintaxei.
2018Python standardizează 'pyproject.toml' (PEP 518) ca standard modern pentru configurarea procesului de construire.
2013Tom Preston-Werner publică TOML pentru a oferi un format de configurare curat, fără complexitatea YAML.

Avantaje cheie și beneficii

  • Complet neambiguu: se mapează clar și predictibil la un tabel hash, fără nicio conversie surpriză de tip.
  • Suport nativ de primă clasă pentru date și timp (marcaje temporale RFC 3339, date, ore) fără a necesita caractere de escape în șirurile de caractere.
  • Adoptat ca format de configurare standard oficial pentru instrumentele moderne pentru limbaje de programare (Rust Cargo.toml, Python pyproject.toml).

Limitări tehnice și dezavantaje

  • Arborii de obiecte imbricați profund pe mai multe niveluri pot deveni greoi în comparație cu YAML.
  • Sintaxa pentru tablouri de tabele ([[table.array]]) poate fi greu de intuit pentru începători.
  • Mai puțin compact decât JSON pentru schimbul de date API între mașini cu debit ridicat.

Curiozități tehnice interesante

  • TOML a fost creat de Tom Preston-Werner, care a cofondat GitHub și a creat Gravatar și SemVer (Semantic Versioning).
  • Pachetele Cargo folosesc Cargo.toml pentru metadate, dependențe și ținte; proiectele Rust care folosesc alte sisteme de construire pot avea fișiere diferite.
  • Spre deosebire de JSON, TOML acceptă nativ comentarii (utilizând caracterul '#') și șiruri de caractere pe mai multe rânduri.

Întrebări tehnice frecvente

Pentru ce este folosit TOML?

TOML este folosit pentru configurarea software-ului, în special în Cargo.toml din Rust, pyproject.toml din Python, configurațiile Hugo pentru Go și instrumente pentru containere.

De ce este preferat TOML în fața YAML pentru configurare?

TOML evită erorile de parsare bine cunoscute din YAML în situații limită (cum ar fi transformarea valorii neghilimate 'NO' în booleanul false), rămânând în același timp prietenos cu utilizatorul prin comentarii și tabele clare.

Cum pot converti TOML în JSON sau YAML?

Poți converti fișiere TOML în JSON sau YAML instantaneu folosind File2File.app direct în browserul tău web.