Обновить
306.26

C++ *

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

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

Time Limit Exceeded это не только про сложность алгоритма

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

Решал алгоритмическую задачу. Написал код со сложностью O(n), работает правильно, но Leetcode посчитал, что это слишком долго. Посмотрел в решения, там тоже O(n), но код принимается, почему так?

Давай разбираться

Мощный инструмент для работы с GCOV покрытием кода C/C++

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

Привет, Хабр.

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

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

Читать далее

Проверка игрового движка qdEngine, часть вторая: упрощение C++ кода

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

Ищем баг
В этой статье мы рассмотрим, как статический анализатор PVS-Studio воодушевляет заняться рефакторингом кода. Ведь чем короче, проще и понятнее код, тем меньше в нём ошибок.

Читать дальше →

Динамическая JIT компиляция C++

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


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


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


Так, на днях искал материалы про JIT компиляцию C++ в рантайме с помощью clang/llvm и поиск мне выдал мою же собственную статью трехгодичной давности: Динамическая JIT компиляция С/С++ в LLVM с помощью Clang / Хабр. В результате появилась уже эта новая статья про JIT компиляцию C/С++.

Читать дальше →

Импортозамещаем numpy, pandas, scipy и sklearn

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

Речь пойдет о библиотеках-аналогах numpy, pandas, scipy и sklearn на C++ (np, pd, scipy, sklearn соответственно).

Эти проекты изначально задумывались как хорошее дополнение к портфолио, однако затем наступило всё более и более плотное вовлечение в процесс работы над ними, челенджи становились всё более и более существенными, и проект превратился в несколько отдельных проектов, содержащих десятки тысяч строк кода...

Читать далее

[sobjectizer] Несколько слов о релизе версии 5.8.0

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

SObjectizer — это относительно небольшой C++17 фреймворк, который позволяет использовать в С++ программах такие подходы, как Actor Model, Publish-Subscribe и Communicating Sequential Processes (CSP), что упрощает разработку сложных многопоточных приложений. Если читатель в первый раз слышит о SObjectizer-е, то составить впечатление о нем можно ознакомившись вот с этой статьей.

Недавно состоялся релиз очередной мажорной версии, 5.8.0. Это хороший повод еще раз напомнить о проекте и сказать несколько слов о наиболее важном в очередном релизе, в том числе и о (частичном) сломе совместимости с предыдущей веткой 5.7.

Кому интересно, милости прошу под кат.

Читать далее

Манипуляции с байт-кодом Java

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

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

C#-like properties в C++ размером 1 байт

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

Иногда в С++ не хватает каких-то фич, которые есть в других языках. Мне, например, не хватает preperties из C#. В них можно описать функции set/get, при этом работать с ними через поле класса, как с переменной.

В С++ это приходится делать через функции, что может быть громоздкои и менее читаемо:

actor.SetTransform(left.GetTransform() * right.GetTransform() * up.GetTransform());

Но хочется более простой и понятный синтаксис:

actor.transform = left.transform * righ.transform * up.transform;

Под катом я расскажу как можно в С++ обернуть set/get в переменную с минимальным размером 1 байт

Читать далее

Rust + C++ через FFI: как подружить два мира и не сойти с ума

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

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

В омут FFI

Что делать, если ваш слон думает, что он баг?

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

Мы окунулись в веб-разработку и нашли там необычное животное. Это был слон с повадками бага. Мы изучили код проекта PHP и поняли, в чём дело. Давайте вместе посмотрим на необычные случаи, которые могут привести к неожиданным результатам.

Читать далее

CMake: герой, который споткнулся о 12 багов

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

В арсенале разработчиков есть целый ящик с инструментами, каждый из которых обещает облегчить жизнь программиста. Но во всем этом разнообразии спрятался один супергерой, который выручает в самых сложных ситуациях. И имя этому герою — CMake!

Читать далее

Open Source и C++: делай что должен и свершится, чему суждено

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

Syn ack, Хабр!

С++ - это тяжелый выбор для кросс-платформенного open source проекта. Если вы выбрали С++, то вам нужно пройти следующие этапы:

Сборочка. В С++ нет устоявшихся паттернов сборки. Разные платформы и ОС имеют разные требования для сборки. Если вы хотите показать миру ваше ПО, придется разработать сборочку, которая адаптирована под многообразие платформ и легко поддерживается мейнтейнерами эти

Архитектура. В С++ нет устоявшихся паттернов архитектуры ПО, которая бы подходила для большинства разработчиков. Существуют множество библиотек для решения одних и тех же задач, но с разными архитектурными паттернами. Если вы хотите сделать библиотеку или чтобы ваше ПО могло расширяться другими разработчиками, придется продумать расширяемую архитектуру ПО.

Распространение. В С++ нет устоявшихся паттернов для распространения вашего по. Даже вопрос, а куда выкладывать релизы является открытым и не имеет полностью рабочего решения. Вам придется продумать и разработать методы доставки вашего ПО до ваших пользователей.

Хабр и GitVerse обьявили конкурс, в котором попросили поделится своим опытом участия в open source проекте:

