Как стать автором
Обновить
218.74

C++ *

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

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

Как при помощи С++20 мы искоренили целый класс багов, возникавших во время выполнения

Время на прочтение5 мин
Количество просмотров6.5K

C++20 давно в ходу и поддерживается компилятором MSVC с версии 16.11, но в этой статье я расскажу не о том, как его использовать, а как с его помощью нам удалось устранить целый класс багов времени выполнения, подвесив специальную проверку во время компиляции. Давайте разберемся с этим подробнее!

Читать далее

Спортивное программирование: не все так просто, как кажется

Время на прочтение4 мин
Количество просмотров13K

Меня зовут Абай Баймуканов, я – разработчик-алгоритмист международной IT-компании Relog. Уже несколько лет увлекаюсь олимпиадными программированием, поэтому в этой статье хотел бы поделиться своим видением по этому поводу.

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

Здесь есть свой нюанс: программа может работать настолько долго, сколько не существует даже вселенная, а может сработать за долю секунды. Причем в обоих случаях результат будет один и тот же. Любой олимпиадник стремится к тому, чтобы его программа была как можно эффективнее. Для этого существуют алгоритмы и структуры данных - методы, позволяющие сделать определенные программы более эффективными с точки зрения необходимого времени или памяти компьютера.

Спектр сложности у задач по спортивному программированию достаточно широкий: от задач для новичков до задач мирового уровня для вундеркиндов. Большинство соревнований проводится практически одном и том же формате, то есть дается несколько задач, на их решение 5 часов и за это время нужно решить как можно больше.

На школьных олимпиадах обычно за каждую задачу можно получить от 0 до 100 баллов и общим результатом будет суммарный балл за все задачи, у студентов в результат идет просто количество решенных задач, а если есть участники, решившие одно и то же количество задач, то они группируют по убыванию штрафа. Чем дольше решаешь задачу или чем больше на них нужно попыток решить, тем больше штрафов за нее получишь.

Читать далее

Моделирование упаковки с использованием API SolidWorks

Время на прочтение11 мин
Количество просмотров4.3K
Одна из задач, встречающаяся при разработке новых изделий – это задача компоновки их упаковки.

image

В качестве иллюстрации этого утверждения приведем пример, в котором с такой задачей столкнулись даже IT-специалисты. Как раз на момент написания этой статьи программисты одного из подразделений ООО «Специальный технологический центр» занимались подбором комплектующих для комплекса радиоэлектронной аппаратуры, в состав которого входили серверы и автоматизированные рабочие места. Мне как конструктору в этот момент пришлось принять участие в выборе тары для укладки ЗИП (первое изображение под катом). Как могут решаться подобного рода задачи – см. далее.
Читать дальше →

Проверка фреймворка Ogre3D статическим анализатором PVS-Studio

Время на прочтение14 мин
Количество просмотров2.4K

Обычные пользователи любят графические движки, потому что с ними удобно работать. Команда PVS-Studio любит графические движки, потому что там часто попадаются интересные фрагменты кода. По просьбе одного из читателей нашего блога в этой статье будут рассмотрены результаты анализа графического фреймворка Ogre3D. Каждому по интересному срабатыванию из проекта, и пусть никто не уйдёт обиженным!

Читать далее

PProto: бинарный rpc-протокол для Qt framework (часть 1)

Время на прочтение20 мин
Количество просмотров3.3K

Думаю, не сильно ошибусь, если скажу, что каждый разработчик программного обеспечения рано или поздно сталкивается с задачей взаимодействия приложений расположенных на удаленных узлах локальной или глобальной сети. В разных проектах мне довелось поработать с DCOM, SOAP, самописным (не моим) rpc-протоколом, использующим связку json+boost.asio. Проблематика коммуникации приложений и процессов мне всегда была интересна. Пытаясь разобраться, как устроены различные механизмы взаимодействия, ставя эксперименты по сериализации данных, со временем, я пришел к решению, о котором хочу рассказать.

