C:
Praca z TOML

Jak używać:

Aby pracować z TOML w C, potrzebujesz najpierw biblioteki zdolnej do analizowania plików TOML, ponieważ standardowa biblioteka C nie zawiera tej funkcjonalności. Popularnym wyborem jest tomlc99, lekki parser TOML dla C99. Oto krótki przewodnik, jak odczytać prosty plik konfiguracyjny TOML:

Najpierw upewnij się, że masz zainstalowanego i odpowiednio połączonego w projekcie tomlc99.

Przykładowy plik TOML (config.toml):

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

Kod C do analizy tego pliku:

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

int main() {
    FILE *configFile;
    configFile = fopen("config.toml", "r");
    if (!configFile) {
        perror("Nie można otworzyć pliku");
        return EXIT_FAILURE;
    }

    toml_table_t *config = toml_parse_file(configFile, NULL, 0);
    if (!config) {
        fprintf(stderr, "Błąd podczas analizowania pliku\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("Serwer bazy danych: %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("Port %d: %ld\n", i, port);
        }
    }

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

Wynik:

Serwer bazy danych: "192.168.1.1"
Port 0: 8001
Port 1: 8001
Port 2: 8002

Pogłębiona analiza

TOML został stworzony przez Toma Preston-Wernera, współzałożyciela GitHuba, jako odpowiedź na ograniczenia, które dostrzegał w innych formatach plików konfiguracyjnych. Jego celem jest bycie prostym i jednoznacznym, zarówno dla ludzi, jak i komputerów, do czytania i pisania bez potrzeby skomplikowanych zasad analizy. W ekosystemie C, TOML nie jest obywatelem pierwszej kategorii tak jak może być to w językach wyższego poziomu takich jak Rust z jego serde_toml czy Python z toml, które mają biblioteki z natywnym wsparciem. Zamiast tego deweloperzy C muszą polegać na zewnętrznych bibliotekach takich jak tomlc99, ale jest to typowe biorąc pod uwagę nacisk C na minimalizm i wydajność.

Chociaż TOML jest chwalony za swoją jasność, przy wyborze formatu pliku konfiguracyjnego ważne jest, aby rozważyć potrzeby projektu. W scenariuszach wymagających bardziej złożonych struktur lub interakcji z internetowymi API, JSON czy nawet YAML mogą lepiej pasować pomimo ich zwiększonej złożoności. TOML świeci w konfiguracjach, gdzie czytelność i prostota są najważniejsze, niekoniecznie tam, gdzie potrzebne są najbardziej zaawansowane struktury danych.