Обновить
128K+

C++ *

Типизированный язык программирования

242,39
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Наносервисы — как довести распределенные системы до логического конца

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели8.1K

Мы рассмотрим новый фреймворк Areg SDK, идея которого, по моему мнению, может задать новый стандарт в распределенных системах. От идеи микросервисов, где компонент общается с другими компонентами мы выходим на уровень выше — структуры бесшовно общаются со структурами на других потоках и хостах в эталонной синхронизации.

Какой подход выбрали коллеги и причем тут бог Солнца? Давайте выясним.

Читать далее

Новости

librats: Выпуск версии 2.1.x (библиотека для распределённых P2P-приложений). Также релиз rats-search 2.2.2 и rasync

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели6.1K

Всем привет! Я продолжаю развивать свою библиотеку для создания распределённых приложений. Она уже легла в основу новой версии rats-search (распределённый торрент-поисковик) и rasync (синхронизация папок, файлов и исходников между устройствами), а также, судя по всему, используется в стороннем клиенте UltraVNC (VNC-клиент).

Библиотека позволяет развернуть собственную P2P-сеть, связать пользователей между собой и выстроить обмен данными через потоки разных типов — бинарные, строковые и другие. Главная особенность — автоматическое обнаружение участников (peer discovery), что особенно актуально в условиях постоянных блокировок и сетевых ограничений.

На данный момент поддерживаются C/C++, Java (Android), Python и Node.js.

Это очередное обновление: ещё больше стабильности в работе различных функций. Обо всём подробнее — далее.

Последний стабильный релиз на сегодня — 2.1.2. Исходный код и собранные бинарные файлы доступны для:

Читать далее

После комментариев на Хабре мы развернули тестовую ветку БОЛТУНа: Electron, WinUI 3 или Tauri 2?

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели5.2K

После первой статьи о БОЛТУНЕ мы развернули отдельную тестовую ветку и начали выбирать новый стек интерфейса. С помощью ИИ сравнили Electron, WinUI 3 и Tauri 2, проверили выводы по документации и собрали прототип на Tauri. Рассказываем, почему не переносим звук из C++ в WebView, как устроили границу WebView → Rust → C++, что уже работает, а что ещё предстоит измерить.

Читать эксперимент

Как устроен современный антивирус: поведенческий анализ, драйверы, архитектура

Уровень сложностиСложный
Время на прочтение28 мин
Охват и читатели9.8K

Время, когда антивирусное ПО основывалось лишь на статическом, или сигнатурном, анализе, уже далеко в прошлом. Хотя в 2026 году оба вида анализа по-прежнему используются, они применяются не так активно, как раньше. В далёком прошлом антивирусное ПО могло делать выводы, основываясь лишь на анализе таблицы импорта, что, соответственно, вызывало множество ложных срабатываний. В результате этого появился термин "поведенческий анализ". Его основная идея заключается в том, что антивирусное ПО оценивает не только содержимое конкретного файла, но и действия, которые выполняет запущенный процесс. Система собирает телеметрию: отслеживает создание дочерних процессов, работу с файлами и реестром, загрузку библиотек, сетевую активность, попытки получить доступ к другим процессам и другие события. Каждому наблюдаемому действию или их комбинации может соответствовать определённое правило. Если процесс выполняет операцию, характерную для вредоносного ПО, ему увеличивается условный уровень подозрительности.

Собственно, рассмотрим примитивный пример в контексте поведенческого анализа. В системе появляется новый процесс с именем winloggon.exe - уже здесь внимательный наблюдатель заметит проблему, легитимный процесс называется winlogon.exe, а одна лишняя буква в имени для вируса вполне может оказаться попыткой замаскироваться под системный процесс под невнимательность пользователя. После инициализации наш герой совершает первую ошибку: обращается к реестру и прописывает себя в Run.

Ошибка первая. Самый примитивный способ записать себя в автозагрузку. CmRegisterCallbackEx позволяет зарегистрировать обратный вызов для операций с реестром. Процесс изменил нужный ключ - телеметрия уже собрана. Но, наш вирус как вы поняли, останавливаться не собирается. Следующим шагом он загружает прямиком с диска чистую библиотеку.

Ошибка вторая. Антивирусный мини-фильтр файловой системы получает возможность наблюдать операции с файлами в виде IRP. Создание, открытие, запись, переименование - всё это уже находится в поле зрения системы защиты. Если файл появился в подозрительном месте, был создан неизвестным процессом, а затем сразу загружен этим же процессом, у нас появляется ещё одно событие. Но допустим, наш вирус достаточно глуп, чтобы пойти дальше. Он устанавливает соединение с удалённым сервером.

