Обновить
256K+

C++ *

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

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

Интеграция Flutter Mobile SDK в ОС Аврора

Уровень сложностиСложный
Время на прочтение8 мин
Охват и читатели5.9K

Аврора — это отечественная мобильная ОС, развиваемая компанией «Открытая мобильная платформа». Она построена на базе Linux и унаследовала часть решений от Sailfish OS, но за последние годы превратилась в самостоятельную, зрелую платформу. Пятая версия, вышедшая в 2024 году, ориентирована не только на корпоративный сектор, но и на массового пользователя. В ней — переработанный интерфейс, поддержка планшетов, 64-битная архитектура, повышенная устойчивость и растущая экосистема приложений.

И вот в эту экосистему мы решили встроить наш Flutter Mobile SDK. В этой статье мы — тимлид Mobile SDK в 2ГИС Александр Максимовский и Flutter-разработчик @Sameri11 Михаил Новосельцев — расскажем про технические детали адаптации.

Читать далее

Оптимизация языковой модели Mamba для выполнения на CPU

Уровень сложностиСложный
Время на прочтение4 мин
Охват и читатели5.9K

Как оптимизировать модель Mamba для выполнения на CPU? Ускоряем код в 20 раз по сравнению с PyTorch, нарушая в процессе все правила оптимизации.

Читать далее

Как мой формат может решить проблему совместимости инновационным способом

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

Всем привет, это снова тот разработчик который разработал формат.pi

Сегодня расскажу, как формат может решить проблему совместимости с внешними программами.

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

Ранее обсуждал два потенциальных пути интеграции с такими инструментами, как Adobe Photoshop:

«Имитация формата» Генерация псевдо‑PSD файлов, которые хранят PIX‑данные в метаданных

Недостаток: Этот подход фундаментально ненадежен, хрупок и зависит от недокументированного поведения стороннего ПО. Он не подходит для профессионального использования.

«Традиционный плагин» (The Standard): Создание панели с кастомным интерфейсом для редактирования параметров PIX.

Недостаток: Такой подход создает разрозненный пользовательский опыт (UX), заставляя пользователей переключаться между нативными инструментами и чужеродным интерфейсом плагина, что снижает продуктивность.

Оба этих пути требуют компромисса либо в надежности, либо в удобстве использования. Поэтому формулируем третий, гибридный путь, который объединяет сильные стороны обоих подходов, устраняя их недостатки.

Концепция: Гибридная модель взаимодействия (Hybrid Interaction Model)

Это архитектурный подход, при котором плагин PIX действует как интеллектуальный посредник, создавая для пользователя полностью нативный опыт.

Читать далее

Асинхронная обработка ошибок – это сложно. Пример на CUDA

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

Или как я научился не беспокоиться из-за cudaGetLastError() и просто признал её нежелательной


Любому, кто сталкивался с проектированием API, приходилось мучиться над вопросом, как лучше всего распространять ошибки к вызывателям функций. Эта проблема появилась ещё раньше, чем термин «API». Даже несколько десятилетий назад (скажем, 30+) проектировщики интерфейсов умели отделять возвращаемые ошибки от прочей полезной нагрузки в рамках тех функций, которые доставляют эту информацию вызвавшему их узлу.
Читать дальше →

Профайл-виджет для игр

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели1.8K

Привет! Хочу рассказать о небольшом виджете профилирования на ImGUI для игр. Под катом можно узнать о функционале и реализации. А так же заполучить сорцы!

Читать далее

Книга: «Сетевое программирование. От основ до приложений»

Время на прочтение16 мин
Охват и читатели24K
Привет, Хаброжители!

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

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

FastCGo: как мы ускорили вызов C-кода в Go в 16,5 раза

Уровень сложностиСложный
Время на прочтение19 мин
Охват и читатели15K

В Deckhouse Prom++ мы переписали ядро хранения и обработки горячих данных на C++, при этом вся оркестрация и периферия остались в Prometheus на Go, что позволило сохранить полную совместимость с Prometheus. Для частых вызовов кода C++ мы использовали механизм CGo, однако первые тесты показали, что производительность CPU практически не улучшилась из-за его медлительности. В итоге мы переписали CGo, создав собственный механизм вызова.

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

Читать далее

C++ Event System от идеи до реализации

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

Event System на C++: реализация без макросов, сложной обвязки и непонятного синтаксиса. Только чёткий и управляемый код.

Читать далее

Встреча ISO C++ в Софии: С++26 и рефлексия

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

Привет! На связи Антон Полухин из Техплатформы Городских сервисов Яндекса, и сейчас я расскажу о софийской встрече Международного комитета по стандартизации языка программирования C++, в которой принимал активное участие. Это была последняя встреча, на которой новые фичи языка, с предодобренным на прошлых встречах дизайном, ещё могли попасть в C++26.


И результат превзошёл все ожидания:


  • compile-time-рефлексия
  • рефлексия параметров функций
  • аннотации
  • `std::optional<T&‍>`
  • параллельные алгоритмы
Об этих и других новинках расскажу в посте

CLL в ISPA: Семантические действия просто и мощно

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

CLL в ISPA — переносимый язык семантических действий для генераторов парсеров. Объявление переменных, условий и циклов, генерация AST и кода на C++ без привязки к языку парсера. Пример, разбор и сравнение с ANTLR, Bison.

Читать далее

О векторном вычислении экспоненциальной функции

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

Как вычислить экспоненциальную функцию быстро и с минимальной погрешностью? Пишем векторизованный код.

Читать далее

Программа для человекоподобного робота

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

В январе 2025 года я решил попробовать создать человекоподобного робота. Пока готова только одна рука без датчиков (рецепторов).

Читать далее

Преобразование JSON в объекты C++ на этапе компиляции: демонстрация возможностей принятой в C++26 рефлексии

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

На прошлой неделе в Софии, столице Болгарии, закончилась работа над стандартом C++26, который помимо контрактов, std::execution и всего прочего теперь включает и рефлексию.

В этой статье будет продемонстрирован один из примеров её использования: преобразование строк в формате JSON в объекты C++ на этапе компиляции.

Читать далее

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

Портирование фреймворка ROOT на архитектуру e2k

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели3.1K

Современная наука невозможна без компьютерных вычислений — от обработки результатов измерений до моделирования процессов. Одним из наиболее широко используемых инструментов для вычислений в ядерной физике и физике высоких энергий является фреймворк ROOT, разрабатываемый в CERN.

Собственная архитектура e2k с очень длинной машинной командой VLIW не позволяет отечественным процессорам Эльбрус без портирования нативно запускать программное обеспечение, в том числе и ROOT.

В статье рассмотрим "айсберг" проблем, с которыми пришлось столкнуться в ходе портирования ROOT, а такжк сферу и примеры его применения.

О портировании и тестах ROOT читайте далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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>. И в самом деле, если попробовать скопировать его, то мы получим ошибку.

Читать далее

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

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

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

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

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

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

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

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

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

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

Читать далее