Обновить
310.3

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.2K

Сравнение 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 мин
Охват и читатели3.4K

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

Читать далее

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

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

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.9K

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

Читать далее

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

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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


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

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

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

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

Читать далее

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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


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


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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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