Configurație TOML (.toml)
TOML StandardTom's Obvious Minimal Language (TOML) este un format de configurare neambiguu, centrat pe utilizatorul uman, 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.
Inspectează și Metadate
Sistemele de operare și analizatoarele de fișiere identifică fișierele TOML prin inspectarea secvenței binare inițiale:
Semnătura antetului la nivel de octet (Magic Bytes)
Sistemele de operare și analizatoarele de fișiere identifică fișierele TOML prin inspectarea secvenței binare inițiale:
SEMNĂTURĂ HEX (OFFSET 0):
5B ... 5DREPREZENTARE ASCII: [...]
Standardizare: TOML v1.0.0 Specification
Specificații tehnice
| Arhitectură container | Human-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs |
| Compresie | Uncompressed text stream |
| Endianitatea octeților | UTF-8 text stream |
| Spații de culoare | N/A (Configuration File) |
| Canale și structură | Tables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes |
| Dimensiuni maxime | Unbounded text length |
| Transparență | None |
| Streaming și progresiv | Sequential line-by-line configuration parsing |
Matrice de comparație tehnică: TOML vs Competitori
| Atribut tehnic | TOML (Curent) | YAML | JSON | INI |
|---|---|---|---|---|
| Risc de ambiguitate | Zero (specificație strict neambiguă) | Ridicat (erori 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 3339 | Analiză implicită a șirurilor / datelor | Niciunul (doar șiruri de caractere) | Niciunul (doar șiruri de caractere) |
| Suport pentru comentarii | Nativ (comentarii #) | Nativ (comentarii #) | Nu sunt permise comentarii | Nativ (comentarii ; și #) |
| Ecosistem principal | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, conducte CI/CD | API-uri Web, comunicare în browser | Windows vechi, configurare Git |
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: Validați și re-formați sintaxa TOML utilizând Formatorul TOML File2File.
Analiză de securitate și vectori de atac asupra parserului
Analizoarele TOML trebuie să se protejeze împotriva poluării de prototip și a epuizării procesorului cauzate de imbricarea patologică a matricelor de tabele.
Vectori de atac cunoscuți
- Poluarea de prototip î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:
Origini istorice și repere
Avantaje cheie și beneficii
- Complet neambiguu: se mapează curat și predictibil la un tabel de dispersie (hash table), fără nicio conversie surpriză de tip.
- Suport nativ de primă clasă pentru date și timp (marcaje temporale RFC 3339, date, ore) fără evadarea șirurilor de caractere (string escaping).
- Adoptat ca format de configurare standard oficial pentru instrumentele lingvistice moderne (Rust Cargo.toml, Python pyproject.toml).
Limitări tehnice și dezavantaje
- Arborii de obiecte imbricați profund pe mai multe niveluri pot deveni verboși în comparație cu YAML.
- Sintaxa pentru matrice 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 co-fondat și GitHub și a creat Gravatar și SemVer (Semantic Versioning).
- Fișierul 'Cargo.toml' din fiecare proiect Rust specifică toate dependențele pachetului și fanioanele (flags) compilatorului în format TOML.
- 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, cel mai vizibil în Cargo.toml din Rust, pyproject.toml din Python, configurațiile Go Hugo și instrumente pentru containere.
De ce este preferat TOML în fața YAML pentru configurare?
TOML evită bugurile de parsare notorioase din YAML pentru cazurile 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?
Puteți converti fișiere TOML în JSON sau YAML instantaneu folosind File2File.app direct în browserul dumneavoastră web.
Perechi de conversie TOML conexe
Conversia fișierelor de configurare TOML în format JSON traduce setările proprietăților prietenoase pentru oameni într-un obiect de date strict pe care aplicațiile web îl pot parsa instantaneu.
Conversia fișierelor de configurare JSON în format TOML simplifică editarea manuală, păstrând în același timp toate ierarhiile structurate de date de tip cheie-valoare.