tgindex

C++ Moscow

описание

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

443
подписчиков
Охват к подписчикам
263,0%
ERR
Реакции к просмотрам
0,83%
194 на 20 постов
Пересылки к просмотрам
0,54%
125
Постов в день
0,0
всего 20

Где отзываются чаще

доля реакций к просмотрам
  • 23 нояб. 2023 г.#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?1,66%
  • 2 февр. 2024 г.#meetup С приближением весны приближаются и наши митапы! Но на этот раз мы думаем над экспериментом: неформальной встрече в антикафе, где мы могли бы попить чай, кофе; покушать печеньки и хорошо поболтать за плюсы :) Как вы относитесь к этой идее? И как думаете, как провести этот эксперимент наиболее удачно?1,57%
  • 4 дек. 2023 г.Наш редакторский состав несколько недель боролся с хворью, но в конечном итоге победил и возвращается, чтобы радовать вас плюсовыми постами. На последнем плюсовом митапе был поднят очень интересный вопрос: почему следующий код компилируется и 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 дополнительные данные, необходимые для него? Если вы знаете секрет этих колдунств — мы с радостью ждем вас в комментариях. Если не знаете — ждём вас не менее. Разберёмся в компиляторной магии вместе!1,30%
  • 6 дек. 2023 г.#practice Литкод это, конечно, хорошо.. Но одни алгоритмические задачи очень быстро наскучивают, да и много ли литкодных задач плюсовый программист решает обычно на работе? Для всех новичков и не только, ищущих идей для практики: 1. Coding Challenges, сборник 38 идей для разработки: от таких простых утилит как cat и wc до git-клиентов, брокеров соощений и интерпретаторов. Пригодных к написанию на любом языке. Сложностью не более чем на 8 часов работы. 2. Проектно-ориентированное обучение. Список пошаговых туториалов: реализация аллокаторов, файловых систем, текстовых редакторов, баз данных с нуля. 3. Programming Challenges. Знаменитый список родом с 4chan.org: 145 идей, ранжированных по уровню сложности и разбитых на категории: прикладные программы, алгоритмы, ИИ, интерпретаторы (компиляторы), эмуляторы, игры. Нечего делать по вечерам? 200+ идей доступны выше по ссылкам :)1,15%
  • 22 янв. 2024 г.#atomics На днях решил наконец-то твердо разобраться в Модели памяти C++ (до этого лишь всякие доклады по теме смотрел, но там как в мозг втекало, так через некоторое время и вытекало). В процессе задумался: а все эти happens before, synchronizes with и более сложные отношения между операциями — их ведь можно было бы визуализировать! Погуглил, а, оказывается, такой инструмент уже существует: CppMem. Но печаль: его не прогнать на плюсовом коде; и даже на произвольном сишном коде его не прогнать. Он умеет лишь в свой ограниченный синтаксис. И это понятно: CppMem был создан лишь для демонстрации папиры Mathematizing C++ Concurrency. Пилить полноценный такой инструмент — раньше, чем допилишь, наверное, сам выпилишься. А знаете ли вы какие-либо другие инструменты для статического анализа корректности атомарных операций? Как думаете, будет ли когда-либо написан полноценный инструмент для этого, или нам в этом плане до конца веков остается полагаться лишь на нейронку в своей голове?1,14%
  • 2 июн. 2024 г.#обсуждение Вечернее обсуждение. Пост от @eoanermine Кажется, будто C++ идёт не в том направлении: комитет втаскивает и втаскивает фичи, при этом не имея четкого видения: корутины затащим? Затащим! Senders/Receivers? А давайте тоже затащим, чего мелочиться, и про корутины можно будет забыть! Слишком мало рефлексии, слишком мало оптимизации существующего. И слишком много необдуманных новинок. Может, вместо того, чтобы добавлять, наконец следует остановиться и подумать? Десяток видов инициализаций, множество раз перегруженных ключевых слов (имеющих по 5 различных значений в различных контекстах), иногда потерявших свое первоначальное значение, но сохранивших имя — это не красит язык. Как вы думаете: разве это не путь в пропасть? Кажется, однажды плюсы просто схлопнутся под давлением легаси. А с учётом того, как много новых пропозалов стали принимать с каждым новым стандартом, кажется, это время уже близко. И что можно сделать?1,12%
  • 14 июл. 2024 г.Интересный пример, когда объявление friend T (где T — шаблонный параметр) имеет смысл: template <typename T> class Badge { friend T; Badge() { } }; Допустим, у нас есть какой-нибудь публичный метод, и предполагается, что круг его пользователей ограничен лишь одним классом, например: class VFS { ... public: void register_device(Device&); void unregister_device(Device&); }; Предполагается, что эти методы будут вызываться внутри конструкторов (и деструкторов соответственно) Device и нигде (и никем) больше. Но как закрепить наше ожидание на уровне API? Сейчас эти методы может вызывать каждый. Распространенное решение — вынести (un)register_device в приватную часть, а Device объявить дружественным: class VFS { ... private: friend class Device; void register_device(Device&); void unregister_device(Device&); }; И это действительно запрещает всем кроме Device обращаться к данным методам. Но это так же разрешает Device обращаться ко всем остальным приватным членам VFS! Кажется, будто мы позволяем ему слишком многое. Выразить же желаемое наиболее четко и ясно нам помогает как раз таки класс Badge, приведенный в самом начале статьи: мы можем оставить методы (un)register_device в публичной части, но при этом сделать их первым аргументом значение Badge<Device>: class VFS { ... public: void register_device(Badge<Device>, Device&); void unregister_device(Badge<Device>, Device&); }; Теперь чужак не может использовать эти методы, потому что он не может сконструировать Badge<Device> (его конструктор приватный и доступен только Device), а сам Device может вызывать их где и как пожелает: Device::Device() { VFS::instance().register_device({}, *this); }1,10%
  • 19 нояб. 2023 г.#meetup Наш митап начнется уже через несколько минут! Смотреть онлайн1,09%
  • 21 нояб. 2023 г.#meetup Доклады на какие темы вам было бы интересно послушать в следующий раз? Как можно было бы сделать доклады с предыдущей встречи лучше? Помогите нам стать лучше и сформировать интересную программу для следующей встречи, поделитесь своим мнением через Яндекс.Формы!1,06%
  • 21 нояб. 2023 г.#meetup #videos #slides Записи докладов с прошедшей встречи теперь доступны на нашем канале! 1. Корутины и Qt. Библиотека QCoro — Илья Быконя — C++ Moscow №2 2. ООП в Clickhouse — Дмитрий Косенко — C++ Moscow №2 Кроме того, был размещен в публичный доступ репозиторий с кодом к вопросам, которые были на прошедшей викторине. А для быстрой навигации по всем материалам, связанным с прошедшим мероприятием, был создан отдельный репозиторий.0,94%
  • 12 дек. 2023 г.Наш организаторский комитет и редакторский совет ежеденно и еженощно планирует митапы и пишет новые посты. Но ядро C++ Moscow — это вы, наши читатели и завсегдатаи наших митапов! И мы приглашаем вас стать активным членом сообщества! 1. Присылайте нам идеи для постов или сами ваши оригинальные материалы — мы их зарепостим и сохраним ваше авторство. И если у вас есть любые иные идеи и предложения — не стесняйтесь, так же пишите нам! Будущее C++ Moscow в ваших руках!0,87%
  • 24 янв. 2024 г.#article #original Многообразие функциональных обёрток. В далёком 2002-ом комитет по стандартизации C++ посетил пропозал, предлагавший ввести шаблонный класс, некий обобщенный «указатель на функцию», способный работать как с простыми указателями на функции, указателями на методы классов, так и с произвольными функциональными объектами [1]. В качестве мотивации к принятию он приводил несколько весомых юзкейсов: колбэки и функции высших порядков. Кто же знал, что его окажется недостаточно, а один из его юзкейсов — вовсе не его юзкейс? Читать далее на Хабре0,79%