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

C++ *

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

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

Как в 19 лет я начал путь разработчика встраиваемого ПО

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

Привет, Хабр! Меня зовут Данила, мне 21 год, и за последние 2,5 года я успел поработать в роли разработчика программного обеспечения для встраиваемых систем — в основном на базе STM32. В этой статье я хочу поделиться тем, как я вообще пришёл в эту сферу, с чего начинал, какие грабли собрал и какие выводы сделал по пути.

Читать далее

Создаем плагин с генеративным ИИ для Unreal Engine на C++ (офлайн и онлайн версии)

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров2.7K

Вы когда‑нибудь задумывались о том, как здорово было бы, чтобы в вашей игре происходили настоящие человеческие диалоги? Представьте себе систему диалогов NPC, которая кажется невероятно реалистичной, или нарратора, который моментально реагирует на действия игроков. А может быть, вам нужен инструмент, способный генерировать уникальный контент «на лету» прямо в игре? Вне зависимости от того, создаете ли вы одиночную или многопользовательскую игру, внедрение генеративного искусственного интеллекта может сделать ваше творение намного интереснее и динамичнее. В этом руководстве я поделюсь с вами пошаговой инструкцией того, как это можно воплотить в вашем проекте.

Читать далее

СТЦ продолжает открывать мир с орбиты

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

Любителям космического контента посвящается – делимся новой порцией фотографий, сделанными нашими кубсатами III пусковой кампании. В этот раз в фокусе 12-юнитового МКА оказались такие мировые столицы, как Нью-Йорк, Париж и Брюссель.

Читать далее

Простой и эффективный супервизор на С++ с универсальным Makefile

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

Несмотря на развитие лингвистических моделей, я подумал, что моя версия супервизора может быть достаточно интересна для размещения в статье. Назначение супервизора - поднять повторно программу, которая по каким-то причинам упала с ошибкой. Причём если программа завершила работу без ошибки, то она перезапущена не будет, как и не будут создаваться логи. В логах пишется время падения и тип ошибки. Универсальный Makefile может быть интересен тем, что его достаточно закинуть в папку с исходниками, добавить необходимые пути вида:
LDFLAGS = -I/usr/include/boost
LIBS = -lboost_serialization

Читать далее

Почему C++ считает мой класс копируемым, если его нельзя скопировать?

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров6.5K

Рассмотрим следующий сценарий:

template<typename T>
struct Base
{
// Есть конструктор по умолчанию
Base() = default;

// Некопируемый
Base(Base const &) = delete;
};

template<typename T>
struct Derived : Base<T>
{
Derived() = default;
Derived(Derived const& d) : Base<T>(d) {}
};
// Это assertion выполняется?
static_assert(
std::is_copy_constructible_v<Derived<int>>);

Почему выполняется это assertion? Очевидно, что скопировать Derived<int> нельзя, ведь при этом мы попытаемся скопировать некопируемый Base<int>. И в самом деле, если попробовать скопировать его, то мы получим ошибку.

Читать далее

Зажигаем миллиард цветов миллионом строк

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

Надругательство над C#, C++ и HLSL, игрища с булками и буферами, тройная полиглотность, SIMD, пепекторы, DirectX, экономия 800 Тб ОЗУ, новая парадигма программирования, многопроцессностьбыстрая степень и многое другое.

В этой части я расскажу, как делал софт на собственном фреймворке, который управляет ядерной подсветкой и механической видеостеной.

Осторожно, трафик!

Низкоуровневый скриптинг на C++ для игровых движков

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

Я постарался охватить только основы, но текст всё равно получился очень длинным.

libriscv — это зрелый эмулятор RISC-V, который в настоящее время используется в игровых движках. Насколько мне известно, это единственный эмулятор, в котором основной акцент делается на обработке задержек, а также предоставляются специализированные решения и инструменты для выполнения быстрых вызовов при обращении с функциями — как входящих, так и исходящих. Причём, всё это заключено в безопасной песочнице. Задержки, наблюдаемые в libriscv,  гораздо ниже, чем в эталонных эмуляторах.

Меня многие спрашивали, как им пользоваться, но здесь интереснее то, как вообще может прийти в голову мысль писать скрипты на C++ — не слишком ли сложно это будет? Оказывается, нет, не очень. Вот уже несколько лет я пишу на C++ скрипты для одной большой и одной не очень большой игры, и меня почти не посещало ощущение, что виной каким-то возникающим при этом проблемам являются язык C++ или связанные с ним скриптовые API. Я много лет программирую на Lua, а до этого пользовался обычным C. Но сейчас современный идиоматический C++ — то, что мне нужно. Причём, я могу писать на этом языке как в самом игровом движке, так и за его пределами, при этом опираясь (буквально) на одни и те же абстракции и оперируя одинаковыми структурами данных. Наконец, C++ просто очень мощный. Правда, я признаю, что о вкусах не спорят, и при работе с C++ также не обойтись без компромиссов.

