Последние посты

Библиотека С# С++
14 сент., 11:05
🔍Тестовое собеседование с Senior C# разработчиком уже завтра15 сентября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle C# разработчика.Как это будет: 📂 Александр Моргунов, старший C# разработчик с опытом 7+ лет в Европейских высоконагруженных сервисах, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Александр будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос АлександруЭто бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для C# разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.Переходи в нашего бота, чтобы получить


Библиотека С# С++
13 сент., 13:41
💡 C++: std::map<std::string, ...> не обязан создавать временный std::string при каждом поискеЕсли ключ уже приходит как std::string_view, можно использовать transparent comparator:std::map<std::string, int, std::less<>> status_codes{ {"not_found", 404}, {"timeout", 504} };std::string_view key = "timeout";auto match = status_codes.find(key);


Библиотека С# С++
13 сент., 11:41
🔥 Хочешь расти в IT быстрее остальных? Перестань учиться в одиночкуМожно годами смотреть курсы, читать документацию и всё равно топтаться на месте.А можно попасть в правильное окружение, где каждый день обсуждают новые инструменты, вакансии, реальные кейсы, ошибки и то, что уже завтра станет стандартом.Здесь собраны папки и каналы по разным направлениям IT, чтобы ты быстрее находил нужных людей, идеи и полезный контент - без бесконечного поиска.AI: t.me/ai_machinelearning_big_data Python: t.me/pythonl Linux: t.me/linuxacademiya Хакинг: t.me/linuxkalii DevOps: t.me/DevOPSitsec Docker: https://t.me/+90Z5TAyfuNU5YmRi Golang: t.me/Golang_google Rust: t.me/rust_code C++: t.me/cpluspluc C#: t.me/csharp_ci Java: t.me/javatg JavaScript: t.me/javascriptv


Библиотека С# С++
9 сент., 12:11
🖥 C++: объект уничтожен, а 16 МиБ всё ещё занятыstd::weak_ptr может удерживать память даже при expired() == true.Причина в std::make_shared: обычно он размещает объект и управляющий блок в одной аллокации.В примере на скриншоте массив на 16 МиБ находится прямо внутри Blob. После удаления последнего shared_ptr:деструктор объекта вызывается; expired() возвращает true; общий блок памяти остаётся выделенным, пока существует хотя бы один weak_ptr.После сброса последней слабой ссылки блок можно освободить.Что делать: удалять протухшие ссылки из долгоживущих кешей. Для крупных объектов также можно рассмотреть отдельную аллокацию через std::shared_ptr<Blob>(new Blob()).Нюанс касается размера самого объекта. Если данные хранятся в обычном std::vector, его отдельный буфер освобождается при вызове деструктора.Разбор от Microsoft


Библиотека С# С++
2 сент., 21:54
C++26 получил новый контейнер std::hive - что-то между std::vector и std::list.Главная фишка: элементы после вставки практически не двигаются в памяти. Поэтому указатели и итераторы на существующие объекты остаются валидными даже после вставок и удаления других элементов. Как это работает:- данные хранятся не в одном массиве, а в нескольких блоках - удалённые элементы не сдвигают остальные - свободные места потом переиспользуются - специальный skipfield позволяет быстро пропускать удалённые слотыВ результате:- вставка и удаление - амортизированно O(1) - указатели остаются стабильными - локальность памяти заметно лучше, чем у std::list - но случайного доступа через [] нет - порядок вставки не гарантируется - Особенно полезно для игровых движков, пулов соединений, систем частиц и других случаев, где объекты постоянно создаются и удаляются, а другие части программы хранят указателиSandor Dargo’s BlogC++26: std::hiveIn a recent article on std::inplace_vector, I mentioned that C++26 is generous with new containers. Here’s the other one: std::hive. Consider a game engine managing thousands of entities. Each entity is stored in a container, and other subsystems hold pointers…
Библиотека С# С++
23 авг., 12:10
Бесплатная книга, после которой компиляторы перестают казаться магиейПо ходу книги вы собираете собственный компилятор с нуля: от исходного кода до ARM-ассемблера. В качестве языка используется небольшой поднабор TypeScript, поэтому примеры читаются почти как псевдокод.Разбираются AST, parser combinators, парсинг, генерация кода, типизация, вывод типов, heap allocation и даже garbage collection. Есть исходники компилятора, а также порты на Python и OCaml.Читать бесплатно: https://keleshev.com/compiling-to-assembly-from-scratch/


Библиотека С# С++
23 авг., 10:09
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночкуОкружение решает больше, чем кажется.Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.AI: t.me/ai_machinelearning_big_data Python: t.me/pythonl Linux: t.me/linuxacademiya Хакинг: t.me/linuxkalii DevOps: t.me/DevOPSitsec Docker: https://t.me/+90Z5TAyfuNU5YmRi Golang: t.me/Golang_google Rust: t.me/rust_code C++: t.me/cpluspluc C#: t.me/csharp_1001_notes Java: t.me/javatg JavaScript: t.me/javascriptv React: t.me/react_tg Frontend: t.me/front


