C:
Робота з YAML

Як це зробити:

Робота з YAML у C вимагає бібліотеки, оскільки стандартна бібліотека C не надає прямої підтримки для аналізу YAML або серіалізації. Однією з найпопулярніших бібліотек YAML для C є libyaml, яка пропонує інтерфейси низького та високого рівнів для аналізу та створення YAML. Нижче наведено приклад того, як проаналізувати простий YAML-файл, використовуючи libyaml:

Перше, вам потрібно встановити бібліотеку libyaml. Якщо ви використовуєте Unix-подібну систему, зазвичай ви можете встановити її за допомогою менеджера пакунків. Наприклад, на Ubuntu:

sudo apt-get install libyaml-dev

Далі, розглянемо простий YAML-файл під назвою config.yaml:

name: John Doe
age: 29
married: false

Ось простий приклад того, як проаналізувати цей YAML-файл у C:

#include <yaml.h>
#include <stdio.h>
#include <stdlib.h>

void process_yaml_file(const char *filename) {
    FILE *fh = fopen(filename, "rb");
    yaml_parser_t parser;
    yaml_event_t event;

    if (!yaml_parser_initialize(&parser))
        fputs("Не вдалося ініціалізувати парсер YAML!\n", stderr);

    if (fh == NULL)
        fputs("Не вдалося відкрити файл!\n", stderr);

    yaml_parser_set_input_file(&parser, fh);

    while (1) {
        if (!yaml_parser_parse(&parser, &event))
            break;

        if (event.type == YAML_SCALAR_EVENT) {
            printf("Значення: %s\n", event.data.scalar.value);
        }

        if (event.type == YAML_STREAM_END_EVENT)
            break;

        yaml_event_delete(&event);
    }

    yaml_parser_delete(&parser);
    fclose(fh);
}

int main() {
    process_yaml_file("config.yaml");
    return 0;
}

Ця проста програма відкриває YAML-файл, ініціалізує парсер YAML і читає файл, друкуючи скалярні значення (у цьому прикладі, поля нашого простого YAML). Зверніть увагу, що перевірка на помилки у цьому простому прикладі мінімальна і повинна бути більш ретельною у виробничому коді.

Запуск програми з нашим config.yaml виведе:

Значення: John Doe
Значення: 29
Значення: false

Поглиблено

Вперше YAML був випущений у 2001 році та був розроблений для більшої зручності читання та зручності для людського втручання, ніж інші формати серіалізації даних, такі як XML або JSON, запозичаючи з кількох мов, таких як C, Perl та Python, для своєї концепції дизайну. Незважаючи на свої переваги в читабельності та легкості модифікації людиною, YAML може бути складним для програмного аналізу через свою залежність від відступів та широкий набір функцій, включаючи посилання та користувацькі типи.

Хоча libyaml надає надійний доступ на низькому рівні до аналізу та створення YAML у С, вона може бути громіздкою для простих завдань через свій многослівний API. З цих причин деякі програмісти віддають перевагу використовувати бібліотеки вищого рівня або навіть інші формати серіалізації даних, такі як JSON, при роботі в C, особливо коли пріоритетом є швидкий аналіз з мінімальними витратами коду. Однак YAML залишається популярним вибором для файлів конфігурації та ситуацій, коли людська читабельність є первинною. Альтернативи, як-от TinyYAML або вбудовування інтерпретатора вищого рівня (наприклад, вбудовування Python або Lua), можуть забезпечити більшу зручність для певних застосунків, знаходячи баланс між легкістю використання та потребами продуктивності.