Как стать автором
Обновить
135.79
Рейтинг

C++ *

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

Сначала показывать
Порог рейтинга

Как мы баг в PVS-Studio искали или 278 Гигабайтов логов

Блог компании PVS-Studio C++ *

Предлагаем вашему вниманию интересную историю о поиске бага внутри анализатора PVS-Studio. Да, мы тоже допускаем ошибки, но мы готовы засучить рукава и залезть в самую глубину "кроличьей норы".


1005_StoriesFromSupport_ru/image1.png


Небольшое предисловие


Наш коллега уже рассказывал про нашу техническую поддержку. Но всегда интересно послушать какие-то истории, и они у нас есть.


Если хочется программистской жести, то можете сразу переходить к следующему разделу. Если же хочется в целом познакомиться, как мы работаем, то продолжайте читать :). Также вы можете посмотреть юмористический доклад о поддержке С++ программистов.

Читать дальше →
Всего голосов 35: ↑34 и ↓1 +33
Просмотры 3.1K
Комментарии 5

Новости

Примеры ошибок, которые может обнаружить PVS-Studio в коде LLVM 15.0

Блог компании PVS-Studio Open source *C++ *Компиляторы *

PVS-Studio: потому, что могу
Компиляторы развиваются и выдают всё больше предупреждений. Остаются ли преимущества от использования статических анализаторов кода, таких как PVS-Studio? Да, так как анализаторы тоже развиваются. Перед вами статья о том, как PVS-Studio находит баги даже в компиляторе.

Читать дальше →
Всего голосов 25: ↑23 и ↓2 +21
Просмотры 2.4K
Комментарии 8

nocc — распределённый компилятор для гигантских проектов на С++

Блог компании VK Высокая производительность *Программирование *C++ *Распределённые системы *

У нас есть задача постоянно компилировать тонны плюсового кода. Наш проект — почти 200 000 cpp- и h-файлов, множество Git-веток, сотни разработчиков, десятки билд-агентов: его нельзя единожды скомпилировать, приходится перекомпилировать постоянно, параллельно, разные версии.

Наш проект необычный. Потому что эти 200 000 файлов — это результат автогенерации. Потому что пишем мы на PHP, а потом через KPHP все PHP-исходники превращаются в плюсы. Именно так разрабатывается бэкенд ВКонтакте.

Компилировать тысячи объектников долго. Локально это занимает много часов. Мы использовали distcc — но всё равно медленно. Мы даже пропатчили distcc для поддержки precompiled headers — но даже тогда медленно. И решили написать своё — чтоб стало, наконец, быстро.

В итоге мы написали замену distcc — компилятор nocc. Он не имеет никакого отношения к PHP и даже к KPHP, а просто предназначен для компиляции .cpp.o в промышленных масштабах.

Это техническая статья про параллелизацию, демоны и специфику С++. Ссылки на GitHub и видео приложу в конце статьи.

Читать далее
Всего голосов 77: ↑75 и ↓2 +73
Просмотры 7.1K
Комментарии 62

Как работать с атомарными типами данных в C++

Блог компании МойОфис Программирование *C++ *

Насколько популярна сегодня тема атомарных данных, настолько же она обширна для одной статьи. Можно подробно останавливаться на разных аспектах атомарности: например, анализировать memory ordering, рассуждать о lock-free алгоритмах с использованием атомиков или исследовать производительность атомиков на разных платформах.

Под катом мы рассмотрим некоторые базовые принципы работы с атомарными типами данных в языке C++. А именно: осветим работу с атомарными данными, основные операции с ними в стандартной библиотеке C++, а также некоторые аспекты использования атомиков с пользовательскими типами данных.

Читать далее
Всего голосов 57: ↑56 и ↓1 +55
Просмотры 6.9K
Комментарии 5

Как PVS-Studio защищает от поспешных правок кода, пример N6

Блог компании PVS-Studio C++ *

Программисты часто допускают ошибки в коде по невнимательности или из-за спешки. Если вам интересно, как можно быстро находить такие ошибки, то мы рады приветствовать вас в очередной статье из цикла "Как PVS-Studio защищает от поспешных правок кода". Сегодня мы обратили внимание на проект FreeCAD.

Читать далее
Всего голосов 11: ↑7 и ↓4 +3
Просмотры 2K
Комментарии 1

