Все потоки
Поиск
Написать публикацию
Обновить
194.36

C++ *

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

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

Уроки по SDL 2: Урок 8 — прозрачный фон

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

Дисклеймер: почему собрался это делать - потому что нет нигде нормального обучения, для С\С++, поэтому все бросают это дело, так как невозможно разобраться, просто ужас.

Читать далее

Каналы на корутинах С++

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

В предыдущей статье я описал простой путь создания генераторов на корутинах С++. На мой взгляд генераторы неплохо демонстрируют работу с такими объектами как coroutine_handle и promise_type. На этот раз речь пойдет об awaitable объектах — еще одной неотъемлемой части поддержки корутин в С++. А рассматривать мы их будем на примере реализации каналов, аналогичных каналам в GoLang. Как С++ разработчик, я не в восторге от многих решений принятых в GoLang, но в их каналы влюбился с первого взгляда. Итак, приступим!

Читать далее

MISRA C: борьба за качество и безопасность кода

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

Пару лет назад в статическом анализаторе кода PVS-Studio появился ряд диагностических правил для проверки соответствия текста программ стандарту MISRA C и MISRA C++. Увидев интерес и собрав feedback, команда разработчиков стала дальше развивать анализатор в этом направлении. В статье будет рассказано про стандарт MISRA C/C++, отчёт MISRA Compliance, про то, что мы уже успели сделать и что собираемся достичь до конца года.


0866_MISRA_C_ru/image1.png

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

Асинхронность в С++20. Доклад в Яндексе

Время на прочтение14 мин
Количество просмотров29K
Привет, это Григорий Демченко из WhatsApp. Мой доклад посвящён использованию сопрограмм в C++20. Я не стал говорить про низкоуровневые примитивы и то, как компилятор поддерживает сопрограммы и преобразовывает соответствующий код. Вместо этого акцент сделан на практическом применении сопрограмм для решения конкретных задач высокопроизводительных масштабируемых систем. Это именно то, ради чего создавались сопрограммы в новом стандарте, и то, с чем разработчик будет иметь дело в процессе проектирования и программирования. Я постарался рассмотреть конкретные примеры и проблемы, с которыми можно столкнуться при использовании полностью асинхронного подхода.

— О чём я сегодня расскажу? Первое — введение в асинхронность. Далее мы рассмотрим примитивы, которые можно использовать в новом стандарте, и интеграцию с планировщиками. Также немаловажным аспектом будет являться работа со старым кодом, если мы пишем новый код с использованием нового подхода. Затем я покажу бонус, достаточно интересный и необычный. И подведём итоги того, что у нас получилось.
Читать дальше →

Vulkan. Руководство разработчика. Загрузка данных через промежуточный буфер

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


Всем привет! Для тех, кто со мной не знаком, я переводчик в IT-компании CG Tribe в Ижевске. Здесь я делюсь переводами Vulkan Tutorial на русский язык.

Сегодняшняя публикация посвящена переводу статьи из раздела Vertex buffers, которая называется Staging buffer.

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

Оптимизированный доступ к GPIO. Или GPIO как constexpr класс. С++

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

Добрый день, жители Хабра. Данный пост будет посвящен программированию на C++, и использованию constexpr объектов с целью повышения уровня удобства и одновременно оптимизации кода с точки зрения размера и производительности.

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

Читать далее

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

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

Этот текст предназначен для тех, кто только осваивает программирование. Я читаю лекции по C++ на первом курсе местного университета, и в качестве практикума предлагаю запрограммировать любую игру (не выношу проектов типа "софт бронирования книг в местной библиотеке"). Соответственно, чтобы помочь начинающим, я сделал некоторое количество заготовок, с которых можно стартовать свой проект. Например, заготовку олдскульного 3д шутера в 486 строк C++ я уже описывал, а вот тут можно посмотреть, что из неё сделали первокурсники.


В этот раз всё будет ещё проще, я хочу сделать заготовку под простейший платформер, вот так выглядит результат:



На данный момент проект содержит менее трёхсот строчек цпп:


ssloy@khronos:~/sdl2-demo/src$ cat *.cpp *.h | wc -l
296

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


Итак, поехали!

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

Разминка мозгов: свой массив на c++ без malloc

Время на прочтение2 мин
Количество просмотров7.5K
Пришла мне в голову интересная задачка: реализовать свой массив на c++.

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

Слишком просто. Давайте обойдемся без кучи. Никаких malloc и new. Можно ли тогда сделать массив?
Да, можно ли?

Генераторы на корутинах C++

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

Я уже пару лет как развлекаюсь написанием различных программ на C++ с использованием корутин. Но до сего момента это были асинхронные приложения. Я активно использовал co_await, но ни разу еще мне не понадобился co_yield. И вот, после трех дней вынужденного ничегонеделанья в больнице, я решил этот пробел восполнить и попробовать написать собственный генератор. А заодно и получше разобраться с promise_type и coroutine_handle

Читать далее

От копии аркады 90-х на отдельном носителе до полноценной компьютерной игры со своим геймпадом

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

Привет, Хабр!

Наверняка в фильмах или сериалах, а может быть даже на собственном опыте, вы сталкивались с игровыми автоматами. Мы тоже, и однажды у нас появилась идея создать современную версию игры, похожую на всеми любимую космическую аркаду Blasteroids. А чтобы вдвойне воплотить наш замысел в жизнь, мы сделали два режима управления игрой, один из которых — с помощью Ардуино, играющего роль маленького переносного геймпада, а другой — с помощью клавиатуры.

Читать далее

Как я писал Биномиальную кучу

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