Ошибка третья. После чего в игру вступает антивирусный WFP драйвер - Windows Filtering Platform. Сетевой стек Windows позволяет системе защиты получать информацию о сетевых операциях и принимать решение, разрешать соединение или нет. В результате winloggon.exe, который только что прописал себя в автозагрузку, создал подозрительный файл и теперь пытается установить соединение наружу, оставляет ещё один вполне заметный след.

В результате чего основываясь на сборе телеметрии, начислении баллов, мы получаем не одно определенное событие, а полноценную законченную картину:

Читать далее

По заветам Макконнела

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

Если вы начинающий программист и у Вас нет машины, то лучшее решение - машина Тьюринга (МТ)! Я в этом вам помогу, а еще Макконнел. Но и не только он один.

Первая моя статья на Хабре о машинах Тьюринга это про тяжелый грузовик [1]. А оно такое надо? Начинать лучше с чего-то полегче. Этим и займемся. Хотя основа или, так сказать, базис по большому счету будет один. Но, ведь, между карьерным самосвалом и самой простой «инвалидкой» тоже есть много общего? И то и другое явно не самолет.

В монографиях Макконнела [2], Карпова [3] и еще много где устройство МТ расписано по винтикам, которых не так уж и много. Я, например, когда-то начинал с книги А.Трахтенброта [4].  Также можно, не мудрствуя лукаво, запустить эмулятор МТ. Их  в Инете найти не сложно. И сразу погонять, не вникая в «винтики». Но это для самых отвязных, т.е. тех, кто не боится снести крышу.

Я предпочитаю среднее. Глубины теории для любителей. По мне гораздо лучше через «ручки». Для этого нужно иметь «конструктор», на котором можно  не только тренироваться, но и реализовать любые фантазии.

Подобие конструктора можно найти у Карпова Ю.Г. Но это пара набросков на псевдокоде. Мы же возьмем конкретный язык и конкретную реализацию. А для совсем уж ленивых будет доступен код по ссылке на Git-репозитарий.

Подобно Макконнелу я за «активный обучающий подход». Т.е. следую его заветам. Хотя следовал я им задолго до знакомства  с его идеями. И это даже хорошо, т.к. не отвлекало. В результате я пошел  даже немного дальше. Для анализа алгоритмов использовал не псевдокод, а другой вариант – формальную вычислительную модель и ее реализацию. Такой «математический псевдокод» позволяет делать  анализ проще, глубже и точнее. По результатам написал статью во времена, когда журналы еще издавались [5].

Читать далее

Опухший C++ код

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели92K

Есть такая старая программистская байка, что нельзя платить программистам за строки кода, так как тогда они будут писать длинный бестолковый код и любить метод copy-paste. Будущее наступило. Только теперь этими “программистами” является генеративный ИИ (GenAI), которому как раз платят за строки кода. Иронично.

Один из моих интересов — изучение сгенерированного С++ кода, чтобы понимать, как развивается индустрия создания ПО, какие проблемы уходят, а какие наоборот возникают. После заметки “Дайте посмотреть на нормальный С++ проект, созданный вайб-кодингом” мне предложили заглянуть в проект VibeTensor, что я и сделал.

Читать далее

Как я улучшил векторный поиск в YDB

Уровень сложностиСложный
Время на прочтение11 мин
Охват и читатели6.1K

В распределённой СУБД YDB (читается вай‑ди‑би) векторный поиск по kmeans‑tree индексу раскрывался оптимизатором в цепочку из нескольких стадий StreamLookup. Это работало, но порождало большие планы запросов и существенно затрудняло оптимизации самого поиска. Я заменил эту цепочку одним специализированным read‑актором TKqpVectorSearchActor, который берёт всю логику обхода индекса под свой контроль, а не размазывает её по независимым стадиям.

Читать далее

С++20 и асинхронный ввод-вывод для обработки крашей приложения

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели6.1K

Как асинхронно отправить диагностическую информацию на удалённые сервера для дальнейшей диагностики в условиях очень ограниченной среды? Корутины C++20 без динамической памяти и исключений, а также некоторые другие вещи, о которых вы бы никогда не подумали, что они вам нужны.

Читать далее

Рецензия на книгу «Программирование на C++ в среде Qt»

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели7.9K

В августе продолжаем тему рецензий на книги по С-подобным языкам. Книга «Программирование на C++ в среде Qt» (БХВ-Петербург, 2026) Дмитрия Осипова построена на версии Qt 6.10 и выделяется среди аналогов тем, что начинает тему буквально с нуля. Первые пять глав — это полноценный курс C++, и только потом идут виджеты, графика и многопоточность. Для студентов и стажеров, которые хотят получить единую книгу вместо связки «учебник C++ и отдельный учебник Qt», эта книга выглядит как хороший старт в кросс-платформенную разработку.