Конструктор сетевых сервисов

Программирование *C++ *IT-инфраструктура *Сетевые технологии *
Tutorial

Здравствуйте, это моя четвёртая статья на хабре, на этот раз я выйду за область ML решений и познакомлю вас с другим своим проектом.

В процессе работы над различными проектами, рано или поздно возникает необходимость реализации клиент/серверных протоколов передачи данных, это может быть один из стандартных протоколов типа HTTP, так и реализация своих собственных. Реализация как клиента, так и сервера, всегда занимает большое количество времени, не говоря уже об отладке и вся работа сводится к поиску готовых решений, таких как CURL или NGINX. Когда же требуется реализовать работу своего собственного протокола передачи данных, начинаются проблемы. В один из таких моментов мне пришла в голову идея реализации конструктора, который служил бы каркасом основного приложения и всю работу с сетью брал на себя, чтобы оставалось реализовать только сам протокол. Для этих целей мною был разработан проект AWH.

Подробнее
Всего голосов 11: ↑7 и ↓4 +3
Просмотры 2.1K
Комментарии 21

Не повторять, выполнено профессионалами: как не надо разрабатывать таск-трекер

JavaScript *PostgreSQL *C++ *DevOps *VueJS *

Почти три года назад мы запустили сервис для управления проектами, но без ошибок не обошлось. Делюсь опытом, чтобы на наши грабли больше никто не наступил.

Читать далее
Всего голосов 16: ↑6 и ↓10 -4
Просмотры 3.5K
Комментарии 18

Топ-10 докладов на С++ конференциях 2019-2022 года

Блог компании PVS-Studio C++ *Конференции

В мире проходит множество интересных конференций по программированию. К сожалению, у нас нет телепорта, чтобы посещать каждую из них и слушать все интересующие нас доклады. Но зато мы можем посмотреть их на YouTube!

Читать далее
Всего голосов 20: ↑18 и ↓2 +16
Просмотры 5.1K
Комментарии 3

Как я начал писать движки для визуальных новелл на C++. Часть 1: Начало пути

C++ *
Из песочницы

Бывает такое чувство, что ты изучаешь что-то не то. Вроде интересно, а вроде и нет. Именно такое чувство у меня и было, когда я изучал Unreal Engine — мощный движок, можно сделать от шутера в открытом мире до платформера, но интереса нет. До Unreal Engine я испробовал Ren’Py, Unity, Java и C#, но, как и с Unreal Engine, у меня не было интереса. Мне хотелось чего-то одновременно интересного и сложного.

Именно в декабре 2020 года я и решил — хочу написать собственный движок для визуальных новелл на C++. Почему для визуальных новелл? Мне они просто нравятся, вот и весь ответ.

Читать далее
Всего голосов 15: ↑15 и ↓0 +15
Просмотры 8K
Комментарии 5

Портирование DOS игр. Tutorial

Ненормальное программирование *C++ *Разработка игр *Профессиональная литература *
Из песочницы
Tutorial

Мотивация к написанию статьи

Уважаемые коллеги, доброго времени суток!

Этой статьей я хочу показать приёмы портирования программ между аппаратно-программными платформами, и привлечь внимание к книге «Секреты программирования игр» Андрэ Ламота, 1995, которую вспомнят добрым словом многие разработчики компьютерных игр, и другим не менее полезным книгам этого автора.

Нам интересны приёмы портации, но мы так же проведём ревью, проверим насколько долговечен код 25-тилетней давности, и насколько сложно его портировать на любые современные платформы.

Я обосную и некоторые случаи примененного «ненормального программирования», а изложенный план, как и полученный микро-движок, вы можете использовать при создании своих портов.

Читать далее
Всего голосов 40: ↑40 и ↓0 +40
Просмотры 5.8K
Комментарии 8

Есть ли жизнь без RTTI: пишем свой dynamic_cast

Блог компании PVS-Studio C++ *

В современном С++ осталось не так много вещей, которые не подходят под парадигму "Не плати за то, что не используешь". Одна из них – dynamic_cast. В рамках данной статьи мы разберёмся, что с ним не так, а когда поймём – попробуем предложить альтернативу.

Читать далее
Всего голосов 16: ↑13 и ↓3 +10
Просмотры 3.7K
Комментарии 33

