Чуть больше чем месяц остался до нашей встречи и мы рады познакомить вас с одним из запланированных докладов: Илья Быконя расскажет нам, как подружить Qt и корутины!
🔥6
Корутины и Qt. Библиотека QCoro
Qt появился уже почти 30 лет назад. Хотя фреймворк и сейчас поддерживается и получает крупные обновления как от разработчиков, так и от комьюнити, его событийно-ориентированная система заставляет нас использовать вереницы коллбеков или множество вложенных лямбд и на сегодняшний день выглядит достаточно громоздко в сравнении с другими языками и даже библиотеками C++ (привет, userver).
Библиотека QCoro призвана привнести возможности корутин в событийную систему Qt и позволить избежать описания лишнего кода, одноразовых функций и логики перекладывания данных из метода в метод.
Библиотека не ломает обратную совместимость. Все старые классы, по типу QNetworkManager, QFuture или классов IO-системы полностью совместимы с QCoro. Достаточно лишь заменить QObject::connect с коллбеком на co_await и узреть магию.
При этом библиотека надёжна и признана мировым сообществом. Например, она входит в официальные репозитории (extra) для Manjaro Linux, а значит, проходит несколько этапов проверок прежде, чем попасть в эти репозитории.
Qt появился уже почти 30 лет назад. Хотя фреймворк и сейчас поддерживается и получает крупные обновления как от разработчиков, так и от комьюнити, его событийно-ориентированная система заставляет нас использовать вереницы коллбеков или множество вложенных лямбд и на сегодняшний день выглядит достаточно громоздко в сравнении с другими языками и даже библиотеками C++ (привет, userver).
Библиотека QCoro призвана привнести возможности корутин в событийную систему Qt и позволить избежать описания лишнего кода, одноразовых функций и логики перекладывания данных из метода в метод.
Библиотека не ломает обратную совместимость. Все старые классы, по типу QNetworkManager, QFuture или классов IO-системы полностью совместимы с QCoro. Достаточно лишь заменить QObject::connect с коллбеком на co_await и узреть магию.
При этом библиотека надёжна и признана мировым сообществом. Например, она входит в официальные репозитории (extra) для Manjaro Linux, а значит, проходит несколько этапов проверок прежде, чем попасть в эти репозитории.
🔥9
#digest
Подборка самых интересных новостей и материалов из мира C++ за последние две недели (2 октября – 15 октября 2023)
Читать далее на Хабре
Подборка самых интересных новостей и материалов из мира C++ за последние две недели (2 октября – 15 октября 2023)
Читать далее на Хабре
❤🔥6❤3👍1🔥1
Ровно месяц остался до нашей встречи! И мы не можем не представить оставшийся запланированный доклад: Дмитрий Косенко расскажет и покажет, как паттерны проектирования применяются в реальном коде. На примере ClickHouse!
🔥9
ООП в ClickHouse
Паттерны проектирования. О них все слышали, их все используют (надеемся). А давайте посмотрим на них в реальном проекте? Как они помогают понизить связанность компонентов и реализовать принцип SOLID? Как помогают разобраться в незнакомом коде?
В докладе мы разберём использование объектно-ориентированных паттернов не в простом веб-приложении, а в СУБД. Это один из самых известных C++ проектов с открытым исходным кодом — ClickHouse
Паттерны проектирования. О них все слышали, их все используют (надеемся). А давайте посмотрим на них в реальном проекте? Как они помогают понизить связанность компонентов и реализовать принцип SOLID? Как помогают разобраться в незнакомом коде?
В докладе мы разберём использование объектно-ориентированных паттернов не в простом веб-приложении, а в СУБД. Это один из самых известных C++ проектов с открытым исходным кодом — ClickHouse
🔥9
Finally!
В CMake (3.28+) наконец-то реализовали поддержку модулей!
Кроме новейшего CMake вам также потребуются новейшие компиляторы: msvc 14.34+, clang 16+, gcc 14+
Подробнее по ссылке
В CMake (3.28+) наконец-то реализовали поддержку модулей!
Кроме новейшего CMake вам также потребуются новейшие компиляторы: msvc 14.34+, clang 16+, gcc 14+
Подробнее по ссылке
🔥10
#meetup
⠀Наш митап состоится уже через 4 недели, 19 ноября (Вс) с 15:20 до 18:00 по адресу Москва, Малый Конюшковский переулок, д. 2 (оффлайн + онлайн трансляция докладов), и мы готовы огласить список запланированных активностей:
1. Доклад: Корутины и Qt. Библиотека QCoro
2. Доклад: ООП в ClickHouse
3. Конкурс по мотивам C++ Quiz
И, конечно, вас будут ждать вкусные напитки и интересное общение 😉
Если вы планируете посетить мероприятие оффлайн, то вам необходимо зарегистрироваться на него по ссылке, иначе вы не сможете на него попасть.
Остались вопросы? Пишите в комментарии, на все ответим!
⠀Наш митап состоится уже через 4 недели, 19 ноября (Вс) с 15:20 до 18:00 по адресу Москва, Малый Конюшковский переулок, д. 2 (оффлайн + онлайн трансляция докладов), и мы готовы огласить список запланированных активностей:
1. Доклад: Корутины и Qt. Библиотека QCoro
2. Доклад: ООП в ClickHouse
3. Конкурс по мотивам C++ Quiz
И, конечно, вас будут ждать вкусные напитки и интересное общение 😉
Если вы планируете посетить мероприятие оффлайн, то вам необходимо зарегистрироваться на него по ссылке, иначе вы не сможете на него попасть.
Остались вопросы? Пишите в комментарии, на все ответим!
Leader-ID
С++ Moscow №2
Бесплатные мероприятия и коворкинги в вашем городе. Leader-ID помогает работать, учиться и находить единомышленников.
🔥9👍2
#proposals #resources
Возвращаясь к интересным новостям: недавно комитет по стандартизации C++ опубликовал предложенные за последний месяц пропозалы.
Из наиболее примечательного:
1. Продолжение работы над std::hive: был обновлен раздел, касающийся
2. С учётом всех замечаний LEWG был обновлен P0876 fiber_context - fibers without scheduler, прокладывающий более широкий путь в наше светлое корутинное будущее: в частности, предлагающий базовые абстракции для реализации stackful корутин.
3. Виктор Зверович, известный продвижением std::format в стандарт, всё не находит покой, и теперь предлагает аналогичные безопасные функции, испольщующие все прелести
А какие из этих пропозалов кажутся наиболее интересными вам? Или каких полезных фич, по вашему мнению, в этом списке не хватает? Присоединяйтесь к обсуждению в комментариях!
Возвращаясь к интересным новостям: недавно комитет по стандартизации C++ опубликовал предложенные за последний месяц пропозалы.
Из наиболее примечательного:
1. Продолжение работы над std::hive: был обновлен раздел, касающийся
constexpr; внесено множество изменений в описание асимптотической сложности операций.2. С учётом всех замечаний LEWG был обновлен P0876 fiber_context - fibers without scheduler, прокладывающий более широкий путь в наше светлое корутинное будущее: в частности, предлагающий базовые абстракции для реализации stackful корутин.
3. Виктор Зверович, известный продвижением std::format в стандарт, всё не находит покой, и теперь предлагает аналогичные безопасные функции, испольщующие все прелести
constexpr, но для разбора строк:if (auto result = std::scan<std::string, int>("answer = 42", "{} = {}")) {
const auto& [key, value] = result->values();
// key == "answer", value == 42
}
И дальше, более коротким, но далеко не исчерпывающим списком: Contracts for C++ (ставящий высокую цель наконец-то ввести в язык аннотации контрактов); A New Approach For Compiling C++ (захватывающий дух бенчмарками, показавшими увеличение скорости компиляции на 25–40%); optional<T&> (намеренное заделать ранее намеренно оставленную брешь), Reflection for C++26 (упрощающий рефлексию максимально, чтобы у нее был шанс пройти в C++26), Low-Level Integer Arithmetic (предлагающий не влекущие UB библиотечные функции для выполнения базовых арифметических операций) и UFCS (описывающий единый синтаксис вызовов функций и методов)А какие из этих пропозалов кажутся наиболее интересными вам? Или каких полезных фич, по вашему мнению, в этом списке не хватает? Присоединяйтесь к обсуждению в комментариях!
🔥10
#cpp23 #clang
Хорошие новости! В clang 18 наконец-то реализовали P0847R7 Deducing this. Однако пока что только в экспериментальном режиме: макрос
Что это нововведение нам даёт? Если раньше мы хотели реализовать один метод с четырьмя разными ref-квалификаторами, то нам приходилось так или иначе писать практически один и тот же код четырежды. (см. пикрелейтед)
Теперь же мы можем избежать необходимости подобного дублирования, подчинив для этого привычный механизм выведения типов:
Хорошие новости! В clang 18 наконец-то реализовали P0847R7 Deducing this. Однако пока что только в экспериментальном режиме: макрос
__cpp_explicit_this_parameter в этом версии установлен не былЧто это нововведение нам даёт? Если раньше мы хотели реализовать один метод с четырьмя разными ref-квалификаторами, то нам приходилось так или иначе писать практически один и тот же код четырежды. (см. пикрелейтед)
Теперь же мы можем избежать необходимости подобного дублирования, подчинив для этого привычный механизм выведения типов:
template <typename Self>
constexpr auto&& value(this Self&& self) {
if (!self.has_value()) {
throw bad_optional_access();
}
return forward<Self>(self).m_value;
}
Более подробно про deducing this в статье по ссылке🔥7👍2
#digest
Подборка самых интересных новостей и материалов из мира C++ за последние две недели (16 октября – 29 октября 2023)
Читать далее на Хабре
Подборка самых интересных новостей и материалов из мира C++ за последние две недели (16 октября – 29 октября 2023)
Читать далее на Хабре
🔥5
#resources #education #courses
Плюсовиками не рождаются, плюсовиками становятся. И наше сообщество радо помочь всем в этом становлении нашей новой рубрикой: учебные материалы (#education).
C++ базовый курс, MIPT, 2021-2022 (Константин Владимиров)
Если с чего и начинать — то с одного из самых популярных и объективно лучших русскоязычных базовых курсов по C++. Он не рассчитан на абсолютных новичков: предполагается начальное понимание C, но очень хорошо структурирован: изложение методично идет от таких базовых понятий как указатели и ссылки до метапрограммирования,
Так что он может быть полезен не только начинающим, но и всем желающим освежить память и структурировать свое понимание плюсов.
Список ссылок: канал, плейлист (youtube), слайды
Плюсовиками не рождаются, плюсовиками становятся. И наше сообщество радо помочь всем в этом становлении нашей новой рубрикой: учебные материалы (#education).
C++ базовый курс, MIPT, 2021-2022 (Константин Владимиров)
Если с чего и начинать — то с одного из самых популярных и объективно лучших русскоязычных базовых курсов по C++. Он не рассчитан на абсолютных новичков: предполагается начальное понимание C, но очень хорошо структурирован: изложение методично идет от таких базовых понятий как указатели и ссылки до метапрограммирования,
constexpr функций и концептов (кроме того, в курсе есть отдельные лекции, посвященные OpenGL, Vulkan, LLVM); глубок и блестяще, интересно и нескучно изложен.Так что он может быть полезен не только начинающим, но и всем желающим освежить память и структурировать свое понимание плюсов.
Список ссылок: канал, плейлист (youtube), слайды
🔥8👍4🤡3❤1
#conferences
Бувально на днях стали известны даты и началась продажа билетов на C++ Russia 2024, крупнейшую российскую конференцию для C++ разработчиков. Ее онлайн часть пройдет 15 мая, а оффлайн (с трансляцией докладов) 22-23 мая в Москве. Темы докладов пока что неизвестны: прием заявок на них был только открыт, но покупку билетов лучше не откладывать — мало того, что они не из дешевых, так и каждый месяц дорожают, причем довольно существенно. И хорошо, если вам их сможет оплатить работодатель, но если это не вариант — с промокодом
А были ли вы на какой-нибудь из прошлых конференций C++ Russia, и планируете ли посетить C++ Russia 2024?
Бувально на днях стали известны даты и началась продажа билетов на C++ Russia 2024, крупнейшую российскую конференцию для C++ разработчиков. Ее онлайн часть пройдет 15 мая, а оффлайн (с трансляцией докладов) 22-23 мая в Москве. Темы докладов пока что неизвестны: прием заявок на них был только открыт, но покупку билетов лучше не откладывать — мало того, что они не из дешевых, так и каждый месяц дорожают, причем довольно существенно. И хорошо, если вам их сможет оплатить работодатель, но если это не вариант — с промокодом
CPPRussiaAttendeePV вы можете купить билет со скидкой 25%.А были ли вы на какой-нибудь из прошлых конференций C++ Russia, и планируете ли посетить C++ Russia 2024?
👍9🔥4😐1
#meetup
Наш второй митап состоится уже чуть меньше чем через две недели, 19 ноября (Вс) с 15:20 до 18:00 по адресу Москва, Малый Конюшковский переулок, д. 2 (оффлайн + онлайн трансляция докладов)
Запланированные активности:
1. Доклад: Корутины и Qt. Библиотека QCoro
2. Доклад: ООП в Clickhouse
3. Конкурс по мотивам C++ Quiz
И, конечно, вас будут ждать вкусные напитки и интересное общение 😉
Напоминаем, что если вы планируете посетить его очно — вам необходимо зарегистрироваться на него по ссылке.
Регистрируйтесь и приходите на наш митап, будет классно!
Наш второй митап состоится уже чуть меньше чем через две недели, 19 ноября (Вс) с 15:20 до 18:00 по адресу Москва, Малый Конюшковский переулок, д. 2 (оффлайн + онлайн трансляция докладов)
Запланированные активности:
1. Доклад: Корутины и Qt. Библиотека QCoro
2. Доклад: ООП в Clickhouse
3. Конкурс по мотивам C++ Quiz
И, конечно, вас будут ждать вкусные напитки и интересное общение 😉
Напоминаем, что если вы планируете посетить его очно — вам необходимо зарегистрироваться на него по ссылке.
Регистрируйтесь и приходите на наш митап, будет классно!
Leader-ID
Встреча московского сообщества программистов на C++
Бесплатные мероприятия и коворкинги в вашем городе. Leader-ID помогает работать, учиться и находить единомышленников.
🔥5❤2
#quiz
Корректен ли код, приведенный ниже? Делитесь своими мыслями в комментариях! Правильный ответ и его объяснение будут опубликованы в 18:00 по Москве.
Корректен ли код, приведенный ниже? Делитесь своими мыслями в комментариях! Правильный ответ и его объяснение будут опубликованы в 18:00 по Москве.
void f()
{
std::mutex m;
for (int x : static_cast<void>(std::scoped_lock{m}), std::vector<int>{42, 17, 13})
{
std::scoped_lock guard{m};
}
}🔥5
Корректен ли код выше?
Anonymous Poll
35%
Абсолютно корректен
33%
Нет, в нем неопределенное поведение
35%
Вы что, он вообще не скомпилируется!
#quiz #explanation #cpp23
Конечно, это очень странный код и писать подобное в проде недопустимо. Но если говорить о его нормативном статусе, то тут есть нюансы.
В C++20 этот код корректен: согласно [ class.temporary#6 ], время жизни , являющегося временным объектов, продлевается до конца цикла , так что мы можем безопасно по нему итерироваться. Временный же объект создается и сразу уничтожается: для него не применимо ни одно из правил продления жизни.
В C++23 же существующее поведение было изменено: P2644R1 добавил в стандарт следующий пункт:
> There arethree four contexts in which temporaries are destroyed at a different point than the end of the full-expression. ...
> The fourth context is when a temporary object other than a function parameter object is created in the for-range-initializer of a range-based for statement. If such a temporary object would otherwise be destroyed at the end of the for-range-initializer full-expression, the object persists for the lifetime of the reference initialized by the for-range-initializer.
То есть, теперь времена жизни всех (за незначительными исключениями) объектов, созданных в инициализаторе range-based for, продлеваются до конца цикла. Так что если рассматривать приведенный выше код: мы создаем временный объект , чье время жизни продлевается до конца цикла; после чего создаем временный объект , время жизни которого продлевается так же; и дальше в цикле на первой же итерации создаем новый объект , захватывающий мьютекс, который уже был захвачен предыдущим — и тем самым получаем состояние взаимной блокировки (deadlock), которое стандартом определяется как неопределенное поведение.
В C++20 этот код корректен: согласно [
std::vector<int>{42, 17, 13}forstd::scoped_lock{m}В C++23 же существующее поведение было изменено:
> There are
> The fourth context is when a temporary object other than a function parameter object is created in the for-range-initializer of a range-based for statement. If such a temporary object would otherwise be destroyed at the end of the for-range-initializer full-expression, the object persists for the lifetime of the reference initialized by the for-range-initializer.
То есть, теперь времена жизни всех (за незначительными исключениями) объектов, созданных в инициализаторе range-based for, продлеваются до конца цикла. Так что если рассматривать приведенный выше код: мы создаем временный объект
std::scoped_lock{m}std::vector<int>{42, 17, 13}std::scoped_lock guard{m}std::scoped_lock❤3👍3🔥1
#resources #books #optimization
Optimizing software in C++. An optimization guide for Windows, Linux, and Mac platforms (Agner Fog)
Один из наиболее исчерпывающих трудов, посвященных оптимизации программ на C++, рассматривающий как общие вопросы: что вообще в типичном приложении больше всего жрёт? Так и более частные (не исчерпывающиеся приведенными далее): во сколько на самом деле нам обходится использование различных конструкций C++? Какие компиляторы какие оптимизации умеют делать и как мы можем помочь им лучше соптимизировать наш код?
Как мы можем оптимизировать доступ к памяти? Как писать код так, чтобы он мог автоматически векторизоваться компилятором?
При этом автор самостоятельно знакомит читателя (ожидая от него лишь хорошее понимание C++) со всем необходимым понятийным аппаратом: как работает предсказатель ветвлений, как в процессорах организованы кэши — всё это объясняется очень доступно, так что Optimizing software in C++ можно порекомендовать всем: если вам не безразличен performance ваших программ — в этой книге вы точно найдете что-то новое и полезное
Скачать
Optimizing software in C++. An optimization guide for Windows, Linux, and Mac platforms (Agner Fog)
Один из наиболее исчерпывающих трудов, посвященных оптимизации программ на C++, рассматривающий как общие вопросы: что вообще в типичном приложении больше всего жрёт? Так и более частные (не исчерпывающиеся приведенными далее): во сколько на самом деле нам обходится использование различных конструкций C++? Какие компиляторы какие оптимизации умеют делать и как мы можем помочь им лучше соптимизировать наш код?
Как мы можем оптимизировать доступ к памяти? Как писать код так, чтобы он мог автоматически векторизоваться компилятором?
При этом автор самостоятельно знакомит читателя (ожидая от него лишь хорошее понимание C++) со всем необходимым понятийным аппаратом: как работает предсказатель ветвлений, как в процессорах организованы кэши — всё это объясняется очень доступно, так что Optimizing software in C++ можно порекомендовать всем: если вам не безразличен performance ваших программ — в этой книге вы точно найдете что-то новое и полезное
Скачать
🔥14
C++ Moscow
#meetup ⠀Наш митап состоится уже через 4 недели, 19 ноября (Вс) с 15:20 до 18:00 по адресу Москва, Малый Конюшковский переулок, д. 2 (оффлайн + онлайн трансляция докладов), и мы готовы огласить список запланированных активностей: 1. Доклад: Корутины и Qt.…
#meetup
Наше последнее напоминание 😉
C++ Moscow №2 пройдет уже на этой неделе, и если вы собираетесь посетить его очно и ещё не зарегистрировались — самое время это сделать, иначе вы не сможете попасть на митап.
Если же вы планируете участвовать онлайн — регистрироваться не нужно, трансляция пройдет на нашем YouTube канале.
Наше последнее напоминание 😉
C++ Moscow №2 пройдет уже на этой неделе, и если вы собираетесь посетить его очно и ещё не зарегистрировались — самое время это сделать, иначе вы не сможете попасть на митап.
Если же вы планируете участвовать онлайн — регистрироваться не нужно, трансляция пройдет на нашем YouTube канале.
🔥9
#meetup
Так как наш митап пройдет уже в это воскресенье, мы делимся подробностями для всех, зарегистрировавшихся на него для посещения оффлайн!
C++ Moscow №2 пройдет 19 ноября (Вс) с 15:20 до 18:00 на площадке Точки кипения (Малый Конюшковский переулок, 2), добраться до которой проще всего по Таганско-Краснопресненской (фиолетовой) или Кольцевой (коричневой) линии: до Баррикадной или Краснопресненской соответственно (см. прикрепленные фотографии).
Парковки рядом с площадкой присутствуют, но только платные (от 380 рублей за час и выше).
На самой площадке будет доступен гардероб, кулеры с водой и уборные
Ждём вас на C++ Moscow №2! Если остались вопросы, не стесняйтесь, спрашивайте, с удовольствием ответим на них в комментариях!
Так как наш митап пройдет уже в это воскресенье, мы делимся подробностями для всех, зарегистрировавшихся на него для посещения оффлайн!
C++ Moscow №2 пройдет 19 ноября (Вс) с 15:20 до 18:00 на площадке Точки кипения (Малый Конюшковский переулок, 2), добраться до которой проще всего по Таганско-Краснопресненской (фиолетовой) или Кольцевой (коричневой) линии: до Баррикадной или Краснопресненской соответственно (см. прикрепленные фотографии).
Парковки рядом с площадкой присутствуют, но только платные (от 380 рублей за час и выше).
На самой площадке будет доступен гардероб, кулеры с водой и уборные
Ждём вас на C++ Moscow №2! Если остались вопросы, не стесняйтесь, спрашивайте, с удовольствием ответим на них в комментариях!
🔥9👍1
#meetup
Митап стартует уже сегодня в 15:20 (именно в 15:20, не в 14:30, как написано в LeaderID) и мы ждём всех: как онлайн-участников, так и тех, кто успел зарегистрироваться для посещения оффлайн!
15:20–18:00, Малый Конюшковский переулок, д. 2 (1 этаж)
Все дальнейшие обновления касательно нашей встречи будут публиковаться в комментариях к этой записи.
Так что заходите в наш чат, чтобы ничего не пропустить!
Митап стартует уже сегодня в 15:20 (именно в 15:20, не в 14:30, как написано в LeaderID) и мы ждём всех: как онлайн-участников, так и тех, кто успел зарегистрироваться для посещения оффлайн!
15:20–18:00, Малый Конюшковский переулок, д. 2 (1 этаж)
Все дальнейшие обновления касательно нашей встречи будут публиковаться в комментариях к этой записи.
Так что заходите в наш чат, чтобы ничего не пропустить!
🔥7