Читать далее

Я хотел понять, где создана AI‑картинка. В итоге разобрался, что на самом деле проверяет C2PA

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.2K

13 августа Google выложила Credentio — C++ библиотеку для проверки C2PA Content Credentials. Я решил собрать её и сделать простой тест: кидаешь картинку и смотришь, можно ли понять, камера это, генератор или редактор.

Спойлер: нельзя. Причём ограничение оказалось не в Credentio — я просто неправильно понимал, какую задачу вообще решает C2PA. Он не анализирует пиксели и не пытается угадать происхождение изображения. Если в файле нет C2PA‑данных, проверять ему попросту нечего.

В итоге вместо «детектора AI‑картинок» у меня получился небольшой локальный валидатор, а сам эксперимент оказался полезнее именно из‑за того, что первоначальная гипотеза не сработала.

Читать далее

Голос пропадал каждые три секунды: как пять друзей из Tarkov Arena сделали БОЛТУН

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели6.3K

Нас пятеро: друзья и команда по Tarkov Arena. После блокировки Discord и прекращения работы обходного способа мы не нашли подходящую российскую замену и начали делать BOLTUN. В живых тестах голос рвался ровно раз в три секунды, хотя локальная запись была идеальной. Мы меняли буферы, WASAPI, Opus, ADPCM, PCM, UDP и серверный relay. В итоге период вывел нас на неожиданную причину: диагностический лог каждые 50 кадров. Разбираю расследование, собственный формат TVO2 на 80 мс и устройство голосового тракта.

Читать расследование

Микроядро SME2 sgemm: 1024 умножения-сложения за проход

Уровень сложностиСложный
Время на прочтение8 мин
Охват и читатели6.6K

В этой части мы возьмём первый из пропусков BLIS — микроядро sgemm; сначала зафиксируем форму аккумулятора 32×32 в четырёх тайлах ZA, затем разберём горячий цикл по K, потом эпилог с alpha, beta и ловушкой NaN, а в конце посмотрим, какие числа производительности даёт именно это ядро. Следующая часть оставит структуру почти той же, но заменит геометрию тайла и условия существования ядра.

Читать далее

Оптимизируем код решения СЛАУ методом Гаусса под процессор Эльбрус‑8СВ

Уровень сложностиСредний
Время на прочтение34 мин
Охват и читатели9.8K

Здравствуйте, друзья, меня зовут Ерохин Кирилл, я программист-любитель, а по совместительству популяризатор российского программного и аппаратного обеспечения, и в этом сентябре я провожу второе (теперь ежегодное) соревнование по алгоритмическому программированию на C/C++ для платформы Эльбрус (e2k), для студентов и выпускников со всей России «Кубок СЭРПАС 2026». Сегодня мне нужно дать участникам соревнования пример оптимизации кода под процессор Эльбрус-8СВ, а Хабр мне в этом поможет, ему не впервой.

Читать далее

Ближайшие события

C++29 — начало. Встреча ISO C++ в Брно

Время на прочтение8 мин
Охват и читатели14K

Привет! На связи Антон Полухин из Техплатформы Городских сервисов Яндекса. Недавно в Брно состоялась встреча международного комитета по стандартизации языка программирования C++, в которой я принимал активное участие. В этот раз началась работа над C++29 и как раз о новинках и хочется рассказать.

Читать далее

Спустя 5 лет я снова пишу Всерос — часть 1

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели64K

Привет, Хабр! На связи финалист ICPC и гроссмейстер codeforces MachineSolution. В прошлой своей статье я писал о том, как подготовиться к соревнованию. Но что делать, если время подготовки прошло, как писать саму олимпиаду? “Просто бери и решай задачи” - скажет кто-то, но будет прав лишь отчасти. У некоторых соревнований есть свои особенности и, как следствие, особые стратегии написания. И заключительный этап всероссийской олимпиады школьников по информатике не лишён своих отличительных черт.