Читать далее

Девиации и разветвление личности: как лечить?

Время на прочтение18 мин
Количество просмотров5.9K

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

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

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

Читать далее

Свободная касса: как мы ушли от монолита и настроили межмодульное взаимодействие на RPC

Время на прочтение10 мин
Количество просмотров4.8K

Всем привет, я — Дмитрий Пестеха, ведущий разработчик С++ команды POS-систем в «Магните». В этой статье я расскажу, как мы пилили монолитное приложение Касса на модули и отлаживали их взаимодействие на RPC-JSON. Спойлер: в процессе появился новый самописный язык интерфейсов - IDL.

Читать далее

C++20 Ranges — Полное руководство

Время на прочтение8 мин
Количество просмотров43K

C++20 Ranges, также известная как STL v2, представляет из себя более эффективную замену существующих алгоритмов и технических средств STL. В этой статье мы пройдемся по изменениям, введенным Ranges (диапазоны/интервалы), обсудим представления (views), которые представляют собой новый подход к композиции алгоритмов, и рассмотрим примеры реализации FizzBuzz с использованием трех разных методов, в каждом из которых используются некоторые аспекты библиотеки Ranges.

Однако сразу следует отметить, что Ranges — это одна из фич, реализованных в C++ 20 в полуготовом состоянии. C++23 должен приблизить нас к полной поддержке всего задуманного в рамках Ranges. Поэтому в некоторых примерах будет использоваться библиотека range v3.

Читать далее

Есть ли баги в маленьких проектах, или как PVS-Studio проверял Blend2D

Время на прочтение11 мин
Количество просмотров2.5K

Мы часто проверяем большие проекты, потому что в них проще найти ошибки. А что же PVS-Studio сможет найти в небольшом проекте? Мы взяли Blend2D – библиотеку для векторной 2D-графики – и проверили своим анализатором. Предлагаем ознакомиться с тем, что из этого вышло.


0894_Blend2d_ru/image1.png


Введение


Ни для кого не секрет, что в больших проектах всегда легче находить интересные ошибки. Это обусловлено не только простым рассуждением "больше кода – больше ошибок", но и тем, что с ростом кодовой базы растёт и плотность ошибок. Поэтому и проверять мы любим большие проекты, чтобы потом порадовать себя и читателя разнообразием "жирнющих" и заковыристых ошибок и опечаток. Да и в целом всегда интересно поковыряться в огромном проекте с кучей зависимостей, legacy и прочих вкусняшек.


В связи с этим наблюдением, я захотел отойти от нашей традиции брать большие проекты для статьи. Решил взять небольшой проект и посмотреть, что в нём сможет найти PVS-Studio. Мой выбор пал на Blend2D. Я проверил ветку master, коммит c484790.

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

Slate UI Framework (UE4/5) — standalone application

Время на прочтение11 мин
Количество просмотров9.4K

Slate is written entirely in C++ and runs on all Unreal Engine 4 supported platforms. It is render interface agnostic, which allows it to be used in standalone desktop and mobile applications that do not depend on the game engine.

Gerke Max Preussner о Slate UI Framework

Последние 6 лет я много работаю с Unreal Engine 4. Вернее не с самим движком, а с его различными модулями, с помощью которых мы выстраиваем свою базу тулов и различных технических решений вокруг основного игрового проекта. Несмотря на зоопарк различных технологий, который образовался вначале, со временем наша собственная экосистема постепенно начала стандартизироваться. Всё больше ребят начали писать более качественные расширения для Unreal Editor именно на Slate UI Framework. Конечно, когда нужно сделать UI для функциональности, которую можно "впихнуть" в одну кнопку, проще реализовать это на UMG в Editor Utility widget. Но если нужно что-то посложней, например, нужна асинхронность в процессе выполнения или, например, необходимо рисовать на UI TreeView (деревья), то тут без обращения к Slate модулю - не обойтись. Так же для многих UI тулов рано или поздно встаёт вопрос о возможности их самостоятельного существования, в отвязке от конкретного проекта, а в идеале - без привязки к Unreal Editor. Про сборку Stand Alone приложения, с UI от редактора UE4/5, я и хочу вам рассказать.