“Твои «грабли» — это уже отловленные баги для тех, кто идёт следом”

Я наткнулся на “грабли” в процессе разработки open source проекта на С++: Daggy - Data Aggregation Utility and C/C++ developer library for data streams catching. Чтобы вы могли отловить мои баги, стоит разобраться, откуда возникла идея еще одного open source проекта.

Читать далее

Лампа для подсветки рассады или просто таймер. Конструкция выходного дня

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

Контроллер Лампы для Рассады

Умный контроллер освещения на базе ESP32 с управлением через Telegram бот. Проект выходного дня для любителей растениеводства.

Читать далее

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

В преддверии испытаний статических анализаторов под руководством ФСТЭК России

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

Испытания статических анализаторов исходных кодов компилируемых и динамических языков программирования под руководством ФСТЭК России


В 2024 году вышел ГОСТ Р 71207 — Статический анализ программного обеспечения. Однако пользователям анализаторов сложно определять, насколько тот или иной инструмент соответствует критериям, изложенным в стандарте. Поэтому ФСТЭК России в 2025 году организует испытания статических анализаторов, результаты которых будут опубликованы в конце года. Ближайший этап — это выработка критериев оценки, и я решил предварительно изложить некоторые мысли по этой теме, которые, возможно, будут интересны жюри и участникам.

Читать дальше →

Поддержка webextensions под Андроид

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

Добрый день!


Меня зовут Тимур и я программист.


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

Читать дальше →

Распределённая сборка Unreal Engine проектов с помощью Horde и UBA

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

Распараллелить сборку большого проекта на несколько компьютеров? Легко! Разбираемся, как использовать Unreal Horde — новый инструмент внутри Unreal Engine 5.5. В том числе посмотрим, как с его помощью запустить анализ PVS-Studio.

Читать далее

Анализ AST и рефакторинг кода в Clang

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


В продолжение темы кастомизации компилятора С++ публикую перевод еще одной интересной статьи от Eli Bendersky AST matchers and Clang refactoring tools.

Инструментарий Clang вызывает большой интерес и внимание к разработке в последние годы. Наконец-то у нас есть удобный, точный, с открытым исходным кодом и хорошо поддерживаемый фреймворк для программного анализа и рефакторинга кода C++ и это я нахожу это очень захватывающим!


Прекрасным результатом этого быстрого темпа разработки является то, что постоянно появляются новые API и инструменты.


Например, некоторое время назад разработчики инструментария Clang выяснили, что людям, выполняющим обходы AST, приходится писать много повторяющегося кода, чтобы найти нужные им узлы AST, поэтому они придумали отличный новый API под названием AST matchers.

Читать дальше →

Stat Commands: Добавляем трассировку в Unreal Engine

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

Единственный разумный подход к оптимизации игры — это всегда иметь под рукой хорошие метрики производительности. Unreal Engine поставляется сразу с несколькими полезными инструментами профилирования. «Stat commands» — один из таких инструментов. Они позволяют нам измерять ряд показателей для различных фрагментов нашего (C++) кода.

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

Читать далее

Операционная система реального времени Xenomai 4

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

В данной статье подробно рассмотрим, как собрать ядро, поддерживающее EVL core, и библиотеку, реализующую пользовательский API для этого ядра. А также разберем некоторые аспекты реализации драйвера устройства и приложения под Xenomai 4.

Xenomai — Фреймворк для разработки приложений реального времени на базе ядра Linux. Проект Xenomai был запущен в 2001 году с целью эмуляции традиционной ОСРВ и облегчения ее переноса на GNU/Linux с сохранением гарантий работы в режиме реального времени. Изначально Xenomai был связан с RTAI (интерфейсом приложений реального времени), но на данный момент он независим.

Мы будем работать с Xenomai версии 4. Xenomai 4 имеет архитектуру с двумя ядрами. Первое ядро Linux: для задач, отличных от реального времени, и ядро Xenomai: для задач реального времени. Ядро Linux и ядро реального времени работают практически асинхронно, оба выполняют свой собственный набор задач, всегда отдавая последнему приоритет над первым. Для осуществления доступа к основным сервисам реального времени в проекте Xenomai предусмотрена библиотека С, известная как libevl.

Xenomai поддерживает множество архитектур, таких как PowerPC, Blackfin, ARM, x86, x86_64 др. В данной статье мы используем компьютер c архитектурой x86_64 (Процессор: 12th Gen Intel® Core™ i5-12400 × 12, память: 32,0 ГиБ), операционной системой Debian GNU/Linux 12 (bookworm).

Читать далее

Ultimatum — очередной форк chromium-а или сказ о том как я кеши приручал

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

image


Добрый день! Меня зовут Тимур и я программист.


Сегодня я предлагаю рассмотреть очередную мою работу. Я пробросил в js прямой доступ к кешам chromium-a и теперь ими можно манипулировать из расширений браузера (при наличии соотв. permissions). Если вас не интересуют кресты а хочется халяльного js кода — переходите сразу в конец статьи, там описано реализованное api и как им пользоваться.


Итак, о чем речь и зачем это нужно?

Читать дальше →

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