ru
Feedback
C++ Moscow

C++ Moscow

Открыть в Telegram

Информационный канал московского сообщества программистов на C++ Чат: @cppmoscow_chat Бот обратной связи: @cppmoscow_bot Организатор: @eoanermine

Больше
302
Подписчики
Нет данных24 часа
Нет данных7 дней
Нет данных30 день

Загрузка данных...

Похожие каналы
Облако тегов
Нет данных
Возникли проблемы? Пожалуйста, обновите страницу или обратитесь к нашему support-менеджеру .
Входящие и исходящие упоминания
---
---
---
---
---
---
Привлечение подписчиков
август '24
август '24
+1
в 0 каналах
июль '24
+9
в 0 каналах
Get PRO
июнь '24
+11
в 0 каналах
Get PRO
май '24
+8
в 0 каналах
Get PRO
апрель '24
+17
в 0 каналах
Get PRO
март '24
+19
в 0 каналах
Get PRO
февраль '24
+46
в 0 каналах
Get PRO
январь '24
+39
в 0 каналах
Get PRO
декабрь '23
+38
в 0 каналах
Get PRO
ноябрь '23
+253
в 0 каналах
Дата
Привлечение подписчиков
Упоминания
Каналы
06 августа+1
05 августа0
04 августа0
03 августа0
02 августа0
01 августа0
Посты канала
Наш организаторский комитет и редакторский совет ежеденно и еженощно планирует митапы и пишет новые посты. Но ядро C++ Moscow — это вы, наши читатели и завсегдатаи наших митапов! И мы приглашаем вас стать активным членом сообщества! 1. Присылайте нам идеи для постов или сами ваши оригинальные материалы — мы их зарепостим и сохраним ваше авторство. 2. Если вы учитесь в московском ВУЗе (ССУЗе) и желаете внести свой вклад в популяризацию плюсов и развитие C++ Moscow — свяжитесь с нами! И если у вас есть любые иные идеи и предложения — не стесняйтесь, так же пишите нам! Будущее C++ Moscow в ваших руках!

