C:
Lavorare con TOML

Come fare:

Per lavorare con TOML in C, hai prima bisogno di una libreria in grado di analizzare i file TOML, dato che la libreria standard C non include questa funzionalità. Una scelta popolare è tomlc99, un parser TOML leggero per C99. Ecco una rapida guida per leggere un semplice file di configurazione TOML:

Prima, assicurati di avere installato e correttamente collegato tomlc99 nel tuo progetto.

Esempio di file TOML (config.toml):

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true

Codice C per analizzare questo file:

#include <stdio.h>
#include <stdlib.h>
#include "toml.h"

int main() {
    FILE *configFile;
    configFile = fopen("config.toml", "r");
    if (!configFile) {
        perror("Impossibile aprire il file");
        return EXIT_FAILURE;
    }

    toml_table_t *config = toml_parse_file(configFile, NULL, 0);
    if (!config) {
        fprintf(stderr, "Errore nell'analisi del file\n");
        fclose(configFile);
        return EXIT_FAILURE;
    }

    toml_table_t *database = toml_table_in(config, "database");
    if (database) {
        const char *server = toml_raw_in(database, "server");
        printf("Server Database: %s\n", server);

        toml_array_t *ports = toml_array_in(database, "ports");
        for (int i = 0; i < toml_array_nelem(ports); i++) {
            int64_t port;
            toml_int_at(ports, i, &port);
            printf("Porta %d: %ld\n", i, port);
        }
    }

    toml_free(config);
    fclose(configFile);
    return EXIT_SUCCESS;
}

Output:

Server Database: "192.168.1.1"
Porta 0: 8001
Porta 1: 8001
Porta 2: 8002

Approfondimento

TOML è stato creato da Tom Preston-Werner, co-fondatore di GitHub, come risposta alle limitazioni che percepiva in altri formati di file di configurazione. Il suo obiettivo è quello di essere diretto e non ambiguo, sia per gli umani che per i computer, da leggere e scrivere senza aver bisogno di regole di analisi complesse. Nel ecosistema C, TOML non è un cittadino di prima classe come potrebbe esserlo in linguaggi di livello più alto come Rust con il suo serde_toml o Python con toml, che dispongono di librerie con supporto nativo. Piuttosto, gli sviluppatori C devono affidarsi a librerie esterne come tomlc99, ma questo è tipico data l’enfasi di C sul minimalismo e le prestazioni.

Sebbene TOML sia lodato per la sua chiarezza, quando si sceglie un formato di file di configurazione, è vitale considerare le necessità del progetto. In scenari che richiedono strutture più complesse o interattività con web API, JSON o anche YAML potrebbero offrire una migliore adattabilità nonostante la loro maggiore complessità. TOML brilla nelle configurazioni dove leggibilità e semplicità sono di massima importanza, non necessariamente dove sono necessarie le strutture dati più avanzate.