this->notes.
4.54K subscribers
35 photos
1 file
371 links
О разработке, архитектуре и C++.

Tags: #common, #cpp, #highload и другие можно найти поиском.
Задачки: #poll.
Мои публикации: #pub.
Автор и предложка: @vanyakhodor.
GitHub: dasfex.
Download Telegram
#cpp #proposals
Ещё немножко предложений, принятых в С++23 (и не только).

1. Литерал z для преобразования чисел в size_t: wg21.link/p0330 .
2. any_invocable -- move-only std::function: wg21.link/p0288 .
3. #embed -- #include for binary data: wg21.link/p1967 .
4. |> -- новый неперегружаемый оператор для цепочки функций: wg21.link/p2011 .
5. Поддержка инструментов для работы с линейной алгеброй в библиотеке: wg21.link/p1385r0 .
6. std::colony или std::hive: wg21.link/p0447r4 .
7. allocate_with_size для аллокаторов: wg21.link/p0401r1 .
8. Postfix fold expressions: wg21.link/p2355r0 .
9. Argument type deduction for non-trailing parameter packs: wg21.link/p2347r2 .
10. Гарантированное copy elision для named return objects: wg21.link/p2025r0 .
11. Статическая рефлексия: wg21.link/p2320r0 .
👍21
#list

1. В последней статье на хабре я писал про sparse set и приводил ссылку на реализацию в folly. Правда он был insert-only. Но ведь одна из его фишек именно в том, что его можно быстро чистить. Потому решил закоммитить это счастье (впервые что-то на кодерском коммичу в чужие репозитории; раньше коммитил в какие-то опенсорс сайтики: англ e-maxx и несколько других про алгоритмы). У меты интересный флоу работы с пр-ами: подписать какое-то соглашение (вроде норм), увидеть упавшие билды (мастер тоже не собирается), ревью, после чего твой пр они переносят во внутреннюю экосистему, где двое суток что-то собирается, и потом закрывают пр и видимо мержат опенсорсную версию folly и внутреннюю. Необычно.
Ещё у меня есть коммит в userver, но честно говоря, не коммит а параша)

2. Недавно увидел фичу на ютубе (хотя есть она давно): если навести на таймлайн видео, над красно-серой полоской будет полупрозрачная серая полоса, похожая на рельеф холмов в профиль. Это частота просмотров различных частей видео. Не знаю, как это реализовано, но, думаю, можно с использованием t-digest. Эта структура данных позволяет относительно дёшево хранить распределения величин. В ней у вас есть какое-то количество центроидов (центроид == диапазон значений + их количество в этом диапазоне). Если при просмотре пользователь задел диапазон, увеличиваете счётчик в центроиде для этого диапазона, после чего можете сгладить эти значения для красивого отображения.
Ещё такую структуру можно использовать для подсчёта перцентилей какой-то метрики. Например для промежутка от 0 до 100 процентов взять 200 центроидов и для любого значения (p50, p95, p98) брать префиксную сумму значений центроидов по этой метрике. Такая сд и реализуется не прям сложно, и является довольно информативной (особенно учитывая, что абсолютная точность вам не нужна).

3. Тут окончили обсуждать C23 (да, C; не C++). На первый взгляд выглядит, как будто C начинает местами догонять — и даже обгонять — плюсы, но мы-то знаем, что пропасть бесконечна…
Вот часть того, что комитет решил добавить в C23 (более полный список можете найти тут):
- #embed — возможность получать данные из внешних файлов на компиляции. По опыту go (go:embed) это и код экономит, и пользователя в рантайме не задевает. Удобно. В плюсах такое тоже тащат (последнее обновление было 20ого апреля);
- __has_include, который подъехал в C++20;
- гарантированное two’s complement для представления чисел;
- несколько новых директив препроцессора: #warning, #elifdef, #elifndef;
- уже знакомые из плюсов атрибуты: [[deprecated]], [[fallthrough]], [[maybe_unused]], [[nodiscard]] и [[noreturn]];
- realloc() с нулевым размером запрашиваемой памяти становится undefined behaviour (Andrei Alexandrescu на одном из докладов на CppCon сказал, что всего два человека в мире знают, когда правильно эту функцию использовать, похехал). Интересно, что такое изменение позволяет делать🤔;
- nullptr;
- немного прокачали енамы;
- constexpr;
- всякие литералы для чисел, разделитель разрядов как в плюсах, удаление триграфов (давно пора, хотя мы когда-то чуть-чуть так лабы в универе обфусцировали), auto (но я не нашёл пруфов, только на reddit писали) и ещё много всего.


Факт, что принимающая ноль аргументов в C функция должна помечаться void довольно известный:

int f(void) {}

Но я никогда не думал, что будет, если написать в плюсовом стиле:

int f() {}

Такая функция принимает любое число аргументов, но работать с ними как с VA_ARGS не получится: для этого нужно иметь хотя бы один аргумент. Например так:

void f(int numargs, ...) {}
👍71
#cpp

Сходил на встречу российской РГ21. Накидаю инфы (что-то вы уже видели, но лишним, думаю, не будет).

В C++23:

- починили некорректные срабатываения static_assert(false):

if constexpr (constexpr_condition) {

} else {
static_assert(false, “message”);
}


- починили range based for. Link на proposal;
- добавили static operator[] (в записи приконый пример с таким оператором для енамов);
- монадические операции для std::expected;
- дополнения к алгоритмам ranges (например эффективная итерация по ключам/значениям мап и много другого), но из-за этого ренджи из 23его стандарта сильно несовместимы с ренджами из 20ого. Не оч понятно, что это значит. Подождём и потрогаем;
- std::stacktrace и std::print;
- constexpr много всего (например std::unique_ptr).

С++26:

Пока глобально планируется примерно вот так:
- library support for coroutines;
- executors;
- networking;
- pattern matching;
- reflection;
- и всякие другие штуки.

Конкретно:
- #embed (емнип приехал из C23);
- пытаются пропихнуть std::get для агрегатов;
- stacktrace for exceptions в комитете приняли с вопросами, будут поправлять;
- ABI ломать пока не будут, незачем, говорят.

Хех. Прикиньте, С++23 это вот в этом году. А мы только недавно на 20й стандарт перешли🥴🥴🥴
👍8🔥2
Антон Полухин выложил статью про новинки в C++26: C++26 — встреча ISO в Хагенберге.

Из новых фич к нам подъехали:
- std::hive (пейпер P0447 пережил 28 ревизий и наконец сложился)
- constexpr all the things (покрыли ещё пару кусков стандартной либы)
- #embed
- контракты и другие движения в сторону увеличения безопасности нашего кода
- честный relocate для некоторых типов
- и другое: simd, новые алгоритмы и другие приколюхи.

Осталось дождаться это счастье в компиляторах👉👈

А ещё 25 марта пройдёт встреча РГ21 по C++. Встречу проведёт Антон. Можно обсудить новости последней встречи комитета по стандартизации, задать вопросы и получить на них ответы и потусоваться на афтерпати после : )

Онлайн и оффлайн, Москва.

Регистрация тут.
🔥21👍4🌚3