2
#wg21 Их не часто видно или слышно, но они существуют! Национальная рабочая группа по стандартизации С++, РГ21 C++ Россия! Давно мечтали внести свой вклад в развитие плюсов? Изложите и обсудите свою идею с экспертами! А если вы считаете, что уже готовы написать свой пропозал — флаг вам в руки, прочтите инструкцию и начните писать; будут вопросы — члены РГ21 с радостью вам помогут. Будущее C++ в наших руках!
385
3
#practice Литкод это, конечно, хорошо.. Но одни алгоритмические задачи очень быстро наскучивают, да и много ли литкодных задач плюсовый программист решает обычно на работе? Для всех новичков и не только, ищущих идей для практики: 1. Coding Challenges, сборник 38 идей для разработки: от таких простых утилит как cat и wc до git-клиентов, брокеров соощений и интерпретаторов. Пригодных к написанию на любом языке. Сложностью не более чем на 8 часов работы. 2. Проектно-ориентированное обучение. Список пошаговых туториалов: реализация аллокаторов, файловых систем, текстовых редакторов, баз данных с нуля. 3. Programming Challenges. Знаменитый список родом с 4chan.org: 145 идей, ранжированных по уровню сложности и разбитых на категории: прикладные программы, алгоритмы, ИИ, интерпретаторы (компиляторы), эмуляторы, игры. Нечего делать по вечерам? 200+ идей доступны выше по ссылкам :)
384
4
Наш редакторский состав несколько недель боролся с хворью, но в конечном итоге победил и возвращается, чтобы радовать вас плюсовыми постами. На последнем плюсовом митапе был поднят очень интересный вопрос: почему следующий код компилируется и gcc и clang и успешно выполняется, когда, казалось бы, согласно [module.global.frag], совсем не должен (см. объяснение Константина Владимирова)? // global.hpp #include <iostream> template <typename T> void dump(T val) { std::cout << val << std::endl; } // global.cppm module; #include "global.hpp" export module global; export template <typename T> void output(T item) { dump(item); } // main.cpp import global; int main() { output(42); } Мы честно пытались это нагуглить, но у нас не получилось. Каким образом в данном примере происходит инстанцирование? clang и gcc сохраняют в pcm дополнительные данные, необходимые для него? Если вы знаете секрет этих колдунств — мы с радостью ждем вас в комментариях. Если не знаете — ждём вас не менее. Разберёмся в компиляторной магии вместе!
359
5
#proposals #wg21 Trip report: Autumn ISO C++ standards meeting (Kona, HI, USA) Чуть больше, чем неделю назад, появились первые трип-репорты с недавней встречи WG21 (Комитет по стандартизации C++) в Коне По ее итогам в C++26 вошли: 1. Возможность обращения к parameter pack'ам как к массивам (P2662R3) template <typename... T> constexpr auto first_plus_last(T... values) -> T...[0] {     return T...[0](values...[0] + values...[sizeof...(values)-1]); } int main() {     static_assert( first_plus_last(1, 2, 10) == 11 ); } 2. Огромное количество функций линейной алгебры в стиле фортрановского BLAS, <linalg> (P1673R13) template<in-matrix InMat, class Triangle, in-vector InVec, out-vector OutVec> void cholesky_solve(InMat A, Triangle t, InVec b, OutVec x) { using std::linalg::explicit_diagonal, std::linalg::transposed, std::linalg::triangular_matrix_vector_solve; if constexpr (std::is_same_v<Triangle, upper_triangle_t>) { // Solve Ax=b where A = U^T U. Solve U^T c = b, using x to store c. triangular_matrix_vector_solve(transposed(A), opposite_triangle(t), explicit_diagonal, b, x); // Solve U x = c, overwriting x with result. triangular_matrix_vector_solve(A, t, explicit_diagonal, x); } else { // ... } } 3. Более удобный и безопасный способ форматирования рантаймовых строк (P2905R2, P2918R2) // Before: std::vformat(str, std::make_format_args(42)); // After: std::format(std::runtime_format(str), 42); 4. Возможность создания в рантайме точек останова для отладки, <debugging> (P2546R5) // Здесь мы хотим переключиться в отладчик std::breakpoint_if_debugging(); // А здесь мы из него возвращаемся И многое, более мелкое, другое. Как вы думаете, комитет тратит свои силы на стоящие вещи? И что бы хотели видеть вы в C++26?
409
6
#meetup Доклады на какие темы вам было бы интересно послушать в следующий раз? Как можно было бы сделать доклады с предыдущей встречи лучше? Помогите нам стать лучше и сформировать интересную программу для следующей встречи, поделитесь своим мнением через Яндекс.Формы!
349
7
#meetup #videos #slides Записи докладов с прошедшей встречи теперь доступны на нашем канале! 1. Корутины и Qt. Библиотека QCoro — Илья Быконя — C++ Moscow №2 2. ООП в Clickhouse — Дмитрий Косенко — C++ Moscow №2 Кроме того, был размещен в публичный доступ репозиторий с кодом к вопросам, которые были на прошедшей викторине. А для быстрой навигации по всем материалам, связанным с прошедшим мероприятием, был создан отдельный репозиторий.
338
8
#meetup Наш митап начнется уже через несколько минут! Смотреть онлайн
434
9
#meetup Митап стартует уже сегодня в 15:20 (именно в 15:20, не в 14:30, как написано в LeaderID) и мы ждём всех: как онлайн-участников, так и тех, кто успел зарегистрироваться для посещения оффлайн! 15:20–18:00, Малый Конюшковский переулок, д. 2 (1 этаж) Все дальнейшие обновления касательно нашей встречи будут публиковаться в комментариях к этой записи. Так что заходите в наш чат, чтобы ничего не пропустить!
417
10
#meetup Так как наш митап пройдет уже в это воскресенье, мы делимся подробностями для всех, зарегистрировавшихся на него для+1
#meetup Так как наш митап пройдет уже в это воскресенье, мы делимся подробностями для всех, зарегистрировавшихся на него для посещения оффлайн! C++ Moscow №2 пройдет 19 ноября (Вс) с 15:20 до 18:00 на площадке Точки кипения (Малый Конюшковский переулок, 2), добраться до которой проще всего по Таганско-Краснопресненской (фиолетовой) или Кольцевой (коричневой) линии: до Баррикадной или Краснопресненской соответственно (см. прикрепленные фотографии). Парковки рядом с площадкой присутствуют, но только платные (от 380 рублей за час и выше). На самой площадке будет доступен гардероб, кулеры с водой и уборные Ждём вас на C++ Moscow №2! Если остались вопросы, не стесняйтесь, спрашивайте, с удовольствием ответим на них в комментариях!
452
11
#meetup Наше последнее напоминание 😉 C++ Moscow №2 пройдет уже на этой неделе, и если вы собираетесь посетить его очно и ещё не зарегистрировались — самое время это сделать, иначе вы не сможете попасть на митап. Если же вы планируете участвовать онлайн — регистрироваться не нужно, трансляция пройдет на нашем YouTube канале.
480
12
#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 ваших программ — в этой книге вы точно найдете что-то новое и полезное Скачать
519
13
#quiz #explanation #cpp23 Конечно, это очень странный код и писать подобное в проде недопустимо. Но если говорить о его нормативном статусе, то тут есть нюансы. В C++20 этот код корректен: согласно [class.temporary#6], время жизни std::vector<int>{42, 17, 13}, являющегося временным объектов, продлевается до конца цикла for, так что мы можем безопасно по нему итерироваться. Временный же объект std::scoped_lock{m} создается и сразу уничтожается: для него не применимо ни одно из правил продления жизни. В C++23 же существующее поведение было изменено: P2644R1 добавил в стандарт следующий пункт: > There are three 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, продлеваются до конца цикла. Так что если рассматривать приведенный выше код: мы создаем временный объект std::scoped_lock{m}, чье время жизни продлевается до конца цикла; после чего создаем временный объект std::vector<int>{42, 17, 13}, время жизни которого продлевается так же; и дальше в цикле на первой же итерации создаем новый объект std::scoped_lock guard{m}, захватывающий мьютекс, который уже был захвачен предыдущим std::scoped_lock — и тем самым получаем состояние взаимной блокировки (deadlock), которое стандартом определяется как неопределенное поведение.
436
14
Корректен ли код выше?
376
15
#quiz Корректен ли код, приведенный ниже? Делитесь своими мыслями в комментариях! Правильный ответ и его объяснение будут опубликованы в 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}; } }
429
16
#meetup Наш второй митап состоится уже чуть меньше чем через две недели, 19 ноября (Вс) с 15:20 до 18:00 по адресу Москва, Малый Конюшковский переулок, д. 2 (оффлайн + онлайн трансляция докладов) Запланированные активности: 1. Доклад: Корутины и Qt. Библиотека QCoro 2. Доклад: ООП в Clickhouse 3. Конкурс по мотивам C++ Quiz И, конечно, вас будут ждать вкусные напитки и интересное общение 😉 Напоминаем, что если вы планируете посетить его очно — вам необходимо зарегистрироваться на него по ссылке. Регистрируйтесь и приходите на наш митап, будет классно!
447
17
#conferences Бувально на днях стали известны даты и началась продажа билетов на C++ Russia 2024, крупнейшую российскую конференцию для C++ разработчиков. Ее онлайн часть пройдет 15 мая, а оффлайн (с трансляцией докладов) 22-23 мая в Москве. Темы докладов пока что неизвестны: прием заявок на них был только открыт, но покупку билетов лучше не откладывать — мало того, что они не из дешевых, так и каждый месяц дорожают, причем довольно существенно. И хорошо, если вам их сможет оплатить работодатель, но если это не вариант — с промокодом CPPRussiaAttendeePV вы можете купить билет со скидкой 25%. А были ли вы на какой-нибудь из прошлых конференций C++ Russia, и планируете ли посетить C++ Russia 2024?
380
18
#resources #education #courses Плюсовиками не рождаются, плюсовиками становятся. И наше сообщество радо помочь всем в этом становлении нашей новой рубрикой: учебные материалы (#education). C++ базовый курс, MIPT, 2021-2022 (Константин Владимиров) Если с чего и начинать — то с одного из самых популярных и объективно лучших русскоязычных базовых курсов по C++. Он не рассчитан на абсолютных новичков: предполагается начальное понимание C, но очень хорошо структурирован: изложение методично идет от таких базовых понятий как указатели и ссылки до метапрограммирования, constexpr функций и концептов (кроме того, в курсе есть отдельные лекции, посвященные OpenGL, Vulkan, LLVM); глубок и блестяще, интересно и нескучно изложен. Так что он может быть полезен не только начинающим, но и всем желающим освежить память и структурировать свое понимание плюсов. Список ссылок: канал, плейлист (youtube), слайды
443
19
#digest Подборка самых интересных новостей и материалов из мира C++ за последние две недели (16 октября – 29 октября 2023) Читать далее на Хабре
415
20
#cpp23 #clang Хорошие новости! В clang 18 наконец-то реализовали P0847R7 Deducing this. Однако пока что только в эксперимента
#cpp23 #clang Хорошие новости! В 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 в статье по ссылке
472