Обновить
240.24

C++ *

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

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

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

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

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

Читать дальше →

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Подробнее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Много анимаций, мало кода

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

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

О себе

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

Читать далее

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

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

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

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

Под катом мы пройдём путь от создания отдельных компонентов-примеров, экспериментов с маскированием, прозрачностью, размытием и перекрывающимися компонентами до разработки небольшого демонстрационного приложения, объединяющего все полученные ранее решения.
Читать дальше →

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

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

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

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

Но мне хотелось мониторить нагрузку не только по шуму системы охлаждения, а забивать экран всякими наложениями я не люблю. Поэтому я достала свой миниатюрный T-Display S3 и решила реализовать всё это на нем.
Читать дальше →

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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).

Почему так происходит?
Читать дальше →

Tiny-qORM: рассказ без счастливого конца

Время на прочтение18 мин
Охват и читатели3.5K
Чаще всего на хабре люди делятся историями своего успеха. Вроде, «Ребята, я написал свою ORM, качайте, ставьте ллойсы!» Эта история будет немного другая. В ней я расскажу о неуспехе, который считаю своим серьёзным достижением.


Ожидание — реальность.

История о метатипах Qt, написании велосипедов, превышении максимального числа записей в объектном файле и, неожиданно, инструменте, который работает так, как и было задумано.
Все заинтересовавшиеся - под кат