Как стать автором
Обновить
257.77

C++ *

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

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

Мы наш, мы новый SDL3 построим или вперед в прошлое

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

Приветствую, Хабравчане!

В данной статье, хочу вам рассказать о своём проекте по реализации SDL3 для старых систем. Конечно, я не ограничиваюсь только Windows 95, разработку веду по современным ПК. Главная причина, это конечно фан и любовь к старому железу, которое ещё многое умеет.

Читать далее

Новости

Нативная мощь: Flutter SDK на C++ ядре. Часть 1

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

Меня зовут Александр Максимовский, и я тимлид команды Mobile SDK в 2ГИС. Мы разрабатываем SDK — набор инструментов, который позволяет другим разработчикам внедрять наши технологии (карту, справочник, построение маршрутов и навигатор) в свои мобильные приложения. Благодаря нам можно быстро и удобно интегрировать функциональность 2ГИС, не тратя время на реализацию сложных решений с нуля. Мы сделали решение, которое позволяет из Flutter-приложения напрямую вызывать C++ код. Под капотом:

▪️ FFI для прямого взаимодействия с C++ кодом ядром;

▪️ Кодогенерируемое API почти полностью аналогично iOS и Android Mobile SDK;

▪️ TextureWidget вместо PlatformView для рендеринга карты;

▪️ Единые виджеты для отображения карты как для Android, так и для iOS.

Если вы работаете с Flutter, интегрируете карты или маршруты или просто любите разбираться в архитектуре SDK — эта статья для вас. Под катом детально рассказываю про основу продукта — кодогенератор для генерации платформенного Dart-кода на основе C++ интерфейсов.

Читать далее

Подборка авторских Telegram-каналов про разработку

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

Подборка авторских Telegram-каналов про разработку

Приветствую, Хабр. На связи агент того самого анализатора, и сегодня я предлагаю вам изучить Telegram-каналы крутых айтишников, которые познали себя не только в коде, но и блогинге. Переворошила Telegram, чтобы вам не пришлось. Надеюсь, они помогут вам преисполниться в своём познании....

Поехали!

ML на «плюсах»: 5 материалов о необычном подходе к обучению моделей

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

Когда мы говорим о машинном обучении, то автоматически подразумеваем Python. Это справедливо: на Python есть множество удобных ML-инструментов, например, популярная библиотека PyTorch. Тем не менее, некоторые задачи можно решать с помощью С++. И не только ради эксперимента, а для увеличения производительности сервисов и упрощения работы с кодом. 

Кирилл Колодяжный, разработчик СХД в YADRO, несколько лет изучает машинное обучение на С++. Он уже написал программы для поиска лица на фото и для распознавания объектов в реальном времени. Под катом — пять материалов Кирилла, после которых инженерам захочется «пересесть» с Python на C++. Хотя бы на время.

Читать далее

Создание объектов без конструктора по умолчанию в C++: искусство владения памятью

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

В данной статье рассматриваются метод создания объектов без использования конструктора по умолчанию с использованием возможностей стандарта C++17 , который предоставляет гибкие инструменты управления памятью и типобезопасностью. Мы рассмотрим техники, которые позволяют работать с такими объектами напрямую, сохраняя контроль над процессом инициализации и временем жизни объектов.

Читать далее

Ошибка компилятора или неожиданный эффект шаблонов в C++?

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

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

Я быстро добавил нужный код, запустил утилиту и... программа тут же упала с ошибкой доступа к памяти. В проекте давно существовал собственный бинарный протокол сообщений, аналогичный protobuf, со своим генератором C++ кода и механизмами кодирования и декодирования. Эта часть кода была старая, и никто не хотел её трогать.

Отладчик показал, что ошибка происходит внутри кода, который парсил сообщения. Я этот код не менял, но на всякий случай сгенерировал его заново — не помогло.

Первая мысль была: возможно, мой новый код где-то портит память. Чтобы найти ошибку, я решил собрать проект с Address Sanitizer. Спросив у коллег, использовали ли они его раньше, я услышал, что попытки были, но безуспешные. Запасшись терпением, через полдня я получил сборку. К сожалению, санитайзер ничего не обнаружил.

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

Пришлось разбираться в «страшном» коде вручную. Выглядел он примерно так:

Читать далее

От космической баллистики до kernel bypass — все, что вы хотели знать про C++ и Linux

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

Заходят как-то в лофт разработчик на С++, доктор математических наук и инженер-программист Linux kernel — и вместо шутки начинается System Level Meetup. 24 мая в Санкт-Петербурге соберутся те, кто пишет код на уровне железа, оптимизирует ядро Linux и проектирует архитектуру сложных систем. Два трека — C++ и Linux kernel, десятки докладов, живое общение, стенды, квесты и железо от YADRO. Регистрируйтесь и подключайтесь — онлайн или офлайн.