Кручу, верчу, imgui loader нарисовать хочу…

Open source *Программирование *C++ *Интерфейсы *

В одном из сайд-проектов с использованием imgui понадобилась "вертячка" (loader, spinner, анимация загрузки). Из коробки этот ui-фреймворк таких виджетов не предоставляет, поэтому решил сделать свой: код простой, математики почти нет. Показал ocornut-y, ему тоже понравилось, теперь базовый виджет на очереди интеграции в imgui. Поискал интересные спинеры на разных сайтах для веб-интерфейсов - десятки видов на любой вкус и цвет, есть и 3д, но все в основном или пререндеры в виде (gif) или векторные анимации, которые для отрисовки требует отдельного фреймворка вроде cairo, а алгоритмов или описания как это работает, почти нет. Все спинеры сделаны в стиле "что вижу, то и пою", немного математики синусы/косинусы для координат, и тестировать пока не будет похоже на решение от UI дизайнера. Да-да, я понимаю, что когда космические корабли бороздят просторы большого театра DALL·E 2 рисует "улыбку мадонны", писать что-то на плюсах, да еще для UI...

Много анимаций, мало кода
Всего голосов 21: ↑21 и ↓0 +21
Просмотры 2.3K
Комментарии 4

Как мы навели порядок в C++/Qt проекте с помощью Conan

C++ *Qt *

О себе

Привет, Хабр! Я Тимлид/Архитектор в компании Монитор Софт. В прошлом C++ разработчик, сейчас все еще удается иногда выходить в поля)). Хочу поделиться нашим опытом использования Conan. С момента описываемых ниже событий прошло года 4, и в целом наше решение уже прошло проверку временем.

Читать далее
Всего голосов 23: ↑22 и ↓1 +21
Просмотры 6.5K
Комментарии 8

Создаем сложные интерфейсы и спецэффекты на базе Qt. Часть I

Блог компании VK C++ *Qt *

Привет, Хабр! Меня зовут Михаил Полукаров, я занимаюсь разработкой desktop-версии в команде VK Teams. Каждый день нашим мессенджером пользуются миллионы людей, поэтому мы уделяем особое внимание интерфейсу пользователя. Он должен быть не только функциональным и отзывчивым, но ещё и привлекательным с эстетической точки зрения. Для создания графических интерфейсов мы используем Qt Framework, и уже накопили много опыта в решении нетривиальных задач с помощью этого инструмента. Настолько много, что статью пришлось разделить на две части. 

Под катом мы пройдём путь от создания отдельных компонентов-примеров, экспериментов с маскированием, прозрачностью, размытием и перекрывающимися компонентами до разработки небольшого демонстрационного приложения, объединяющего все полученные ранее решения.
Читать дальше →
Всего голосов 46: ↑45 и ↓1 +44
Просмотры 6.3K
Комментарии 6

EspMon: мониторинг CPU и GPU с помощью T-Display S3

Блог компании RUVDS.com C++ *Интерфейсы *C# *Программирование микроконтроллеров *
Перевод

Я любительница Fallout 4. Эту игру можно расширять бесконечно, поэтому мне до сих пор, даже спустя семь лет, интересно к ней возвращаться. Я постоянно что-то или в неё добавляю, или изменяю.

Когда у меня, наконец, появилась 2080ti, я смогла запустить её в 4К. Игра пошла настолько легко, что я решила нагрузить её вычислениями, добавив по всему ландшафту густой лес. В конце концов, я заметила, что карточка зашумела и начала потеть.

Но мне хотелось мониторить нагрузку не только по шуму системы охлаждения, а забивать экран всякими наложениями я не люблю. Поэтому я достала свой миниатюрный T-Display S3 и решила реализовать всё это на нем.
Читать дальше →
Всего голосов 33: ↑32 и ↓1 +31
Просмотры 3K
Комментарии 6

С++ и Raylib как глоток свежего воздуха

C++ *
Из песочницы

Какое то время назад пришла ко мне идея исполнить хотя бы немного детскую мечту программировать игры. Надо сказать, что определенный опыт у меня был. Попала в девятом классе ко мне в руки чудесная книга Андрэ Ламота "Секреты программирования игр", благодаря которой я изучал язык Си, поскольку все там было завязано на нем. И это были незабываемые моменты. Просто это казалось каким то чудом , что я сам, своими руками заставляю двигаться персонажей и вообще, это все даже похоже на игры для Dendy, которые я так мечтал делать в еще более ранний период детства.