Читать далее

Фильтрация предупреждений PVS-Studio, выявляющих критические ошибки (согласно классификации ГОСТ Р 71207-2024)

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров881

ГОСТ Р 71207-2024 "Статический анализ кода" выделят класс дефектов в коде, называемых критическими ошибками. При разработке безопасного программного обеспечения (РБПО) такие дефекты должны в обязательном порядке выявляться и исправляться в приоритетном режиме. Статический анализатор PVS-Studio разрабатывается с учётом этого стандарта и позволяет выявлять все типы критических ошибок в коде программ, написанных на языках C, C++, C#, Java. Рассмотрим эти типы предупреждений и как их можно выделить среди других предупреждений, выдаваемых анализатором.

Читать далее

Настройка отладки C++ проекта через GDB в VSCode

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров3.9K

Если вы работаете над собственными библиотеками на C++, особенно такими, где важна строгая типизация и предсказуемое поведение компилятора, то наверняка сталкивались с ситуацией, когда Microsoft Visual Studio (MSVS) сама "подчищает" за вами типы или подключает лишние зависимости. Иногда это удобно, но при разработке низкоуровневого кода это может мешать.

В этой статье я расскажу, как перейти с MSVC на MinGW, правильно настроить CMake и использовать GDB для отладки вашего C++-проекта прямо в Visual Studio Code.

Читать далее

Dart Native Assets: Полное руководство от новичка до профи

Уровень сложностиСложный
Время на прочтение14 мин
Количество просмотров1.8K

Представьте, что у вас есть Dart-программа, и вы хотите использовать готовую библиотеку, написанную на C, C++, Rust или другом языке. Раньше это было сложно - нужно было вручную компилировать библиотеку, следить за тем, чтобы она попала в нужное место, и писать много дополнительного кода.

Native Assets - это система, которая автоматизирует весь этот процесс. Она позволяет вашему Dart-пакету "включать в себя" нативный код и автоматически его компилировать и подключать.

Читать далее

Не стоит пугаться машинного кода

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

Моим первым языком программирования был ActionScript. Написание кода для Macromedia Flash максимально далеко от голого железа, и эта специфика работы глубоко засела в моём сознании. В результате меня интересовали преимущественно высокоуровневые языки для веб-программирования. Низкоуровневые же казались непостижимыми. Со временем я постепенно из разных источников узнавал о них всё больше, но это моё убеждение оставалось прежним. Низкоуровневые языки пугают, и машинный код подтверждал это наглядно. Когда я обращался к Google с запросом «понятный машинный код», то результат выдачи чаще представлял нечто пугающее и отталкивающее, нежели полезное для обучения.

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

Машинный код вовсе не страшен. Если вы можете обеспечить, чтобы документ JSON соответствовал схеме JSON, то без проблем сможете писать машинный код.

Читать далее

Метапрограммирование 2.0: макросы и генерация кода в современном мире

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

Забудьте про скучные «Hello, World». Макросы и шаблоны давно стали полноценными инструментами архитектора кода: от хитрых C++-шаблонов до процедурных макросов Rust и Java-аннотаций, автоматически генерирующих целые фреймворки. 

В этой статье мы рассмотрим примеры, где metaprogramming избавляет от рутины и экономит часы работы над проектом. Детали как всегда под катом.
Читать дальше →

Отсутствие динамической аллокации в embedded мире

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

Когда мы разрабатываем под embedded, нам приходится сталкиваться с такими флагами компиляции как -nostdlib -fno-exceptions -fno-rtti.

Во многих средах нет malloc/free (new/delete) и вообще нет встроенного выделения памяти.

Использование «больших» стандартных контейнеров C++ (например, std::vector) нередко исключено

В результате приходится решать задачу «ручного» управления памятью. Ниже рассмотрим два подхода:

Читать далее

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

Жизнь в консоли или как я полюбил боль

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров9.2K

Много лет был адептом GUI и вот уже ворочу нос от этой смердятины. Всё постоянно давит, всё не нравится. Если открываю VS Code или QtCreator - 10 минут вспоминаю как этом пользоваться. Хочу поделиться с тобой своей историей...

