Configurazione TOML (.toml)
Specifica StandardTom's Obvious Minimal Language (TOML) è un formato di configurazione inequivocabile e incentrato sull'uomo, creato dal co-fondatore di GitHub Tom Preston-Werner, ampiamente adottato nei moderni ecosistemi di programmazione tra cui Rust (Cargo) e Python (pyproject.toml).
Converti da TOML a JSON
Convertitore gratuito da TOML a JSON nel browser. Converti i file istantaneamente sul tuo dispositivo.
Ispeziona e metadati
I sistemi operativi e gli analizzatori di file identificano i file TOML ispezionando la sequenza di byte binari iniziale:
Firma dell'intestazione a livello di byte (Magic Bytes)
I sistemi operativi e gli analizzatori di file identificano i file TOML ispezionando la sequenza di byte binari iniziale:
FIRMA ESADECIMALE (OFFSET 0):
5B ... 5DRAPPRESENTAZIONE ASCII: [...]
Standardizzazione: Specifica TOML v1.0.0
Specifiche tecniche
| Architettura del container | File di configurazione leggibile dall'uomo che mappa in modo inequivocabile su una tabella hash, strutturato con [tabelle] e coppie chiave = valore |
| Compressione | Flusso di testo non compresso |
| Endianness dei byte | Flusso di testo UTF-8 |
| Spazi colore | N/D (File di configurazione) |
| Canali e struttura | Tabelle, array di tabelle, tabelle inline, stringhe, interi, numeri in virgola mobile, booleani e date/ore RFC 3339 |
| Dimensioni massime | Lunghezza del testo illimitata |
| Trasparenza | Nessuna |
| Streaming e progressivo | Analisi della configurazione sequenziale riga per riga |
Matrice di confronto tecnico: TOML vs Concorrenti
| Attributo tecnico | TOML (Corrente) | YAML | JSON | INI |
|---|---|---|---|---|
| Rischio di ambiguità | Zero (specifica rigorosamente inequivocabile) | Alto (bug booleani del 'problema Norvegia' in YAML) | Zero (tipi di dati rigorosi) | Moderato (nessuno standard formale) |
| Tipi di data e ora nativi | Supporto nativo per date e orari RFC 3339 | Analisi implicita di stringhe / date | Nessuno (solo stringhe) | Nessuno (solo stringhe) |
| Supporto ai commenti | Nativo (commenti con #) | Nativo (commenti con #) | Nessun commento consentito | Nativo (commenti con ; e #) |
| Ecosistema principale | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, pipeline CI/CD | API Web, comunicazione via browser | Windows legacy, configurazione Git |
Modalità di corruzione comuni e guida al recupero Hex
Errore del parser: 'Duplicate key in table' o 'Invalid table header'.
Causa principale: Tentativo di ridefinire una chiave esistente o un namespace di tabelle all'interno del documento.
Ripristino: Valida e riformatta la sintassi TOML utilizzando il formattatore TOML di File2File.
Analisi di sicurezza e vettori di attacco del parser
I parser TOML devono difendersi dalla contaminazione del prototipo (prototype pollution) e dall'esaurimento della CPU dovuto alla nidificazione patologica di array di tabelle.
Vettori di attacco noti
- Contaminazione del prototipo nei parser TOML JavaScript che iniettano proprietà in Object.prototype.
- Denial of service tramite dichiarazioni di array di tabelle profondamente nidificate.
- Allocazione di memoria illimitata durante l'analisi di array inline massicci.
Migliori pratiche difensive: Valida i limiti di nidificazione delle tabelle e utilizza oggetti dizionario sicuri contro la contaminazione dei prototipi.
Origini storiche e tappe fondamentali
Vantaggi principali e pro
- Completamente inequivocabile: si mappa in modo pulito e prevedibile su una tabella hash senza alcuna sorprendente coercizione dei tipi.
- Supporto nativo di prima classe per data e ora (timestamp, date e orari RFC 3339) senza escape delle stringhe.
- Adottato come formato di configurazione standard ufficiale per i moderni strumenti linguistici (Rust Cargo.toml, Python pyproject.toml).
Limiti tecnici e svantaggi
- Gli alberi di oggetti multilivello profondamente nidificati possono risultare prolissi rispetto a YAML.
- La sintassi per gli array di tabelle ([[table.array]]) può risultare poco intuitiva per i principianti.
- Meno compatto di JSON per lo scambio di dati API ad alte prestazioni tra macchine.
Curiosità tecniche interessanti
- TOML è stato creato da Tom Preston-Werner, che ha anche co-fondato GitHub e creato Gravatar e SemVer (Semantic Versioning).
- Il file 'Cargo.toml' in ogni progetto Rust specifica tutte le dipendenze del pacchetto e i flag del compilatore in formato TOML.
- A differenza di JSON, TOML supporta nativamente i commenti (usando il carattere '#') e le stringhe multilinea.
Domande tecniche frequenti
A cosa serve TOML?
TOML viene utilizzato per la configurazione del software, in particolare in Cargo.toml di Rust, pyproject.toml di Python, nelle configurazioni di Go Hugo e negli strumenti per container.
Perché TOML è preferito a YAML per la configurazione?
TOML evita i famigerati bug di analisi dei casi limite di YAML (come la stringa non quotata 'NO' che si trasforma nel booleano false), rimanendo al contempo leggibile dall'uomo grazie ai commenti e a tabelle chiare.
Come posso convertire TOML in JSON o YAML?
Puoi convertire file TOML in JSON o YAML istantaneamente utilizzando File2File.app direttamente nel tuo browser web.
Coppie di conversione per TOML correlate
La conversione di file di configurazione TOML in formato JSON traduce impostazioni di proprietà di facile utilizzo per l'uomo in un oggetto dati rigoroso che le applicazioni Web possono analizzare istantaneamente.
La conversione dei file di configurazione JSON in formato TOML semplifica la modifica manuale preservando tutte le gerarchie di dati chiave-valore strutturate.