Обновить
167.47

C++ *

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

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

DIY Open Source принтер. Часть 0

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

Привет, Хабровчане! Этот цикл (надеюсь) статей будет посвящён моему пути в создании своего собственного решения по струйной печати. Это будет что-то вроде блога или дневника разработчика в котором постараюсь изучить как же всё таки работает печатающая головка у принтера и как ей можно управлять с помощью микроконтроллера. А также нас ждёт интригующий ответ на вопрос: "Если ли место DIY и OpenSourse в мире струйной печати".

Читать далее

Deferred Rendering: GBuffer

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

Всем привет, видела на просторах интернета достаточно мало материалов на отложенный рендеринг, при том что сама его идея‑то достаточно прикольная, так что решила вставить свои пять копеек сама.

Этакий разбор полётов, что это такое, как этого добиться и как конфигурировать DX12 так, чтобы он рисовал то, что ты хочешь.

Читать далее

librats: новая библиотека для распределённых P2P-приложений

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

Всем привет! Я являюсь создателем распределённого поисковика rats-search на базе DHT ( GitHub ). Его принцип работы довольно прост: поисковик собирает торренты у всех участников сети и формирует большую распределённую базу для поиска, включая метаданные (например, описания и прочую информацию).

В этой статье я хочу рассказать о своей новой библиотеке для построения распределённых приложений (p2p), где знание IP-адресов участников не обязательно, а поиск ведётся через различные протоколы — DHT, mDNS, peer-exchange и другие. Думаю, с учётом постоянных неприятностей, которые происходят вокруг, это может оказаться полезным ;-).

Читать далее

Боремся с хедкрабами в исходниках Source SDK

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

GameDev тернист и неисповедим. Как и любой проект, он проходит испытания кровью и потом, сражаясь с тварями, тьмой порождёнными: барнаклы, пиявки, муравьиные львы. И это ещё не сказочка, это только смазочка. Больше всего стоит остерегаться жуков хедкрабов. Да, это те самые баги в коде. Если их вовремя не убить монтировкой, то ваша участь — стать отвратительным кадавром. Предлагаем читателю побывать в роли Гордона Фримена, погрузиться в недры Source SDK и побороться с хедкрабами. В качестве монтировки же выступит PVS-Studio.

Читать далее

Минимальный «эксплойт» на Си, который научил меня любить защиты

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

Я всегда считал, что взлом — это магия адресов и байтов. А потом я написал десять строчек на C и понял, что настоящая магия — это защиты компилятора и ОС. В этой статье я сознательно построю крохотный уязвимый пример, добьюсь управляемого падения (это и будет мой «эксплойт»), а затем превращу баг в безопасный и быстрый код. Ни одного шага против чужих систем — только локальная лаборатория и гигиена памяти.

Читать далее

Высокий слог. Язык программирования для аристократов. Почему LLM приучают нас к языку аристократов программирования

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

Он заговорил, и стрелок застыл, поражённый: к нему обращались Высоким Слогом Гилеада! — Сделай милость, стрелок‑сэй. Не пожалей золотой. Один золотой — это ж такая безделица. Высокий Слог. В первый миг разум стрелка отказался его воспринять. Прошло столько лет — Боже правый! — прошли века, тысячелетия; никакого Высокого Слога давно уже нет. Он — последний. Последний стрелок.

Стивен Кинг

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

Осторожно! В статье намеренно используются фрагменты сгенерированного текста!

Читать далее

Мультиплеер в Цивилизации 5

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

Некоторое время назад я участвовал в разработке поддержки мультиплеера для одной глобальной модификации Цивилизации 5 и сегодня хотел бы поделиться здесь некоторыми подробностями о том, как устроена сетевая игра, как всё-таки запустить ее с модами, что с ней вообще не так, и как мы это фиксили.

Читать далее

Демистификация unaligned access undefined behavior в C

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

Неопределённое поведение (Undefined Behavior, UB) в C и C++ — одна из причин, по которым разработчики всё чаще ищут языки с полностью определённой семантикой. Одним из самых коварных UB является unaligned access, с точки зрения стандарта C это, например, когда происходит попытка разыменовать указатель как uint32_t, а значение указателя (адрес) не кратно четырём. Один из частых сценариев использования, приводящих к такому UB - получение данных по сети и их интерпретация как чисел.

Читать далее

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

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

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

Читать далее

Flat-контейнеры в C++

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

Привет, Хабр! Еще в C++23 появились «плоские» ассоциативные контейнеры: std::flat_setstd::flat_map и их многоключевые аналоги. Проще говоря, это полные аналоги обычных std::set и std::map, но реализованные иначе – через упорядоченный последовательный контейнер (по умолчанию std::vector). Зачем вообще понадобились эти штуки? Официальная причина – экономия памяти и выигрыш в производительности при чтении данных.

Читать далее

Библиотека Asio для начинающих: работаем с корутинами без сегфолтов

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

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

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