Читать далее

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 проекта.

Читать далее

Проверка високосности года в трёх командах CPU

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

Показанным ниже кодом вы можете проверить на високосность год в интервале 0 ≤ y ≤ 102499 всего примерно тремя командами CPU:

bool is_leap_year_fast(uint32_t y) {

return ((y * 1073750999) & 3221352463) <= 126976;

}

Как это работает? Ответ на удивление сложен. В статье я объясню процесс; в основном он связан с забавным битовым жонглированием. В конце мы обсудим применение этого кода на практике.

Читать далее

Первый http сервер на С++, заметки для новичков

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

Решил написать простенькую статейку по следам реализации небольшой программки на С++ под Виндоус, которая содержит в себе TCP сервер. Мы получаем от клиента http запрос. Соединение не защищенное.

На чем реализован клиент нам неизвестно: может на php (curl,socket,stream_contex_create,...), может на js (ajax), вообще может быть на чем угодно.

Надо задача реализовать http парсинг запроса и контента, выполнить задание (на каком-то подключенном к серверу оборудовании) и ответить клиенту о результате.

Примечание: автор реализует http сервер на устаревшем Qt4, используем QTcpServer. Но для http сервера это не принципиально.

Читать далее

Гайд на олимпиадное программирование: Что учить и где?

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

Гайд на то как учить олимпиадное программирование самостоятельно, изложены основные ресурсы, которые помогли лично мне

Читать далее

Любителям x86-64 assembler посвящается: DIY волокна в C++

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

Нас ждёт мозговыносящая смесь 64/32-битного ассемблера и старого-доброго C++. Мы сделаем собственную реализацию... Волокон (fibers) без вызова Win API и звонков в службу спасения.

Читать далее

ООП или не ООП — вот в чём ревью

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

Псевдокод, страсть и pull-request на грани добра и зла

Кто-то звал Smalltalk, кто-то бросал в нас Haskell, кто-то доставал из-под кровати подшивку статей «ECS лучше всего» — и всё это с праведной уверенностью.

Читать далее

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

Доступ к приватным методам класса в С++

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

В C++ инкапсуляция — один из ключевых принципов ООП, и приватные (private) члены класса защищены от прямого доступа извне. Однако иногда возникают ситуации, когда такой доступ необходим (например, при тестировании, сериализации или отладке). Обычно для этого используют friend-функции или геттеры/сеттеры, но есть и более экзотический способ — использование шаблонов и указателей на члены класса.

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

Читать далее

Как я написал эмулятор Nintendo Gameboy на C++ за две недели

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

Расскажу, как устроена архитектура консоли Nintendo Gameboy, как можно эмулировать её основные компоненты, какие решения я принимал в процессе разработки и какие инструменты использовал.

Читать далее

ООП не мертво. Вы просто пользуетесь им как молотком по клавиатуре

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

После каждой новой статьи с заголовком «ООП — это обман» хочется напомнить: ООП — это не набор шаблонов из книжек, а инженерный подход. Если проект страдает от наследования и DI, возможно, проблема не в ООП. А в том, как вы его применяете.

Читать далее

Корутины в C++20: архитектура и практическое применение

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

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

Читать далее

Python, Java, C++ и Go — как появились популярные языки программирования

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

Привет! Мы уже рассказывали о «вымерших» языках программирования, пришла очередь самых популярных в 2025 году. Языки не придумывают «чтобы было» — для этого всегда есть предпосылки: рассказываем, кто, когда и зачем их создал. А еще делимся интересными фактами, которых вы могли не знать — а теперь будете :)
Читать дальше →

Код, который светится: архитектура минималистичных световых скетчей

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

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

Можно потратить годы, чтобы написать красивый рендерер. А можно взять 8 строк кода, светодиодную ленту и микроконтроллер, чтобы ночью на стене заиграла световая поэма. Эта статья — про второй путь.

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

Читать далее

Как Мэтт Годболт «продал» мне Rust (рассказав о C++)

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

Мэтт Годболт, знаменитый разработчик Compiler Explorer — потрясающий человек, вам стоит найти в вебе и изучить весь созданный им контент. Именно этим и занимался, просматривая Correct by Construction: APIs That Are Easy to Use and Hard to Misuse. Я уже больше двадцати лет работаю с C/C++, поэтому эта тема была мне близка.

Когда я смотрел его доклад, ко мне постоянно приходила мысль: «Да! И именно поэтому в Rust это делается так». После просмотра видео я подумал, что этот доклад — отличный способ понять, как Rust помогает разработчикам не только в безопасности по памяти, и в своей статье я расскажу об этом.

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

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