C++ Moscow
Ir al canal en Telegram
Информационный канал московского сообщества программистов на C++ Чат: @cppmoscow_chat Бот обратной связи: @cppmoscow_bot Организатор: @eoanermine
Mostrar más302
Suscriptores
Sin datos24 horas
Sin datos7 días
Sin datos30 días
Carga de datos en curso...
Canales Similares
Nube de Etiquetas
Sin datos
¿Algún problema? Por favor, actualice la página o contacte a nuestro gerente de soporte.
Menciones Entrantes y Salientes
---
---
---
---
---
---
Atraer Suscriptores
agosto '24
agosto '24
+1
en 0 canales
julio '24
+9
en 0 canales
Get PRO
junio '24
+11
en 0 canales
Get PRO
mayo '24
+8
en 0 canales
Get PRO
abril '24
+17
en 0 canales
Get PRO
marzo '24
+19
en 0 canales
Get PRO
febrero '24
+46
en 0 canales
Get PRO
enero '24
+39
en 0 canales
Get PRO
diciembre '23
+38
en 0 canales
Get PRO
noviembre '23
+253
en 0 canales
| Fecha | Crecimiento de Suscriptores | Menciones | Canales | |
| 06 agosto | +1 | |||
| 05 agosto | 0 | |||
| 04 agosto | 0 | |||
| 03 agosto | 0 | |||
| 02 agosto | 0 | |||
| 01 agosto | 0 |
Publicaciones del Canal
Наш организаторский комитет и редакторский совет ежеденно и еженощно планирует митапы и пишет новые посты.
Но ядро 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
Так как наш митап пройдет уже в это воскресенье, мы делимся подробностями для всех, зарегистрировавшихся на него для посещения оффлайн!
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. Однако пока что только в экспериментальном режиме: макрос __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 |