Читать далее

Думай о секундах свысока — как бы говорит нам Modern C++

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

Думай о секундах свысока - как бы говорит нам Modern C++.

Зачем нам использовать Modern C++, особенно старших версий? Дурацкий вопрос, скажут сектанты, фанаты, фанатики, адепты. Оно же необходимо для большей выразительности, читабельности и ускорения всех возможных процессов, включая метаболизм; и еще для экономии времени. Что-то в этом есть, а кое-чего нет. Давайте рассмотрим пример из жизни.

Один программист (имя сохранено в редакции) писал себе спокойно код и написал примерно такое (для справки: используемый стандарт 2017):

пример из жизни

Обход Cloudflare. Часть I

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

Как обмануть алгоритмы отпечатков браузера и не спалиться? Первая часть трилогии о скрытии свойств браузера.

Трилогия будет полезна всем, кто хоть иногда сталкивается с блокировками при парсинге сайтов.

А ну-ка, что там?

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

Ранг-селект словари

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

Это первая статья из планируемой серии про succinct data structures - класс наиболее компактных структур данных. Канонический пример такой структуры - это представление дерева в виде правильной скобочной последовательности, дерево изnвершин таким образом представляется с помощью2nбит в то время как типичная динамическая реализация требовала бы как два указателя по 64-бит на каждый узел (разумеется можно немного сократить простыми оптимизациями, но даже близко 2 бита не получить). Фундамент подобных структур - это rank-select словарь, представляющий собой битовый вектор и дополнительную структуру для выполнению двух операций ранг и селект. В указанном примере с деревом с помощью ранга и селекта можно сделать базовую навигацию: найти номера потомков/родителей, узнать размер поддерева. В статье расскажу как делать эти операции быстро используя при этом всего 3,6% дополнительной памяти.

Читать далее

Вайб-кодинг и реальное программирование на С++

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

Прочитал статью Программисты против вайбкодеров и решил поделиться собственным опытом вайб-кодинга, но уже без рекламы ТГ-каналов и бесполезных цитат авторитетных источников. Пока писал, появилась еще одна статья Революция вайб-кодинга отменяется, но уже с противоположным мнением.

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

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

Читать далее

Делаем настольные часы с Wi-Fi из тетриса

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

Если вы посмотрели видео, то уже хорошо понимаете, что представляет из себя этот гаджет, но на всякий случай ещё раз перечислю, что он умеет: онлайн‑синхронизация времени, фоторамка, демонстрация логотипа, имитация волшебного шара из фильма «Трасса 60». В часах используется модуль WeAct ESP32‑C6 Mini с процессором ESP32‑C6 QFN32 и дисплей WeAct ST7735 (9 $ за всё вместе с доставкой с AliExpress).

Читать далее

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

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

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

Читать далее

Харденинг, модули в С++ и первый опыт вайб-кодинга у программиста со стажем5

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

Считается, что на конференции лучше всего запоминаются первое и последнее выступления. И тут я не являюсь исключением, так как при посещении С++ Zero CostConf 2025 мне сильнее всего запомнились как раз первый и последний доклады, но думаю не только из-за эффекта края, но и по той причине, что они были для меня самыми интересными и именно ради них и я решил съездить в Москву из далекой российской глубинки.

Но мне не хочется писать про само мероприятие, тем более, что видеозапись всех выступлений выложена на сайте конференции C++ Zero Cost Conf 2025 и пересказывать технически детали докладов не имеет смысла.

Однако прошедшее мероприятие было очень необычным и запоминающимся: мне удалось попробовать себя в роли вайб-кодера, а по результатам общения с докладчиками — написать два предложения в комитет по стандартизации C++ от России. Поэтому я всё же решил поделиться с читателями «Хабра» своими впечатлениями от некоторых докладов конференции и собственными выводами о вайб-программировании.

Читать далее

Девиртуализация в C++, компиляторах и вашей программе

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

Привет, Хабр! Меня зовут Илья Андреев, я старший программист в компании Syntacore. Вы, наверно, слышали, что виртуальные функции в C++ пользуются дурной славой — а может, и сами придерживаетесь о них не самого лучшего мнения. В этой статье, подготовленной совместно с Константином Владимировым, я в некоторой степени выступлю адвокатом виртуализации.

Мы начнем с вводной части о статическом и динамическом полиморфизме, рассмотрим факторы, влияющие на девиртуализацию, и ее примеры разной сложности — в том числе те, что мы используем в реальной разработке. А напоследок познакомим вас со спекулятивной девиртуализацией и дадим рекомендации, как подходить к виртуальным функциям в разработке на C++.

Читать далее

Статические DAG-графы: почему TBB иногда избыточен и как сделать планировщик с гарантированным временем выполнения

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

Многие thread-пулы оптимизированы под динамический spawn и бесконечный backlog. В этой статье — подход для противоположного кейса: фиксированный DAG, один run и полный контроль над поведением

Читать далее

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