Configurazione TOML (.toml)
Specifica StandardTom’s Obvious Minimal Language (TOML) è un formato di configurazione chiaro e leggibile, creato dal cofondatore di GitHub Tom Preston-Werner e adottato in molti 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.
Ispezione 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 contenitore | 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 sequenziale della configurazione, riga per riga |
Matrice di confronto tecnico: TOML vs Concorrenti
| Attributo tecnico | TOML (Attuale) | YAML | JSON | INI |
|---|---|---|---|---|
| Rischio di ambiguità | Zero (specifica rigorosamente inequivocabile) | Elevato (bug di conversione dei valori booleani, come il “problema Norvegia” di 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 di CI/CD | API Web, comunicazione via browser | versioni obsolete di Windows, configurazione Git |
Modalità di corruzione comuni e guida al recupero esadecimale
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.app.
Analisi di sicurezza e vettori di attacco del parser
I parser TOML devono proteggersi dalla contaminazione dei prototipi e dall’esaurimento della CPU causato da array di tabelle annidati in modo anomalo.
Vettori di attacco noti
- Contaminazione del prototipo nei parser TOML JavaScript che iniettano proprietà in Object.prototype.
- Interruzione del servizio tramite dichiarazioni di array di tabelle profondamente annidate.
- 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
- Completamente inequivocabile: si traduce in modo chiaro e prevedibile in una tabella hash, senza conversioni di tipo inattese.
- Supporto nativo di prima classe per data e ora (timestamp, date e orari RFC 3339) senza caratteri di escape nelle stringhe.
- Adottato come formato di configurazione standard ufficiale per i moderni strumenti per i linguaggi di programmazione (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
- TOML è stato creato da Tom Preston-Werner, che ha anche co-fondato GitHub e creato Gravatar e SemVer (Semantic Versioning).
- I pacchetti Cargo usano Cargo.toml per dichiarare metadati, dipendenze e target; i progetti Rust che usano altri sistemi di build possono usare file diversi.
- 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 noti errori di interpretazione dei casi limite di YAML (per esempio, la stringa non quotata “NO” che diventa il booleano false) e resta leggibile grazie ai commenti e alle 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 leggibili dall'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.