#cpp #proposals
Ещё немножко предложений, принятых в С++23 (и не только).
1. Литерал
2.
3.
4.
5. Поддержка инструментов для работы с линейной алгеброй в библиотеке: wg21.link/p1385r0 .
6.
7.
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 .
Ещё немножко предложений, принятых в С++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 .
👍2❤1
#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 (
-
- гарантированное two’s complement для представления чисел;
- несколько новых директив препроцессора:
- уже знакомые из плюсов атрибуты:
-
- nullptr;
- немного прокачали енамы;
- constexpr;
- всякие литералы для чисел, разделитель разрядов
Факт, что принимающая ноль аргументов в C функция должна помечаться
Но я никогда не думал, что будет, если написать в плюсовом стиле:
Такая функция принимает любое число аргументов, но работать с ними как с
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, ...) {}👍7 1
#cpp
Сходил на встречу российской РГ21. Накидаю инфы (что-то вы уже видели, но лишним, думаю, не будет).
В C++23:
- починили некорректные срабатываения
- починили range based for. Link на proposal;
- добавили
- монадические операции для
- дополнения к алгоритмам ranges (например эффективная итерация по ключам/значениям мап и много другого), но из-за этого ренджи из 23его стандарта сильно несовместимы с ренджами из 20ого. Не оч понятно, что это значит. Подождём и потрогаем;
-
-
С++26:
Пока глобально планируется примерно вот так:
- library support for coroutines;
- executors;
- networking;
- pattern matching;
- reflection;
- и всякие другие штуки.
Конкретно:
-
- пытаются пропихнуть
- stacktrace for exceptions в комитете приняли с вопросами, будут поправлять;
- ABI ломать пока не будут, незачем, говорят.
Хех. Прикиньте, С++23 это вот в этом году. А мы только недавно на 20й стандарт перешли🥴🥴🥴
Сходил на встречу российской РГ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++. Встречу проведёт Антон. Можно обсудить новости последней встречи комитета по стандартизации, задать вопросы и получить на них ответы и потусоваться на афтерпати после : )
Онлайн и оффлайн, Москва.
Регистрация тут.
Из новых фич к нам подъехали:
- std::hive (пейпер P0447 пережил 28 ревизий и наконец сложился)
- constexpr all the things (покрыли ещё пару кусков стандартной либы)
- #embed
- контракты и другие движения в сторону увеличения безопасности нашего кода
- честный relocate для некоторых типов
- и другое: simd, новые алгоритмы и другие приколюхи.
Осталось дождаться это счастье в компиляторах👉👈
А ещё 25 марта пройдёт встреча РГ21 по C++. Встречу проведёт Антон. Можно обсудить новости последней встречи комитета по стандартизации, задать вопросы и получить на них ответы и потусоваться на афтерпати после : )
Онлайн и оффлайн, Москва.
Регистрация тут.
🔥21👍4🌚3