Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

C++ дайджест #30: Contracts, Preconditions, Invariants, for_each для tuple

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Привіт, мої любі сішники! В цьому випуску матеріали з Preconditions, об’єктів синхронізації, оптимізації та метапрограмування під MSVC.

Modern C++

std::index_sequence and its Improvement in C++20 — for_each для tuple на С++20 від Jonathan Boccara.

12 Different Ways to Filter Containers in Modern C++ — можливості фільтрування контейнерів через предикати з використанням С++20.

Contracts, Preconditions & Invariants — забезпечення цілісності «контрактів» (семантичного значення декларування функцій) за допомогою Preconditions та інваріантів.

Preconditions, Part 1, Part 2 — детальний огляд precondition від Herb Sutter: взаємозв’язок з асертами, як імплементувати в С++ 20 та більш ранніх стандартах.

Barriers and Atomic Smart Pointers in C++20 — можливості proposal N4162 до стандарту, у якому вводяться std::atomic_shared_ptr і std::atomic_weak_ptr, та відмінності std::latch від std::barrier.

std::jthread and cooperative cancellation with stop token — розглянуто std::jthread з 20-го стандарту, який автоматично виконує join під капотом та std::stop_token.

Semaphores in C++20 — на прикладі розглянуто введений у С++ 20 std::binary_semaphore.

Корисні посилання

Серія статей Creating other types of synchronization objects that can be used with co await: частина 1 — The one-shot event, частина 2 — The basic library, частина 3 — Parallel resumption, частина 4 — The manual-reset event, частина 5 — The auto-reset event, частина 6 — The semaphore, частина 7 — The mutex and recursive, частина 8 — The shared mutex, частина 9 — The shared mutex (continued);

How C++ Resolves a Function Call — детальний опис, як не впасти у депресію, якщо вошлог заполонили помилки серії:

error C2666: 'String::operator ==': 2 overloads have similar conversions
note: could be 'bool String::operator ==(const String &) const'
note: or       'built-in C++ operator==(const char *, const char *)'
note: while trying to match the argument list '(const String, const char *)'

Гарний огляд вибору певної функції компілятором і покроковий туторіал з подолання челенджу.

How to use C++ for Cross-Platform Development — швидке введення в використання С++ для написання кросплатформених застосунків на android/ios/win. Описано базову інтеграцію та взаємодію між мовами (Java (Android) / C++, Objective-C / C++, Swift / C++).

Job related results from the Meeting C++ community survey — статистика від Meeting C++.

Parameter Passing in C and C++ — що ховає під капотом вислів «передача параметрів» до рівня асемблеру.

Inlining and Compiler Optimizations — constant propagation та loop-invariant code motion.

Build Throughput Series: Template Metaprogramming Fundamentals та More Efficient Template Metaprogramming — спеціалізація та створення екземплярів шаблонів в MSVC та як оптимізувати час компіляції.

Інструменти

Хвилиночка флуду

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

вот как отличный пример в продолжение темы аццкой кривости «современных проблем современного си++» тема за «classic LICM failure in practice: strlen» в это месте

wolchok.org/...​d-compiler-optimizations

даётся код

#include <cctype>
#include <cstring>

bool isUpperCase(const char *s) {
  for (int ii = 0; ii < strlen(s); ++ii) {
    if (!isupper(s[ii])) {
      return false;
    }
  }
  return true;
}

но ожидается что условие в цикле ii < strlen(s); «будет оптимизировано до единоразового вызова» омг но почему кому это вообще пришло в голову и как по их мнению это вообще должно работать и что делать потом когда компилятор начнёт «оптимизировать» вызов который именно написан таким чтобы вызываться за каждым циклом а ну да давайте введём __attribute__((nolicm)) и сразу всем щасте и никто не уйдёт безнаказаным

хотя да эти рассуждения применимы для ranged for потому что там begin/end есть выражениями и из упрощённого синтаксиса (за что и боролись) всё не так однозначно где именно они будут вызваны

все эти современные «инженеры фхтанг» обладают общим качеством какой-то просто потрясающей бес полезностью

А чому воно не може бути оптимізоване?

Я б писав const char * const s;

первыйна собачке лайк остальное удоли ))

ЗЫ: тему с co_await synchronization objects читал многа думал ничо не понял с одной стороны кагбэ стандарт корутины вот это всё т.е. лично я предполагал раз стандард то просто берёшь готовое скаропки с другой стороны какая ацкая туча движений левой задней ногой в самодельной закате солнца вручную зачем? в этом месте я сильно больше понимаю гоферов и ко. которые смотрят на всё это большими большими глазами и не понимают и лично я тоже не понимаю как получается что большая часть modern c++ не направлена на решение каких-либо конкретных практических задач вот скажем тема Name Lookup отлично на это ложится смотришь в код видишь это ага давайте порешаем но стоп стоп стоп а зачем вообще так писать!? селяви селяплюсы ))

Не могли бы вы, пожалуйста расшифровать данный комментарий? Безумно интересно, но ничего не понятно.

Підписатись на коментарі