Новости с полей ISO C++.
Модули и Корутины теперь официально в C++20!
Upd1: доступен trip-report: https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/
#cpp #news #update #coro #modules
Модули и Корутины теперь официально в C++20!
Upd1: доступен trip-report: https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/
#cpp #news #update #coro #modules
Reddit
From the cpp community on Reddit
Explore this post and more from the cpp community
Forwarded from pro.cxx Channel (Alex Ф-ф-фэils!🌠︙)
Подоспел отчет о поездке от Антона Полухина на заседание комитета ISO C++ в Коне (Гавайи).
https://habr.com/ru/company/yandex/blog/438864/
#cpp #trip_report
https://habr.com/ru/company/yandex/blog/438864/
#cpp #trip_report
Хабр
Feature freeze C++20. Coroutines, Modules и прочее
На днях прошла встреча международного комитета по стандартизации C++ в американском городе Кона. Это была не просто встреча, а feature freeze! Никакие серьёзные новые идеи больше не могут...
Подоспел отчет о поездке РГ21 в комитет стандартизации C++:
https://habr.com/ru/company/yandex/blog/458938/
#cpp #wg21 #yandex #tripreport
https://habr.com/ru/company/yandex/blog/458938/
#cpp #wg21 #yandex #tripreport
Хабр
C++20 укомплектован, C++23 начат. Итоги встречи в Кёльне
На днях прошла встреча международного комитета по стандартизации C++ в Кёльне. В прошлый раз был принят feature freeze на C++20, так что комитет должен был обсуждать только исправления уже принятых...
Forwarded from pro.cxx Channel (Alex Ф-ф-фэils!🌠︙)
Отчёт о последней встрече международного комитета по C++ https://habr.com/ru/company/yandex/blog/474716/
#cpp #iso #wg21 #trip_report
#cpp #iso #wg21 #trip_report
Хабр
Баги C++20. Итоги встречи в городе Белфаст
На днях прошла встреча комитета по стандартизации языка программирования C++ в городе Белфасте. От представителей стран в комитет прилетело около 400 замечаний к...
Вот почему GCC [*и другие C++-компиляторы - Ред.] так долго компилируют код.
https://twitter.com/gf_256/status/1285217798642454531
#cpp #objection
https://twitter.com/gf_256/status/1285217798642454531
#cpp #objection
X (formerly Twitter)
cts🌸 (@gf_256) on X
So THIS is why gcc is so slow!
Компилятор языка BrainFuck на шаблонах C++.
Для запуска программы вам надо сделать стрелковой литерал вида "++++++++++>>>"_brain_fuck с вашей программой на BrainFuck, а потом , добавить в вашу программу на C++ приложенный исходник.
P.S. Давно хотел сам сделать, но как обычно, есть уже другой, кто это запилил🤷♂.
https://github.com/netcan/recipes/blob/master/cpp/metaproggramming/brain_fuck/BrainFuckTemplateMeta.cpp
#cpp #упрлс #принесли
Для запуска программы вам надо сделать стрелковой литерал вида "++++++++++>>>"_brain_fuck с вашей программой на BrainFuck, а потом , добавить в вашу программу на C++ приложенный исходник.
P.S. Давно хотел сам сделать, но как обычно, есть уже другой, кто это запилил🤷♂.
https://github.com/netcan/recipes/blob/master/cpp/metaproggramming/brain_fuck/BrainFuckTemplateMeta.cpp
#cpp #упрлс #принесли
GitHub
netcan/recipes
Here is my code snippet. Contribute to netcan/recipes development by creating an account on GitHub.
Forwarded from pro.cxx Channel (Alex Ф-ф-фэils!🌠︙)
Вышел очередной отчёт от Герба Саттера об осенней встрече комитета ISO C++. Эта встреча была проведена в формате виртуального заседания, и на ней обсуждали предложения в новый стандарт C++23, а также успели адаптировать несколько новых возможностей. Вот некоторые из них:
1. Наконец-то наше предложение о добавлении стектрейсов попало в стандарт!
2. Теперь вы можете проверять наличие подстроки в строке с помощью метода string.contains() вместо громоздкой старой версии
3. Литеральный суффикс для std::size_t:
4. Ещё одно свойство типа is_scoped_enum, позволяющее узнать, создает ли перечисление свою область видимости (т.е. , определено как
5. Адаптация атомиков из Си в C++.
Также приятной новостью стало создание новой учебной группы – SG22 – которая будет заниматься взаимодействием между рабочей группой 21, отвечающей за язык C++, и рабочей группой 14, отвечающей за язык Си.
Больше подробностей – по ссылке:
https://herbsutter.com/2020/11/13/trip-report-autumn-iso-c-standards-meeting-virtual/
#cpp #cpp23 #trip_report #isocpp #stacktrace
1. Наконец-то наше предложение о добавлении стектрейсов попало в стандарт!
2. Теперь вы можете проверять наличие подстроки в строке с помощью метода string.contains() вместо громоздкой старой версии
if (str.find("substr") != std::string::end) { /* found */ }. Поиск не учитывает регистр, в отличие от похожего метода в Qt.3. Литеральный суффикс для std::size_t:
42uz, схожий со спецификатором формата функции printf().4. Ещё одно свойство типа is_scoped_enum, позволяющее узнать, создает ли перечисление свою область видимости (т.е. , определено как
enum class);5. Адаптация атомиков из Си в C++.
Также приятной новостью стало создание новой учебной группы – SG22 – которая будет заниматься взаимодействием между рабочей группой 21, отвечающей за язык C++, и рабочей группой 14, отвечающей за язык Си.
Больше подробностей – по ссылке:
https://herbsutter.com/2020/11/13/trip-report-autumn-iso-c-standards-meeting-virtual/
#cpp #cpp23 #trip_report #isocpp #stacktrace
Sutter’s Mill
Trip report: Autumn ISO C++ standards meeting (virtual)
On Monday, the ISO C++ committee completed its final full-committee (plenary) meeting of 2020 and adopted the first changes to the C++23 working draft, including a few new features. This was a firs…
Forwarded from pro.cxx Channel (🐻Alex Fails🦥🏔🍓 ︙)
Очередная заметка с последнего собрания комитета C++ от Антона Полухина.
Краткий список нового в C++26:
- индексация квадратными скобками для шаблонного пакета типов:
- Запрет возврата ссылок на временные значения;
- распаковка вариадиков в структурные привязки:
- арифметика для чисел с насыщением - с ее помощью теперь можно складывать числа, не боясь (анти)переполнения - функции вернут результат в диапазоне [
- линал-функции в
- Конкатенация строк и string_view!
-
- Диагностическое сообщение для удаленных функций через
- и другие вещи, которые можно глянуть в заметке тут:
https://habr.com/ru/companies/yandex/articles/801115/
#cpp #cpp26 #online_report #isocpp #blas_and_lapack_in_cpp
Краткий список нового в C++26:
- индексация квадратными скобками для шаблонного пакета типов:
template <typename ...Ts>
decltype(auto) get_2nd_type() {
return Ts...[1];
}
- Запрет возврата ссылок на временные значения;
- распаковка вариадиков в структурные привязки:
void want_all_tuple_items(auto &tuple) {
auto &[...items] = tuple;
}- арифметика для чисел с насыщением - с ее помощью теперь можно складывать числа, не боясь (анти)переполнения - функции вернут результат в диапазоне [
numeric_limits<T>::min() numeric_limits<T>::max()]:static_assert(std::add_sat<unsigned char>(23, 666) == std::numeric_limits<unsigned char>::max())
- линал-функции в
std::linalg - с API, которое отображается на BLAS/LAPACK;- Конкатенация строк и string_view!
std::string("str") + std::string_view("_view");-
std::span.at();- Диагностическое сообщение для удаленных функций через
= delete("diagnostics");- и другие вещи, которые можно глянуть в заметке тут:
https://habr.com/ru/companies/yandex/articles/801115/
#cpp #cpp26 #online_report #isocpp #blas_and_lapack_in_cpp
Хабр
C++26 — прогресс и новинки от ISO C++
Работа в комитете по стандартизации языка C++ активно кипит. Недавно состоялось очередное заседание. Как один из участников, поделюсь сегодня с Хабром свежими новостями и описанием изменений, которые...
👍2
https://github.com/llvm/llvm-project/pull/68620
ПОСОНЫ, ТУТ #embed ВЛЕТЕЛ В ШЛАНГ, теперь заживем!
upd1: пока ревертнули, чтобы починить билдботов, но работа идет!
upd2: влили с фиксами, йее
Вкратце(нет) :
#embed - это новая директива препроцессора, позволяющая НОРМАЛЬНО добавлять бинарные файлы в ваш исходный код (пока что на языке Си, но в C++ оно тоже скоро просочится). Если вы используете какие-то бинарные данные типа картинок, сырых двоичных ключей, гуидов, и пр., то эта фича для вас, и это то, что вы ждали10 лет в Азкабане 40+ лет с момента создания сишки!
Пример кода:
Текущие подходы состоят из лютых костылей типа скриптов, которые печатают бинарь как массив; xxd; bin2c (очень распространен в определенных кругах) и прочие более-менее кривые (или) нет скрипты на ваших любимых языках оболочки типа cmd/bash/fish/python.
Эта бумага пережила 12 ревизий и готовилась примерно 5-6 лет!!! (включая прошлую версию, в которой также был
Автор потратил кучу нервов и сил (почитать его слезы и посочувствовать можно в его блоге здесь (обзор и бенчмарки - [1]), здесь (подход с языком Circle и бенчмарки - [2]) здесь (заметки для критиков - [3]), здесь (заметка о том, что принято в C23 и будет поэтому в C++26 - [4])). Его долго пинали в комитетах, то говорили, что это будет медленно работать (бенчмарки показали обратное, см. ниже), то говорили, чтобы он придумал "более generic"-подход, в стиле языка Circle, который, грубо говоря, является C++ с возможностью выполнять любой код на этапе компиляции, главное, пометить блок/функцию собачкой (@).
Бенчмарки из статьи [2] выглядят так:
Теперь эта фича уже точно будет в Clang 19 (кому не терпится, соберите текущий
Поздравляю автора с этим достижением, и просто убеждаюсь, что в каждом меме есть доля шутки 😢
#длиннопостик #cpp #std_embed #thephd
ПОСОНЫ, ТУТ #embed ВЛЕТЕЛ В ШЛАНГ, теперь заживем!
upd1: пока ревертнули, чтобы починить билдботов, но работа идет!
upd2: влили с фиксами, йее
Вкратце
#embed - это новая директива препроцессора, позволяющая НОРМАЛЬНО добавлять бинарные файлы в ваш исходный код (пока что на языке Си, но в C++ оно тоже скоро просочится). Если вы используете какие-то бинарные данные типа картинок, сырых двоичных ключей, гуидов, и пр., то эта фича для вас, и это то, что вы ждали
Пример кода:
// firmware_sound.c
const char wave_buf[] =
#embed "notification.wav"
; // добавим бинарный файл сразу в прошивку
Текущие подходы состоят из лютых костылей типа скриптов, которые печатают бинарь как массив; xxd; bin2c (очень распространен в определенных кругах) и прочие более-менее кривые (или) нет скрипты на ваших любимых языках оболочки типа cmd/bash/fish/python.
Эта бумага пережила 12 ревизий и готовилась примерно 5-6 лет!!! (включая прошлую версию, в которой также был
std::embed - consteval-функция, которая делает то же самое, но на этапе компиляции, а не препроцессинга).Автор потратил кучу нервов и сил (почитать его слезы и посочувствовать можно в его блоге здесь (обзор и бенчмарки - [1]), здесь (подход с языком Circle и бенчмарки - [2]) здесь (заметки для критиков - [3]), здесь (заметка о том, что принято в C23 и будет поэтому в C++26 - [4])). Его долго пинали в комитетах, то говорили, что это будет медленно работать (бенчмарки показали обратное, см. ниже), то говорили, чтобы он придумал "более generic"-подход, в стиле языка Circle, который, грубо говоря, является C++ с возможностью выполнять любой код на этапе компиляции, главное, пометить блок/функцию собачкой (@).
Бенчмарки из статьи [2] выглядят так:
Методология | Время
----------------+--------------
#embed | 17 seconds
std::embed | 16 seconds
#include, |
сгенерированный | 621 seconds
xxd | (КАРЛ!!!!)
Теперь эта фича уже точно будет в Clang 19 (кому не терпится, соберите текущий
trunk и радуйтесь), в MSVC есть тикет на добавление, в GCC тоже (для нетерпеливых есть патч в тикете, можете собрать).Поздравляю автора с этим достижением, и просто убеждаюсь, что в каждом меме есть доля шутки 😢
#длиннопостик #cpp #std_embed #thephd
GitHub
✨ [Sema, Lex, Parse] Preprocessor embed in C and C++ (and Obj-C and Obj-C++ by-proxy) by ThePhD · Pull Request #68620 · llvm/llvm…
This pull request implements the entirety of the now-accepted N3017 - Preprocessor Embed and its sister C++ paper p1967. It implements everything in the specification, and includes an implementatio...
🔥7👍5
Вышел-таки релиз смака 4.0!
Авторы решились поднять мажор, чтобы подсветить изменения в обратной совместимости и аккуратно выпилить старьё времён версии 2.8.ххх, старее, и вверх до версии 3.5 - старые политики, некоторые кривые вещи, устаревшие ещё с начала 10-х годов, хотя, по изменениям релиз минорный (до февраля это был ещё релиз 3.32, жалко, что красивой цифры 3.33 мы так и не увидели).
Для поддержки сборки проектов, которые собирались на последних версиях (3.31, 3.30 и некоторых раньше) добавили переменную окружения для мейнтейнеров старья CMAKE_MINIMUM_POLICY_VERSION
, и ей надо задать версию 3.5, чтобы старые проекты не ругались на старые политики сборки, которые были удалены. Авторы смака вместе с мейнтейнерами некоторых дистров (дебиан, Федора) помогли починить кое-где сборку.
Если у вас проект, у которого стоит
Помимо этого, там:
- в рамках тикета нашли багу в LLVM, в его поддержке модулей c++20 для clang/libc++ (Там глава Kitware зачинил багу);
- Продолжают внедрять и стабилизировать CPS - декларативный формат для внешних зависимостей, которые потом будут цепляться через
- Улучшают инструментацию сборки/конфигурирования проекта (активности примерно начались с версии 3.18, когда добавили простую возможность профилирования этапа конфигурации проекта), теперь можно будет получить более детальную информацию о том, что именно подтормаживает при процессе конфигурации/сборки проектов. Формат данных - flame-graph, включить в своем проекте можно через флаги --
В четвертой версии эту вещь расширили (на сборку, линковку, кастом-шаги), написали документацию, и сделали возможность задавать свои хуки на измерения, общаться через CMake File API (используется IDE-шками для сбора ВСЕЙ метаинфы о проекте, о таргетах, исходниках и пр.). Новая фича спрятана под волшебным идентификатором
- потихоньку улучшается дока по CMake , поэтому рекомендую периодически ее посматривать - авторы за релиз обычно много всяких полезных уточнений делают/принимают от волонтеров
- на мобильных устройствах теперь левая колонка со ссылками спрятана в "бутерброд"-кнопку контекстного меню;
- старые генераторы для MSVC, которые принимали в своем имени битность архитектуры (вида "Visual Studio 2015 64") были дропнуты в пользу флага
- Теперь можно экспортировать журнал конфигурирования проекта в формат SARIF через флаг
- Началась работа над генерацией SPDX SBOM
- Пачка прочих изменений (384 мерж-реквестов было слито, и там сотни файлов и тысячи строк были дропнуты после удаления старых вещей)
- также там был влит мой "фермерский" MR с фиксом кодировки текста ошибки, который можно получать через функцию FormatMessage(), там неверно интерпретировалась строка как юникод (haha, classic).
Другие изменения (а я рассказал только про удаленные вещи и про интересные экспериментальные фичи) можно глянуть в списке изменений тут: https://cmake.org/cmake/help/v4.0/release/4.0.html
#длиннопостик #смак #cmake #cpp #cxxmodules #profiling #build
v1.1.1-2025-03-09-0046
#длиннопостик@AlexFailsChannel
Авторы решились поднять мажор, чтобы подсветить изменения в обратной совместимости и аккуратно выпилить старьё времён версии 2.8.ххх, старее, и вверх до версии 3.5 - старые политики, некоторые кривые вещи, устаревшие ещё с начала 10-х годов, хотя, по изменениям релиз минорный (до февраля это был ещё релиз 3.32, жалко, что красивой цифры 3.33 мы так и не увидели).
Для поддержки сборки проектов, которые собирались на последних версиях (3.31, 3.30 и некоторых раньше) добавили переменную окружения для мейнтейнеров старья CMAKE_MINIMUM_POLICY_VERSION
, и ей надо задать версию 3.5, чтобы старые проекты не ругались на старые политики сборки, которые были удалены. Авторы смака вместе с мейнтейнерами некоторых дистров (дебиан, Федора) помогли починить кое-где сборку.
Если у вас проект, у которого стоит
cmake_minimum_required(VERSION 3.4) и ниже - пора обновиться, желательно на 3.10. (у проектов, у которых нет этой команды вверху, лучше добавить эту команду, чтобы правильно применять политики обратной совместимости).Помимо этого, там:
- в рамках тикета нашли багу в LLVM, в его поддержке модулей c++20 для clang/libc++ (Там глава Kitware зачинил багу);
- Продолжают внедрять и стабилизировать CPS - декларативный формат для внешних зависимостей, которые потом будут цепляться через
find_package(libmeow COMPONENTS paws)- Улучшают инструментацию сборки/конфигурирования проекта (активности примерно начались с версии 3.18, когда добавили простую возможность профилирования этапа конфигурации проекта), теперь можно будет получить более детальную информацию о том, что именно подтормаживает при процессе конфигурации/сборки проектов. Формат данных - flame-graph, включить в своем проекте можно через флаги --
profiling-output=<filename> --profiling-format=google-trace, например: cmake -S . -B build --profiling-output=configure-profile.json --profiling-format=google-trace. Полученный JSON можно скормить служебной странице хромиумоподобных браузеров about:profiling, в случае с Firefox - на profiler.firefox.com. Также такие файлы понимают некоторые IDE, типа Qt Creator, vscode и пр. В четвертой версии эту вещь расширили (на сборку, линковку, кастом-шаги), написали документацию, и сделали возможность задавать свои хуки на измерения, общаться через CMake File API (используется IDE-шками для сбора ВСЕЙ метаинфы о проекте, о таргетах, исходниках и пр.). Новая фича спрятана под волшебным идентификатором
CMAKE_EXPERIMENTAL_INSTRUMENTATION. Такие идентификаторы описаны тут (там и про CPS, и про find_package() с CPS, и про import std, который все ещё не достаточно стабильный, и авторы CMake ходят фиксят/репортят баги в апстримах). Эта тема будет интересна для авторов IDE, для девопсов и тех, кому хочется найти узкие места сборки как локально, так и на CI/CD, и я, возможно, сделаю по этой теме отдельную заметочку;- потихоньку улучшается дока по CMake , поэтому рекомендую периодически ее посматривать - авторы за релиз обычно много всяких полезных уточнений делают/принимают от волонтеров
- на мобильных устройствах теперь левая колонка со ссылками спрятана в "бутерброд"-кнопку контекстного меню;
- старые генераторы для MSVC, которые принимали в своем имени битность архитектуры (вида "Visual Studio 2015 64") были дропнуты в пользу флага
-A <arch-name>- Теперь можно экспортировать журнал конфигурирования проекта в формат SARIF через флаг
--sarif-output=<file>- Началась работа над генерацией SPDX SBOM
- Пачка прочих изменений (384 мерж-реквестов было слито, и там сотни файлов и тысячи строк были дропнуты после удаления старых вещей)
- также там был влит мой "фермерский" MR с фиксом кодировки текста ошибки, который можно получать через функцию FormatMessage(), там неверно интерпретировалась строка как юникод (haha, classic).
Другие изменения (а я рассказал только про удаленные вещи и про интересные экспериментальные фичи) можно глянуть в списке изменений тут: https://cmake.org/cmake/help/v4.0/release/4.0.html
#длиннопостик #смак #cmake #cpp #cxxmodules #profiling #build
v1.1.1-2025-03-09-0046
#длиннопостик@AlexFailsChannel
🔥9❤7👍5