Обновить
376.72

C++ *

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

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

Разработка IoT устройства с нуля от чайника для чайников

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

Всем привет!

Меня зовут Егор - я бэкенд разработчик и работаю в бигтехе. Но я не буду рассказывать о перекладывании jsonчиков (или буду). Данная статья (надеюсь, вы оценили каламбур в названии) рассчитана на разработчиков, которые ранее слышали об Arduino или пробовали программировать под эту платформу. В ней мы рассмотрим опыт новичка в плане проектирования и разработки IoT устройства мониторинга уровня CO2 в помещении. Наша цель - сделать устройство, которым просто пользоваться и оно приносит пользу.

Читать далее

MemHawk — профилировщик памяти для многопоточных приложений

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

Практически каждому разработчику однажды приходилось искать утечки памяти в его приложении / либо же профилировать использование памяти процессом. Задача эта довольно трудоемкая и непростая.

Большинство популярных профилировщиков памяти либо дают неточную информацию (sampling), либо значительно замедляют выполнение (Valgrind, heaptrack). При этом в многопоточной среде они плохо масштабируются и требуют сложной настройки.

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

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

Спойлер - удалось ускориться по отношению к heaptrack в 30 раз.

Читать далее

Самый обобщённый живучий алгоритм

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

Путь от костылей к универсальному живучему алгоритму

В статье разбирается само устройство обобщённого алгоритма: как концептуально закладывать возможность учёта истории наблюдений, реконструкции мира и перебора альтернатив, чтобы ИИ-ассистенты/программисты могли реализовать эти механизмы под свои задачи. Детально разобран только универсальный перебор вариантов; реализация остальных особенностей предоставляется разработчику специализированное версии алгоритма.

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

Пропустить обложку через вентилятор

Project Euler. Векторное программирование и задача номер 1

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

Добавляем щепотку векторного программирования в задачки проекта Эйлер. Заодно разбираемся, как эффективно реализовать деление на константу.

Читать далее

Ошибки, которые не случились: C++ и compile‑time проверка SQL-запросов

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

В этой статье мы посмотрим, как можно реализовать полную compile‑time валидацию SQL‑запросов на основе схемы базы данных, встраиваемой прямо в код. Без магии, без рантайма, без сторонних тулов. Только стандартный C++ и ваша структура БД. Валидация таблиц, столбцов, типов аргументов и их количества — всё на compile‑time.

Представьте, если бы компилятор сам указывал «такой таблицы нет», «несуществующий столбец», «несовместимые типы» — до запуска программы. Такой подход полностью устраняет «сюрпризы» во время исполнения и исключает класс ошибок, связанных с генерацией SQL во время работы программы. Ваша программа даже не соберётся.

Читать далее

Мониторинг CPU и RAM на панели задач C++

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

Приветствую читателя этой статьи. Я студент, учусь по направлению «Приборостроение», но большую часть времени занимаюсь программированием. Все таки это меня привлекает больше. Задумывался по поводу смены ОС на Arch Linux, но пока отложил эту затею в долгий ящик. Смотрел различные ролики на YouTube и заметил, что многие пользователи ставят себе Polybar, в котором можно легко настраивать информацию, выводимую на нечто похожее на Панель задач в Windows. Тогда я подумал «А почему бы не сделать такое в винде?!» и сразу начал гуглить что к чему. Попытался найти готовые аналоги, но ничего не впечатлило, поэтому решил написать свою программу на C++.

Читать далее

Язык программирования C. Твой путь начинается здесь, самурай

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

Приветствую!

Когда мне сначала просто захотелось, а потом потребовалось и для работы изучить C++, я сильно удивился, что информации касаемо пары C/C++ информации вроде много, но она уж слишком сильно не структурирована и не систематизирована. Одно лишь объяснение указателей мне потребовалось очень много времени искать, потом я понял что такого нет. В интернете есть много объяснений и информации, но это все либо рерайт чужих статей либо просто бессвязный бред где порой кажется что сам человек не проверяет информацию либо просто сам не знает. Да и честно говоря очень мало понятных и рабочих кусков кода с объяснением решения, которое можно было бы протестировать на работоспособность.

Поэтому я решил здесь в данном блоге (Habr идеальное место для этого) собрать в кучу как свои мысли так и свой опыт. А также опыт других людей которые также использовали данный инструмент в своей работе или просто как хобби.

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

Читать далее

Как сыграть с СХД в имитацию ошибки и выйти победителем? Используем паттерны ООП на C++

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

Привет, Хабр! Меня зовут Константин Крюков, я разрабатываю систему хранения данных TATLIN.UNIFIED в YADRO. Сейчас мы с командой создаем MeyerSAN — решение, которое имитирует неисправность SAS HDD и SSD и позволяет автоматически тестировать реакцию СХД на ошибки.

