Как стать автором
Поиск
Написать публикацию
Обновить
146.7

C++ *

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

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

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

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

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

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

Читать далее

Новости

Когда осязание встречает виртуальность: мультисенсорная обратная связь в VR через тактильные перчатки и ROS 2

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

В статье подробно рассматривается опыт интеграции высокоточных тактильных перчаток в VR‑окружение при помощи ROS 2. Автор делится практическими наблюдениями, описывает архитектуру системы, принципы синхронизации данных и пример реализации на C++ и Python. Материал будет интересен тем, кто хочет заглянуть «под капот» реального прототипа мультисенсорного взаимодействия и избежать типичных ловушек в организации низкоуровневой передачи тактильных сигналов.

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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 мин
Количество просмотров1.2K

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

Читать далее

Языки программирования на все случаи жизни. Часть 1

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

В программировании существует десятки разных направлений, языков ещё больше, около 9000. Эта статья будет интересна для тех, кто только-только начинает свой путь разработчика или же для тех, кому просто интересно. К языку будут прилагаться библиотеки и фреймворки, которые нужны для обсуждаемых направлений (например, django для python в бэкэнде).

Читать далее

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

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

Оптимизация управления задачами в Zephyr OS с помощью Thread Pool

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

Управлять потоками в C для каждой мелкой задачи — это боль. 😤 Даже самые простые задачи вынуждают возиться с k_thread_create, ждать завершения, чистить ресурсы — и всё это превращает твой код в бесконечную головную боль. 🤬

К счастью, в Zephyr OS есть спасение — Thread Pool: набор заранее выделенных потоков, которые берут задачи из очереди и выполняют их без лишнего мусора. Этот подход экономит ресурсы, время и твою нервную систему.

Читать далее

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать далее

Taming Hard Faults in Zephyr OS: Практическое руководство для embedded-разработчиков

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

🚨 Что такое Hard Fault простыми словами

Hard Fault — это критическая ошибка процессора.
Проще говоря, это ситуация, когда микроконтроллер встречает что-то настолько «невозможное» для себя, что не может продолжить выполнение программы.

Типичный пример — попытка обратиться к памяти, которой не существует, или выполнение запрещённой инструкции.

Когда это происходит, процессор сразу передаёт управление специальному обработчику — Hard Fault Handler.

Читать далее

Spinlock vs. Mutex vs. Semaphore: Разбираемся в синхронизации с Zephyr OS

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

Всем привет! Сегодня хочу углубиться в одну из самых важных тем в мире Zephyr OS — синхронизацию потоков и задач. Если вы хоть раз работали с k_thread_create, гоняли потоки туда-сюда и ловили bus fault, вы меня понимаете.

Когда задача одна — всё просто. Но как только вырастает многопоточность, задачи начинают драться за общий ресурс — и тут без надёжной синхронизации не обойтись. У Zephyr OS есть три главных инструмента для этого: spinlock, mutex и semaphore. Каждый со своим характером и подводными камнями.

Читать далее

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

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

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


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

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

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

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

Читать далее

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

Время на прочтение16 мин
Количество просмотров8.6K
Привет, Хаброжители!

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

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

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

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

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

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

Читать далее
1
23 ...

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