среда, 21 февраля 2018 г.

[prog.thoughts] Запись "_ = some()" в С++ -- это извращение или нет?

В связи с тем, что в C++ завезли атрибут [[nodiscard]], да и в чистом C благодаря расширениям компиляторов ряд функций помечается соответствующим образом, становится актуальным явное обозначение в коде тех мест, где возвращаемое значение функции намеренно игнорируется.

Только вот использовать для этого запись вида:

(void)::pipe(pipefd_);

(void)::fcntl(write_pipefd(), F_SETFL, O_DIRECT | O_NONBLOCK);
(void)::fcntl(read_pipefd(), F_SETFL, O_DIRECT | O_NONBLOCK);

мне лично не нравится. Нравится так, как это было принято в других языках:

_ = ::pipe(pipefd_);

_ = ::fcntl(write_pipefd(), F_SETFL, O_DIRECT | O_NONBLOCK);
_ = ::fcntl(read_pipefd(), F_SETFL, O_DIRECT | O_NONBLOCK);

Что достигается очень простой вспомогательной конструкцией:

// Вспомогательная штука, чтобы подавить предупреждения об игнорировании
// возвращаемого значения.
namespace {
   struct just_ignore_t {
      template<typename T> void operator=(T) {}
   } _;
}

Правда, боюсь, если это и найдет свое применение в C++, то очень ограниченное. Но смотрится прикольно :)

[prog.plain.old.c] Сижу тут, интегрирую C++ный RESTinio и С-шный libcurl...

Работаю над примерами интеграции RESTinio и libcurl. Чтобы показать, как можно объединять асинхронную обработку входящих HTTP-запросов с асинхронной же обработкой исходящих HTTP-запросов. Используется чистый libcurl без каких-либо C++ных обвязок.

Что же хочется сказать по ходу колупания с чисто C-шным кодом?

Удовольствие сильно ниже среднего. Там, где на C++ можно написать пару строчек, в которых сразу будет и вся необходимая обработка всевозможных ошибок, на чистом C нужно городить портянки, которые требуют кучу сил, времени и внимания даже без какой-либо обработки ошибок.

В общем, это какой-то звиздец, дорогие товарищи.

В связи с этим в очередной раз недоумеваю по поводу того, что кто-то считает C удобным для разработки языком программирования. И предпочитает разрабатывать что-то на чистом C вне ядра Linux-а или *BSD в наше время.

Возможно, у любителей C отношение к жизни какое-то специфическое. Ну, типа, "кто понял жизнь, тот не спешит".