Все на дно!

Кто быстрее? Тестируем скорость языков программирования на Эльбрусе

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

Приветствую! Я разработчик в компании НИЦ ЦТ. Мы разрабатываем операционную систему, адаптированную под российские процессоры Эльбрус. Процессоры Эльбрус работают на своей оригинальной архитектуре, которая имеет свои преимущества и недостатки. В частности, интерпретируемые языки программирования не блещут производительностью. Вот мы и решили провести сравнительное тестирование различных языков, компиляторов и интерпретаторов чтобы выяснить, что лучше использовать для разработки под Эльбрус.

В статье представлены результаты бенчмарка Programming language benchmark, основанного на решении набора задач идентичными алгоритмами, реализованными на разных языках. Это позволяет оценить эффективность генерируемого компиляторами (или интерпретаторами) кода для выбранной архитектуры, поскольку скорость выполнения напрямую зависит от архитектурных особенностей процессора. Учитывая использование одного ядра процессора в тестах, результаты отражают потенциал оптимизации кода на низком уровне для каждого языка программирования в рамках заданной аппаратной платформы. Полученные данные позволят разработчикам делать более обоснованный выбор языка программирования для задач, критичных к производительности, с учетом специфики целевой архитектуры.

Читать далее

Как я начал писать свой проект на Unreal Engine 5 и что из этого вышло

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

История начинается в далёком 2019 году, а может, и немного раньше. Уже два года я благополучно перестал работать на дядю, ибо понял, что много денег не заработаю, а здоровье гробится конкретно. А рабство — это не моё. Хотя для страны, откуда я родом, 2500$ в месяц, из которых 500$ уходило на аренду жилья и еду, — это неплохо. Остальное копи, откладывай, трать по желанию. Не бедствовал.

Осень 2017-ого года. Я увольняюсь и лечу смотреть мир, в далекую Индию (тема целой отдельной статьи). Золотое время до макаронобесия. Тогда у меня был слабенький ноутбук 10"(На Unity я буду разрабатывать, используя настольный PC), который я сменил на acer n3700 cpu году так в 2019-ом. И вот мне пришло в голову разработать свой AI, когда ChatGPT ещё даже не маячил на горизонте и не стал мэйнстримом. Шла разработка на java, языке, который я использовал в своей карьере. Но быстро понял, что java не то, что нужно, особенно для UI визуализации графов данных и графа знаний AI.

Читать далее

Руководство по сборке Qt под Windows из исходников с MinGW

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров6.4K

Официальный способ установки готовых бинарников Qt - через онлайн инсталлятор. Однако он требует обязательной регистрации. Да еще и недоступен на территории РФ. Есть и другие способы получить бинарники, или собрать с компилятором от Microsoft, однако не всегда эти способы приемлемы. Сборка из исходников под Windows может оказаться несколько нетривиальна для новичков, потому сделал небольшую инструкцию по сборке Qt 5 и Qt 6. А так же рассмотрена базовая настройка QT Creator.

Читать далее

Лаконичный макрос defer для C++17

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров6.7K

Ручное управление ресурсами в низкоуровневом си-подобном коде на C++ — довольно хлопотное занятие. Создание достойных RAII-врапперов для каждого используемого сишного API не всегда практично, а использование подходов с goto cleanup или множеством вложенных if (success) вредит читаемости кода.

Макрос defer как никогда кстати! Отложенная лямбда будет выполнена при выходе из области видимости, независимо от того, будет ли выполнен return, брошено исключение, или даже выполнен goto наружу. Данный макрос по-настоящему zero-cost и не зависит от рантайма C или стандартной библиотеки, поэтому его можно использовать даже в разработке под ядро ОС.

Читать далее

UE Enhanced Input System: настраиваем управление в игре (до и после версии 5.3)

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров1.5K

Мы рассмотрим два базовых подхода к созданию системы переназначения ввода в Unreal Engine 5 с плагином Enhanced Input System.
Для версий UE 5.3 и выше можно использовать встроенную систему настроек, а для более ранних версий - разработать собственную реализацию.

Читать далее

Управление зависимостями на C++ с помощью vcpkg registry и сервера кеширования

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

Здравствуйте, дорогие читатели Хабра! Я давно хотел поделиться своими знаниями о работе с реестрами под ключ, так как нигде нет четкой и последовательной информации по этой теме. Сегодня мы разберем, как управлять зависимостями через реестры vcpkg и как кэшировать их на сервере.

Читать далее

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