Библиотека С# С++
11 авг., 08:56
🧠 Алгоритм, который превращает выражение в форму, где приоритеты операторов больше не нужныАлгоритм сортировочной станции Дейкстры получил название в честь железнодорожной сортировочной станции - и работает очень похоже.Он преобразует обычную инфиксную запись:3 + 4 2в постфиксную:3 4 2 +После этого калькулятору уже не нужно каждый раз разбираться с приоритетами операторов и строить полноценное AST.Как работает идея:- один стек хранит операторы; - второй поток формирует результат; - операторы с более высоким приоритетом выходят раньше; - скобки и ассоциативность обрабатываются по правилам стека.


Библиотека С# С++
4 авг., 10:24
Четыре строки делают сложение float заметно точнееПри последовательном сложении чисел с плавающей точкой часть младших битов теряется из-за округления. На больших массивах эта ошибка постепенно накапливается.Алгоритм Кэхэна хранит потерянную часть в отдельной переменной и компенсирует её на следующем шаге:float kahanSum(const float nums, int count) { float sum = 0.0f; float correction = 0.0f;for (int i = 0; i < count; ++i) { float adjusted = nums[i] - correction; float next = sum + adjusted;correction = (next - sum) - adjusted; sum = next; }


Библиотека С# С++
25 июл., 10:15
## C++ enum class: безопасно, но местами раздражаетenum class даёт строгую типизацию и не позволяет случайно смешивать значения с обычными числами.Но есть нюанс: даже если enum используется как набор флагов,Flags::Read | Flags::Writeне скомпилируется.Для |, &, ^, ~ придётся вручную определить операторы и приводить значения к базовому типу.Это правильное поведение с точки зрения type safety, но бойлерплейта становится заметно больше.Поэтому в некоторых C++-проектах для битовых флагов до сих пор используют обычный enum внутри namespace: меньше защиты, зато код значительно проще.


Библиотека С# С++
19 июл., 13:34
Bare Metal C++: как писать прошивки на C++ без ОС и тяжёлого runtimePractical Guide to Bare Metal C++ - бесплатная практическая книга для разработчиков, которые хотят использовать C++ напрямую на микроконтроллерах и ARM-платформах.Внутри:- анализ машинного кода, который генерирует компилятор - запуск C++ без стандартного runtime - работа без исключений, RTTI и динамической памяти - шаблоны и статические структуры данных - event loop и компонентная архитектура драйверов - прерывания, таймеры, UART, GPIO, I2C и SPI - сборка bare-metal приложений для Raspberry PiАвтор показывает, как применять возможности C++ там, где ограничены память, процессорное время и размер прошивки.Это не учебник для новичков. Материал рассчитан на разработчиков, которые уже знают C++ и хотят понять, во что превращается их код на уровне железа.https://arobenko.github.io/bare_metal_cpp/


Библиотека С# С++
19 июл., 11:34
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночкуВ IT прокачивается тот, кто каждый день видит сильные идеи, новые инструменты, реальные задачи, вакансии и разборы.Окружение решает больше, чем кажется.Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.AI: t.me/ai_machinelearning_big_data Python: t.me/pythonl Linux: t.me/linuxacademiya Хакинг: t.me/linuxkalii DevOps: t.me/DevOPSitsec Docker: t.me/DevopsDocker Golang: t.me/Golang_google Rust: t.me/rust_code C++: t.me/cpluspluc C#: t.me/csharp_1001_notes Java: t.me/java_library JavaScript: t.me/javascriptv


Библиотека С# С++
25 июн., 11:14
🗺️ Полный роадмап C++ 2026 — от нуля до профессионалаЭто не просто список тем, а пошаговый маршрут превращения новичка в профессионального C++-разработчика. Каждый уровень даёт не только перечень концепций, но и рабочие примеры кода с пояснениями «как правильно» и «как неправильно», чтобы вы сразу видели идиоматичный современный C++, а не устаревшие практики из учебников 2000-х годов.Роадмап построен по принципу «теория рядом с практикой»: сначала вы изучаете концепцию на коде из соответствующего уровня, а затем углубляете понимание в разделе.📚 Теория C++, где каждая тема разобрана от базовой интуиции до тонкостей, важных на собеседованиях и в продакшене. Такой подход экономит месяцы: вы не зубрите оторванные факты, а понимаете, почему язык устроен именно так.Как пользоваться: идите по уровням сверху вниз, не перепрыгивая. Пишите каждый пример руками, ломайте его, смотрите на


Библиотека С# С++
24 июн., 15:20
Красота C в том, что он почти не прячет механику компьютера.Хочешь понять, как копируется файл? Не нужен огромный фреймворк. Достаточно посмотреть на простой C-код:• открыть исходный файл через fopen• открыть файл назначения• выделить буфер через malloc• читать кусками через fread• записывать через fwrite• освободить память и закрыть файлыВсё честно и прямо: байты читаются из одного места и записываются в другое.Именно поэтому C до сих пор так важен. Он не всегда самый удобный, но он показывает, что реально происходит под капотом.


Библиотека С# С++
22 июн., 14:03
Аллокации, которых нет в коде: охота на скрытый боксинг в .NET 10Самая дорогая аллокация в вашем сервисе та, которой нет в исходниках. Вы написали struct ради zero-allocation, прошли code review, а в проде Gen0-коллекции все равно идут косяком. Потому что между вашим кодом и машинным кодом стоит компилятор, и он молча упаковывает ваш value-тип в кучу там, где вы этого не просили — а на код-ревью этого не видно.TL;DR. Боксинг (boxing) в .NET - это не только object o = 42. Он прячется в вызовах интерфейсных методов на struct, в дефолтном ValueType.Equals, в params object[]-аргументах, в foreach по интерфейсу и в замыканиях. При этом часть “классических” примеров боксинга из старых гайдов на современном рантайме уже не аллоцирует — JIT научился их вырезать, и слепо копировать советы десятилетней давности вредно. Ниже — карта мест, где боксинг живёт и сейчас, отдельный разбор того, что


Библиотека С# С++
17 июн., 13:35
⚡️ Fenwick Tree держится на одном битовом трюкеFenwick Tree, или Binary Indexed Tree, считает prefix sums за O(log n).Вся магия в операции:i & -iОна находит младший установленный бит числа.Почему это работает?В two’s complement число -i получается как инверсия битов i плюс 1. Когда мы делаем i & -i, остаётся только самый правый бит, равный 1.Например:i = 12 // 1100 -i // 0100 в нужной маске i & -i = 4


Библиотека С# С++
14 июн., 13:29
C++23 добавил std::expected, и это одна из самых практичных вещей в языке за последние годы.Идея простая: функция возвращает либо нормальный результат, либо ошибку. Без исключений, без output-параметров и без неявного control flow, который потом сложно отследить.Например, парсер заголовка может вернуть uint32_t, если всё хорошо, или std::error_code, если буфер слишком короткий. Вызывающая сторона сразу видит: здесь результат может быть ошибкой, её нельзя «случайно забыть» так же легко, как при старом стиле с кодами возврата.Это особенно удобно для системного кода, сетевых протоколов, парсеров, embedded и всего, где исключения либо запрещены, либо нежелательны.std::expected не делает обработку ошибок магической. Он просто заставляет контракт функции быть честным: успешный результат и возможная ошибка описаны прямо в типе.


Библиотека С# С++
11 июн., 15:40
переслано из @data_analysis_ml
CUDA 13.3 - это не просто очередной апдейт тулкита NVIDIA, а шаг к более высокоуровневому GPU-программированию.Главное изменение - CUDA Tile теперь доступен в C++. Это модель, где разработчик описывает вычисления через тайлы, а низкоуровневые детали вроде параллелизма, перемещения данных, асинхронности и работы с памятью берёт на себя компилятор. Для C++-команд это важно: можно встраивать tile-подход в существующие CUDA-кодовые базы, не переписывая всё вокруг нового DSL.Что ещё добавили:- CUDA Tile C++ для более компактных и переносимых GPU-кернелов - поддержку Hopper с Compute Capability 9.0 - CompileIQ - автонастройку компилятора под конкретные кернелы - CUDA Python 1.0 как стабильную версию Python-интерфейса к CUDA - обновления для checkpointing, IPC и работы с контекстами - улучшения для tensor interoperabilityСамое интересное здесь не «ещё немного быстрее», а смена уровня


Библиотека С# С++
11 июн., 12:18
⚡️ Бинарный поиск, который вы выучили, скорее всего, был неправильным.Джон Бентли опубликовал реализацию бинарного поиска в Programming Pearls после того, как доказал её корректность и протестировал.Баг прожил почти 20 лет.Позже Джошуа Блох нашёл точно такую же ошибку в реализации бинарного поиска, которую сам написал для JDK.Исследование 1988 года показало: корректный бинарный поиск был только в 5 из 20 учебников.Ошибка проявляется только на массивах размером 2^30 элементов и больше.Проблема возникает при вычислении середины:mid = (low + high) / 2;На очень больших массивах low + high может вызвать переполнение.Правильнее писать так:


Библиотека С# С++
31 мая, 20:32
C умел «объектный стиль» задолго до модных споров про ООП.В Linux-драйверах это видно особенно хорошо. Каждый драйвер фактически реализует интерфейс, просто заполняя структуру с указателями на функции.file_operations из include/linux/fs.h - хороший пример. Ядро говорит: вот набор операций, которые может поддерживать файл, сокет или устройство. Драйвер сам решает, какие обработчики дать:open read write release mmap fsync unlocked_ioctlЕсли операция не нужна, поле остаётся NULL, и ядро использует поведение по умолчанию там, где это возможно.По сути это тот же контракт между системой и реализацией, только без классов, наследования и рантаймовой магии. Есть таблица функций, есть объект, есть набор действий, которые с ним можно выполнить.Именно поэтому C до сих пор живёт в ядрах, драйверах и системном коде. Он не навязывает модель абстракций, но даёт достаточно низкоуровневых