Я сейчас изучаю продвинутые структуры данных и в один прекрасный вечер я решил собирать алгоритмы и структуры данных к себе на гитхаб (и до сих пор это делаю). Захотел я сделать так, чтобы сделать всё шаблонным, если что-то мне резко понадобится, то я смог за считанные секунды добавить себе шаблонный класс структуры данных или шаблонную функцию алгоритма и использовать. Звучит замечательно, особенно на контесты с codeforces.

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

Читать далее

Пакетный обмен данными по UART

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

На сегодняшний день существует много способов организовать обмен данными между Desktop-приложением и устройствами на микроконтроллерах: Wi-Fi, Bluetooth, RF, USB, преобразователи интерфейсов и т.д.

В большинстве из вышеперечисленных вариантов реализован пакетный обмен данными между хостом и устройством. Передаваемые данными с гарантией целостности и доставки будут переданы от передатчика к приемнику.

В случае использования интерфейсов RS-232, RS-485, RS-422 или чистого UART организация пакетного обмена данными ложится на программиста.

В данной статье я хотел бы рассказать о своей реализации обмена данными между устройствами.

Читать далее

Как я портировал DOS игру

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

Решил портировать одну старую давно забытую игрушку с DOS на современную платформу. Эта игра, в своё время, привлекала ураганным геймплеем, неплохой разрушаемостью, возможностью включить всё оружие одновременно и устроить настоящий бедлам. В 2021 году играть в такое всё ещё интересно, но делать это в родном разрешении 640х480, как-то не очень. Поэтому решил портировать игру и накатить хай-рез патч. Получилось!

Читать далее

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

Любопытные извращения из мира IT, или зачем мы JS в C++-код вкомпилили

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

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

Мы занимались разработкой... скажем так, системы отображения интерактивного контента для рынка одной азиатской страны. Пользователь имел "умное устройство", например, ТВ-приставку или смарт-телевизор, а "интерактивный контент" представлял собой по сути дела html/js/css-приложение, которое прилетало на устройство с трансляции или из интернета и отображалось в прозрачном окне поверх видео. В качестве веб-движка использовался модифицированный Blink из гугловского Chrome.

И вот, в один прекрасный день после какого-то из обновлений, один наш партнер (читай "поставщик контента") обратился к нам с проблемой: что-то не работает.

Читать далее

Создание статической библиотеки на С++ для работы с большими числами

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

Я всегда слышал, что с библиотеками в С++ что-то не так, как и с ограничением максимального целочисленного значения, да и вообще то, что язык сложный и непонятный. Что же, сегодня, мы начнём писать собственную библиотеку больших чисел, полностью своими руками c 0, и узнаем, так ли страшен С++, как его малюют?

Если вы не разбираетесь в С++, не переживайте, эта статья имеет нулевой порог вхождения. Мы начнём с лёгкого, но вы даже не заметите, как начнёте разбираться в более сложных и непонятных, на первый взгляд, вещах. Главное, писать код логично. Думаю, данная статья будет интересна не только начинающим, ведь я постарался затронуть достаточно много тем. (для старожилов: моя цель не сделать оптимизирование или быстрее, а показать, что С++ не такой уж и сложный язык программирования. И да, я знаю, что существуют другие библиотеки, которые делают это быстрее и лучше. И да, было бы круче, если бы мы использовали булевую алгебру. И да, С++ про вечную оптимизацию, но это статья не про это. Спасибо.)

За сегодня мы узнаем, что такое: Перегрузка функций/конструкторов, прототипы функций, обработка исключений, пространство имён, псевдонимы типов, заголовок.h, как пользоваться отладчиком и как писать продвинутые/красивые комментарии. Пристёгивайтесь, будет безумно интересно.
Читать дальше →

Зачем С++ в Такси? Доклад Яндекса

Время на прочтение21 мин
Количество просмотров18K
Бэкенд первой версии Яндекс.Такси, которая вышла в 2011 году, был написан на Python. Мы довольно долго не меняли основной язык, но постепенно пришли к идее о необходимости С++ в стеке технологий. Перед вами доклад о том, что мы переписали в первую очередь и почему, а также о трюках С++, которые помогают нам справляться с ростом.

— Добрый день. Меня зовут Александр Голубев, и сегодня я вам расскажу, зачем C++ появился в Такси.
Читать дальше →

3D Graphics Rendering Cookbook

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

В августе этого года, после полутора лет напряженной работы, наконец-то вышла наша третья книга (про первую и вторую уже были посты на Хабре) ориентированная на разработку игр: 3D Graphics Rendering Cookbook: A comprehensive guide to exploring rendering algorithms in modern OpenGL and Vulkan.


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

5 любопытных примеров лямбд в C++: рекурсия, constexpr, контейнеры и многое другое

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

Пожалуйста, посмотрите мою небольшую статью в блоге, где я покажу вам несколько интересных примеров лямбд. Знаете ли вы, как написать рекурсивную лямбду? Хранить их в контейнере? Или вызывать во время компиляции?

Смотрите в статье.

Читать далее

Микроконтроллер + компьютер + своё программное обеспечение

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

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

Читать далее

Зачем нужен отчёт MISRA Compliance и как его получить в PVS-Studio?

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

Если вы не понаслышке знаете о MISRA и хотели бы понимать, соответствует ли ваш проект какому-то из стандартов ассоциации MISRA, то есть решение. Имя ему - MISRA Compliance. С недавних пор PVS-Studio научился генерировать отчёт соответствия по этому стандарту, и хочется поделиться тем, как это делается. Возможно, кому-то это упростит жизнь.

Читать далее

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