Читать далее

Уроки по SDL 2: Урок 13 ввод текста и прокрутка экрана

Время на прочтение3 мин
Количество просмотров4.9K

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

код:

Читать далее

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

Уроки по SDL 2: Урок 10 изменение цвета и прозрачность текстуры

Время на прочтение2 мин
Количество просмотров2.4K

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

приступим к коду:

Читать далее

e-Legion рекомендует: интересные IT события этой осени

Время на прочтение4 мин
Количество просмотров1.2K

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

Прочь осеннюю хандру! Для поднятия морального духа и для увеличения вовлеченности в IT-просвещение мы собрали подборку интересных  IT-ивентов приближающейся осени 2021.

Читать далее

Vulkan. Руководство разработчика. Создание вершинного буфера

Время на прочтение8 мин
Количество просмотров3.9K


Я работаю переводчиком в ижевской IT-компании CG Tribe и занимаюсь переводом Vulkan Tutorial на русский язык. Оригинал тьюториала можно найти здесь.

В своей прошлой публикации я начала перевод раздела Vertex buffers, и сегодня хочу представить перевод главы, посвященной созданию буфера — «Vertex buffer creation».

Содержание
Читать дальше →

Руководство Google по стилю в C++. Часть 3

Время на прочтение12 мин
Количество просмотров21K
Часть 1. Вступление
Часть 2. Заголовочные файлы
Часть 3. Область видимости
Часть 4. Классы



Эта статья является переводом части руководства Google по стилю в C++ на русский язык.
Исходная статья (fork на github), обновляемый перевод.
Читать дальше →

Проверка BitTorrent в честь 20-летнего юбилея. Время == качество

Время на прочтение10 мин
Количество просмотров5.8K

Пару недель назад (а если быть точнее, то 2 июля 2021 года) исполнилось двадцать лет легендарному протоколу BitTorrent. Созданный Брэмом Коуэном (Bram Cohen) протокол с момента своего появления стремительно развивался и быстро стал одним из самых популярных способов для обмена файлами. Почему бы в честь этого не проверить парочку долгоживущих тематических проектов с помощью анализатора PVS-Studio для Linux?


0846_BitTorrent_ru/image1.png

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

Документирование кодовой базы. Зачем и как?

Время на прочтение10 мин
Количество просмотров39K

Недавно, на одном из митингов моей команды, была поднята проблема отсутствия документации внутри кода. Было решено назначить ответственного за ведение документации. Нужно было найти подходящие инструменты документирования, определить стиль и регламент, представить решение команде. Я решил, что возьму эту задачу на себя, так как для меня это особенно важный вопрос. Мне, как новому сотруднику, было довольно тяжело разобраться в уже существующем коде без документации, и упустить возможность повлиять на ее появление я просто не мог. В итоге, в процессе определения стандарта для нашей команды и появилась эта статья. Я подумал о том, здесь присутствуют довольно интересные мысли, поэтому решил поделится ими здесь.

Читать далее

Повышение производительности дебажных билдов в два-три раза

Время на прочтение5 мин
Количество просмотров2.6K

Нам удалось добиться значительного повышения производительности рантайма для дебажной (отладочной) конфигурации по умолчанию Visual Studio в компиляторе C++ для x86/x64. Для программ, скомпилированных в режиме дебага в Visual Studio 2019 версии 16.10 Preview 2, мы отмечаем ускорение в 2–3 раза. Эти улучшения связаны с уменьшением накладных расходов на проверки ошибок в рантайме (/RTC), которые включены по умолчанию. 

Читать далее

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