Мы написали проект на новом стандарте С++ 23 и использовали паттерны объектно-ориентированного программирования. Под катом расскажу, что за решение у нас вышло, как устроена его архитектура. А еще мы вместе вспомним, зачем строить программную архитектуру тщательно и правильно (и не жалеть об утраченном времени на активную разработку).

Читать далее

Маленькое приключение в поиске ошибок. The Battle for Wesnoth

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

В этой статье мы расскажем вам о том, как путешествовали по землям Ирдии. Нас ждали приключения, полные славных сражений, побед и редких наград в виде могущественных артефактов! "Что же это за артефакты такие?" — спросите вы. Конечно же, это ошибки, найденные в коде довольно известной и крайне увлекательной игры "The Battle for Wesnoth".

Читать далее

Как вызывать C++ из Python

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

Сравнение PyBind11 vs ctypes

В принципе, можно вызывать C++ из Python двумя способами: при помощи библиотеки PyBind11 для C++, которая готовит модуль Python, либо при помощи пакета cytpes для Python, который предоставляет доступ к скомпилированной разделяемой библиотеке. Работая с PyBind11, не составляет труда совместно использовать множество типов данных, в то время как ctypes — это гораздо более низкоуровневое решение в стиле C.

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

К счастью, вызывать C++ из Python не так сложно, как может показаться на первый взгляд. Таким образом, можно в какой-то степени позаимствовать интерактивность Python при разработке кода C++.

Читать далее

Три совета, как не выучить C++ за 21 день (субъективный гайд с дополнениями)

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

Типичная проблема новичков при изучении языка программирования — они тонут в море учебных материалов. Интернет предлагает тонны статей, курсов и книг по C++, но как выбрать действительно стоящие?

Меня зовут Владислав Столяров, я руководитель команды анализа безопасности продуктов в мультипродуктовой экосистеме МойОфис. Наши решения — Документы Настольные и Документы Онлайн — во многом работают благодаря C++, так что мне есть чем поделиться. В этой статье расскажу, что делать, если вы вдруг решили залететь в плюсы, но уже чувствуете, как накрывает экзистенциальный кризис от обилия информации.

Читать далее

Fail Case: Реализация полиморфизма без virtual на C++: концепты, трейты и Ref (и почему я отказался от этого подхода)

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

Как был переработан подход к полиморфизму в C++‑фреймворке Flox: замена virtual на статически сгенерированные vtable с концептами. В статье описана архитектура, проблемы, решение и метрики прироста производительности.

Читать далее

Как создать свой парсер и AST-генератор на C++ с минимальными усилиями: знакомьтесь с QapDSLv2

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

QapDSLv2: Новый стандарт AST-heavy парсинга

QapDSLv2 обеспечивает:

Молниеносное построение AST

Полное сохранение структуры исходного кода

Простоту интерпретации и модификации грамматик

Забудьте о любы других парсерах! С помощью QapDSLv2 можно создавать компиляторы/анализаторы/форматировщики кода за минуты/часы.

Парсеры и генерация абстрактных синтаксических деревьев (AST) — это обычно долго, сложно и требует тонны шаблонного кода. Но что если я скажу, что теперь можно описывать грамматики и структуры данных одновременно и получать готовый, оптимизированный C++ код автоматически?

QapDSLv2 — новый стандарт эффективности и удобства в парсинге. Это язык описания парсеров, который избавляет от синтаксического шума, упрощает интеграцию с C++ и позволяет создавать сложные анализаторы без боли и ошибок. Забудьте о бесконечных циклах отладки и непонятных генераторах — теперь всё просто, понятно и эффективно.

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

Готовы ускорить разработку и вывести свои проекты на новый уровень?

QapGen — мощный генератор парсеров, построенный на основе QapDSLv2, который из грамматик QapDSLv2 сразу создаёт высокопроизводительный C++ парсер с типизированным AST, описанным прямо в грамматике.

t_sep{
stringbody =any(" \t\r\n");
}
using" "ast_sep;
t_value{
TAutoPtr<i_value> body;
" "?
}
t_comma_value{
","
t_value body;
" "?
}
t_array:i_value{
"["
" "?
t_value first?;
vector<t_comma_value> arr?;
"]"
" "?
}

Читать далее

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

Как работает база данных Firebird, часть 1

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

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

Читать далее

Тезисы о std::set и std::multiset в C++

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

Приветствую всех читателей! Меня зовут Максим, и я хочу поделиться с вами своими знаниями о программировании. Я не являюсь профессиональным разработчиком, и программирование для меня — это хобби и способ автоматизации рутинных задач на работе. В этой статье я расскажу вам об ассоциативном контейнере std::set и std::multiset в C++. Надеюсь, что эта информация будет полезной и интересной для всех, кто хочет узнать что-то новое о программировании.

Ну давай, удиви меня

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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


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

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

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

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

Читать далее