ЭТО БЛОГ НБРК

ДБРО ПОЖА В МОЙ БЛОГ . ТУТ Я ПУБЛ ВСЯК РАЗН ЗПСИ И ЗМТК О ПРОГ , ЯЗКЕ ИЛИ ДАЖЕ О ЖИЗН . В ОСНО ДЛЯ СЕБЯ , ЧТОБ ПТОМ СМТР ИЗ БУДЩ .

НЕКТ МОИ ТЕХН ПРОЭ ЕСТЬ НА ГТХБ , И ТУТ Я ИНГД ПУБЛ ПРОЧ ИДЕИ ИЛИ ДОП ТЕОР ДОКИ ПО НИМ . В НАСТ МОМТ Я ИССЛ ВОЕН ИГРЫ И КОМП СИМУ .

КСТА , ОЧЕН МНОГ ХОРШ СЛОВ УМЕЩ ВСГО В ЧТРЕ СИМВ , НАПР UNIX, СИ++ ИЛИ НБРК .

Сигналы и слоты: асинхронные, тип-безопасные коллбэки с libsigc++

Введение Концепция сигналов/слотов (Signals/Slots), т.е. асинхронных коллбэков (callback) широко применяется в различных программных архитектурах: от системного уровня до высокоуровневых многокомпонентных библиотек вроде GUI (например, QT) или игровых движков. В общем виде идея заключается в следующем: Объекты A и B работают параллельно. Объект A регистрирует свой некоторый метод или анонимную функцию (callback-код) у объекта B. В момент регистрации объект A может передать также данные, которые должны быть доступны callback-коду. Объекты продолжают работу параллельно (без специальной взаимосвязи либо синхронизации).
ЧТАТ ПОЛН →

C++: горизонтальный полиморфизм с dynamic_cast

Введение Предположим, что мы разрабатываем приложение для военной симуляции, в котором имеется поддержка разнообразных по своим возможностям и характеристикам боевых платформ. В дизайне нашей системы мы решили отказаться от громоздкой иерархии наследования в пользу набора независимых друг от друга чистых виртуальных классов (интерфейсов), подмножество которых реализуется конкрециями через множественное наследование C++ (которое очень даже безопасно и применимо в случаях с несвязанными интерфейсами). C++ предоставляет оператор dynamic_cast<T>() для безопасного перехода (т.е. преобразования указателя) между интерфейсами, имплементированными данной конкрецией.
ЧТАТ ПОЛН →

Простая сериализация/десериализация полиморфических данных в C++

Введение Предположим, что мы, как это часто бывает, имеем вектор интерфейсов к конкретным объектам: WidgetClassA w1; WidgetClassB w2; std::vector<WidgetInterface*> wifv {&w1, &w2, ...}; /* * Прямое манипулирование конкрециями */ w1.setWidgetAParam("Test"); w2.setWidgetBSize( w1.getWidgetASize() ); // ... /* * Манипулирование разными виджетами через абстрактный интерфейс виджетов */ for (WidgetInterface* wif : wifv) { wif->widgetDoSomething(); size_t i = wif->getSize(); // ... } Мы хотим (де)сериализовать все объекты, на которые указывают интерфейсы (чистые виртуальные классы) в векторе wifv, т.
ЧТАТ ПОЛН →

Простая и комфортная разработка на C++ в vim

Вкратце В данной заметке я приведу свой текущий ~/.vimrc, настраивающий как общее поведение самого редактора vim/gvim (для редактирования любого текста), так и дополнительный функционал для разработки программ на C/C++. Сам по себе vim “из коробки” отлично подходит для редактирования кода, однако несколькими дополнительными модулями из данного текстового редактора можно сделать мощнейшую среду разработки (IDE) промышленного класса. Менеджер модулей vim-plug автоматически скачивает и обновляет плагины, поэтому для воспроизведения всей моей IDE фактически потребуется лишь один файл ~/.
ЧТАТ ПОЛН →

Простая и удобная среда разработки Haskell-кода в vim

Текстовый редактор vim/nvim очень хорош! Разумеется, для такого популярного редактора существует множество модулей, существенно помогающих в разработке программного кода на бесчисленных языках программирования. В данной короткой заметке я набросаю простой и быстрый вариант рабочего окружения (нужные модули для vim, их настройка, внешние программы) для комфортного программирования на Haskell в текстовом редакторе vim или nvim (все настройки ниже должны быть полностью совместимы как с классическим vim версии 8 и выше, так и с neovim).
ЧТАТ ПОЛН →