Всероссийская олимпиада школьников по праву считается мерилом олимпиадных способностей школьников и, хотя взять диплом даже регионального этапа ВсОШ дано не каждому, всероссом называют именно заключительный этап и готовятся к нему. Мало кто из сильных олимпиадников не хочет “взять всеросс” - то есть выиграть диплом призёра заключительного этапа. Помимо поступления в любой ВУЗ без экзаменов он сам по себе является ценной наградой и подтверждением своих способностей и признания результата долгих тренировок. Более того, не так много людей стремятся к диплому победителя - настолько сложно и почётно в этой олимпиаде стать хотя бы призёром! Заветные дипломы по информатике каждый год получают всего 200-300 человек из миллионов школьников. Моя история с этой олимпиадой не самая сказочная - в свои школьные годы я пожертвовал подготовкой к информатике ради подготовки к математике. Да, в итоге я занял 7 место на финале математики и почти стал победителем, но на информатике выступил, мягко говоря, ужасно - даже не близко к призёрам. Поэтому мне стало интересно написать зеркало ВсОШ по информатике за 2026 год, чтобы проверить, как сильно я вырос в олимпиадах и на что способен.

Читать далее

Код написали за нас. Как упростить ревью и сколько это стоит в рантайме

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели9K

Последнее время я почти не пишу код руками — значительную часть реализации берут на себя AI-агенты. Но работы меньше не стало: теперь нужно задавать ограничения, проверять архитектуру и понимать результат, не перечитывая тысячи сгенерированных строк. Я попробовал сделать архитектурный граф общей моделью для человека, агента и генератора кода. Из одного графа получил сервисы на Go, Python, C++ и Rust, а затем сравнил их с прямыми реализациями того же HTTP → gRPC сценария. Главный вопрос эксперимента: какова runtime-плата за систему, которую проще понимать, изменять и наблюдать?

Читать далее

Как я создал свою мини‑Вселенную

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели18K

Привет, читатель!

Однажды, после просмотра ролика про эволюцию Вселенной, я загорелся идеей создать свою, со своими правилами. В итоге я написал собственный физический движок на С++, и в этой статье я расскажу про него, историю создания, и разные нюансы.

Читать далее

BLIS: недостающую среднюю ступеньку построили тридцать лет назад

Время на прочтение8 мин
Охват и читатели7.7K

В этой части мы начнём с тупика, в который приводит голый цикл FMOPA; затем покажем, какую часть GEMM BLIS уже построил за нас; после этого разберём пять циклов BLIS и место микроядра внутри них. Финал главы должен сделать дальнейший план конкретным: что именно нужно добавить для Apple SME, а что уже относится к готовой «мебели» фреймворка.

Читать далее

Как я перестал бояться и полюбил ассемблер

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели23K

Эта статья посвящена путешествию в мир ретропрограммирования. Надеюсь, в ней у меня получится передать вам то чувство восхищения, которое я испытал и которое заставило меня написать этот пост. Пост о том, как создавать ПО для компьютерной системы Atari ST, выпущенной в 1985 году.

Atari ST относится ко второй крупной волне домашних компьютеров. Первая волна, созданная на основе 8-битных CPU, принесла в наши дома такие знаковые машины, как Commodore C64 и Sinclair Spectrum. Вторую волну разрабатывали на основе 16-битных CPU; она породила Apple Macintosh, Commodore Amiga и, разумеется, Atari ST.

Atari ST 1040 STF с цветным монитором Atari SC1224

Типичный Atari ST (например, 1040 STFM) имел CPU Motorola 68000 с тактовой частотой 8 МГц и 1 МБ ОЗУ; он загружал ПО с 3,5-дюймовых гибких дисков. Его графические возможности состояли из монохромного режима высокого разрешения 640x400 и 16-цветного режима 320x200, получившего наибольшую популярность в играх.

Рабочий стол GEM Atari ST имел интерфейс, очень похожий на разработанный Xerox и Apple, у него были диспетчер файлов, иконки и многооконность. Это его монохромная версия высокого разрешения.

Если у вас нет реального Atari ST, то его можно просто эмулировать на современном компьютере. Первые эмуляторы появились ещё в 90-х. Хорошим считается Hatari, который существует для большинства современных платформ. В эмуляторе также есть современные инструменты разработки. В прошлом приходилось пользоваться неуклюжим ПО разработки, которое загружалось с дискет, а сегодня можно просто писать всё в VSCode и компилировать современным GCC. У нас есть доступ к современным графическим редакторам наподобие GIMP, и мы даже можем просить помощи у ИИ.

Читать далее

Композиционный анализ проектов на C++

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели7K

Композиционный анализ (Software Composition Analysis, SCA) — это практика автоматического выявления и отслеживания внешних зависимостей проекта с целью мониторинга их известных уязвимостей.

В этой статье мы расскажем, какие инструменты используем и как организуем пайплайн для своевременного и регулярного анализа зависимостей проектов на C++.

P. S. В написании текста статьи не участвовала нейросеть! 100% ручной труд разработчика Георгия 😇

Читать далее
1
23 ...