В основном сейчас я программирую на Java ,и изначально мой выбор пал на библиотеку libGDX. Масштабные фреймворки типа Unity и UnrealEngine я не раcсматривал, поскольку главной целью моей все же было не делать продукт, а просто получить удовольствие от написания игры и ощутить ту магию, когда в школе на языке Си я с нуля писал код для доступа в видеопамять, рисования спрайтов и контролировал каждый бит (почти). Поэтому просто хотелось поэкспериментировать именно с библиотеками, предоставляющими основные функции, типа рисования, обработки клавиатуры. Но как то попалась мне на глаза библиотека Raylib. Испугал меня конечно язык С++.( К слову сказать Raylib поддерживает еще и кучу других языков, но это я узнал потом). Долго ли коротко, принял решение поэкспериментировать с Raylib, заодно изучив С++,на котором никогда не программировал и вообще для меня С++ это какой то высший пилотаж.

Читать далее
Всего голосов 10: ↑7 и ↓3 +4
Просмотры 8.1K
Комментарии 12

Стремление к простоте: о санкциях, транзакциях и одном рефакторинге

Программирование *Анализ и проектирование систем *C++ *
Из песочницы

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

И вот, разработка и тестирование закончены, одним прекрасным утром трафик переключается на новую сборку, мониторинг показывает, что запросы к API проверяющей фирмы идут, ответы приходят, всё нормально. Но уже через час отдел комплаенса бьёт тревогу – задержанные на контроль транзакции стали попадать на счета клиентов! За такие дела можно и лицензию потерять, поэтому начинается аврал: счета этих клиентов замораживаются, версия срочно откатывается, транзакции правятся вручную. Нервная и неприятная для всех ситуация, иными словами, полная ж… жесть.

Как же так получилось? Ведь были и автотесты и ревью кода, тестирование в песочнице...

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Просмотры 2.2K
Комментарии 2

Импортозамещение VR-а клавиатуре покоя не даёт

C++ *Разработка под Linux *AR и VR

Давным-давно, ... в общем появился у Sony PlayStation шлем VR. Штука оказалась интересная и позволяла не только играть в vr-игры, но и смотреть фильмы.

Правда, сразу выяснились некоторые "тонкости": нормальное использование возможно было только при использовании с Sony PlayStation (что, в общем-то, очевидно) и через специализированную программу Rad (бывший LittlStar). Причём особого разнообразия программ-проигрывателей небыло, использование же программы Rad требовало оплаты подписки. Сначала всё было хорошо: и подписка платилась, и кино смотрелось. Потом появились санкции и, вдруг, оказалось, что заплатить из России нельзя. И вообще вы ничего не можете, пока "... until those restrictions and sanctions have been lifted ...".

Конечно, такое отношение не может радовать пользователй. С другой стороны, это является хорошим поводом постучать по клавиатуре и сделать немного импортозамещения.

Чтобы шлем работал, необходимо было отвязать функцию просмотра фильмов от специализированного / платного / не-российского программного обеспечения. И ниже описан процесс такого "отвязывания".

Эта статья по составу содержит примеры кода и решений, которые нужно
добавить в проигрыватель VR, чтобы им можно было нормально пользоваться.
Приведённые здесь сведения не являются какими-либо новыми или
особенными знаниями. Всё, что здесь приведено вы можете самостоятельно
найти в интернете или посчитать на калькуляторе.

Для мнеленьчитать результат здесь.

Читать далее
Всего голосов 9: ↑6 и ↓3 +3
Просмотры 2.3K
Комментарии 3

Лямбды в C++. Как это работает

C++ *

Рассмотрим такой пример кода:

void f(int i)
{
    auto g = [i](auto j)
    {
        return i + j;
    };
    g = [i](auto j)
    {
        return i - j;
    };
    g(1);
}

При компиляции возникнет ошибка в строке g = [i](auto j).

Почему так происходит?
Читать дальше →
Всего голосов 18: ↑4 и ↓14 -10
Просмотры 8.6K
Комментарии 9

Вклад авторов

Работа

QT разработчик
17 вакансий
Программист C++
111 вакансий