Обновить
256K+

C++ *

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

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

Veai 5.12: агент в любимой IDE, которому не нужно заранее объяснять формат задачи

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

Главная ценность релиза — разработчик начинает с рабочей задачи, а не с выбора режима.

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

Для этого в Veai 5.12 появился General Agent. Он принимает задачу в том виде, в каком разработчик обычно ее формулирует: неидеально, с сомнениями и неполным пониманием пути. Агент сам подбирает нужные действия и отдает результат, который уже можно проверить.

Попробовать Veai 5.12 · Что входит в релиз

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

Читать далее

Алиасинг памяти в C++: прошлое, настоящее, будущее

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

Привет, Хабр! Меня зовут Владислав, я разрабатываю компиляторы в YADRO. В этой статье я расскажу вам про алиасинг памяти в C++: как он развивался, к чему пришел сейчас и что комитет по стандартизации языка думает делать с алиасингом в будущем. По пути я немного затрону алиасинг в других языках, рассмотрю связанные случаи undefined behavior, а также пропозалы C++, которые, как ожидалось, проблемы с алиасингом решат.

Читать далее

Клод в шестернях

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

Когда эксперт впервые увидел, как моя машина ведёт себя в динамике, он сказал, что без курсов по двигателям и трансмиссиям меня к такому тренажёру подпускать нельзя. Он был прав. Меня позвали перенести с Unity на Unigine тренажёр гусеничной машины. К середине проекта я решил, что новую физику проще написать с нуля, и не написал в ней ни строки руками — весь код делал Claude Code. И да, там будет Патрик Суэйзи.

Как AI вошёл в инженерный контур

Консольный рендерер Мандельброта с методом возмущений с 1e-308

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

Я сделал это! Это огромный повод для гордости. Теперь программа работает по тем же математическим принципам, что и самые передовым фрактальным в мире!

Ключевые особенности:

Расчёт опорной траектории на 5000 бит всего один раз.
Реактивный расчёт миллионов пикселей на аппаратном double.
Революционный алгоритм Reference Reset to Zero.
Настоящий SSAA 8x8 для идеально сглаженного изображения без алиасинга.
Параллелизм OpenMP для высокоскоростного многопоточного рендеринга.

Есть полный код в С++ - main.cpp
Есть Гитхаб https://github.com/Divetoxx/Mandelbrot#russian с версии в виндовс Mandelbrot_windows_msse3.exe и Mandelbrot_windows_mavx2 и для Линукс Mandelbrot_linux_msse3 -msse3 и Mandelbrot_linux_mavx2

Читать далее

OSDEV: Разработка аллокатора на С++ часть 3. Финальный аллокатор со списками свободных блоков

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

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

Читать далее

Модули C++20 — как я с ними намучился

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

В стандарте C++20 было представлено множество нововведений, и одним из наиболее крупных и долгожданных в их числе являлись модули. Теперь, когда с тех пор минуло около шести лет, то воодушевление сменилось здоровым цинизмом. Так, авторы сайта Are We Modules Yet прогнозируют, что поддержка модулей во всех библиотеках будет обеспечена к 1 мая 2167 года, а на Reddit не проходит и двух недель, как возникает очередной тред на тему: «Ну что, ими уже можно пользоваться»? (спойлер: нет).

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

Читать далее

Конечный автомат (FSM) – инструмент программиста

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

Тема конечных автоматов (КА) актуальна. Почти как тема реализации светофоров. Но вот, если серьезно, только отношение к ней разное. Время от времени появляются статьи типа «Конечные автоматы (FSM) – это ловушка для программиста» [1]. И здесь очень не хочется, чтобы складывалось превратное представление о некой «псевдо-математической» автоматной абстракции. Нужно оберегать народ от подобных суждений, которые ни на чем не основываются.

Не будем, в пику упомянутой статье, петь дифирамбы автоматам в очередной раз. Потому, как «сколько не говори халва, во рту сладко не станет». Но можно реализовать пример из статьи только с позиции другого взгляда на автоматы. Это больше убедит, чем пространные рассуждение в духе «свист-технологии» или той же многопоточности и конкурентности.

Пусть перед нами стоит задача реализовать светофор и при этом уже есть довольно интересное, если не сказать – оригинальное, решение, которое дает право автору статьи весьма критично высказываться в отношении автоматов. Само решение сводится к следующим шагам: 1) создается таблица, строки которой определяют цвет светофора и его время; 2) создается простая программка перебора строки, которая зажигает в прямом и переносном смыслах, реализуя управление светофором.

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

Читать далее

Renga API: Создание объектов

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

Одна из главных автоматизаций в BIM – создание объектов. Разбираем создание объектов через Renga API шаг за шагом.

Читать далее

Пишем движок для JavaScript с нуля

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

Как выкатить собственный движок JavaScript

Привет, Хаброжители! Мы подготовили для вас перевод статьи, в которой автор делится опытом создания собственного движка JavaScript с нуля.

Автор на языке Go с нуля создаёт простой движок JavaScript. В статье пошагово разобраны ключевые этапы: от лексического анализа и построения AST до реализации вычислителя и встроенных функций (print, fetch, JSON). Отличный материал, чтобы понять, как код на JS превращается в работающие инструкции.

Читать далее

C++101

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

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

Большинство этих примеров родилось в эпоху до C++11, когда у языка ещё не было ни умных указателей в стандарте, ни move-семантики, ни constexpr, ни концептов, и приходилось руками собирать из шаблонов и перегрузок некоторые конструкции, которые в более поздних стандартах язык даёт почти бесплатно. Многие идиомы, примеры и идеи стоит читать в двух смыслах сразу, как исторический артефакт, объясняющий «почему старый код выглядит вот так», и как живой приём, который всё ещё применяется в движках и играх.

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

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

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

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

Читать далее

Создаём HTTP/2-сервер на C++ и хостим на нём свой сайт

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

Что будет, если написать HTTP/2-сервер на C++23 с нуля, собрать для него минимальный контейнер и выставить всё это в интернет? Я проверил проект на реальном трафике, усилил защиту бинарника и контейнера, столкнулся с ограничениями Cloudflare, bunny.net и Cloud Run, а заодно поймал утечку памяти в OpenSSL. Получился практический разбор того, где заканчивается учебный эксперимент и начинается эксплуатация системного кода.

Заглянуть под капот

Компьютерное зрение на коленке: распознаем дорожные знаки и управляем роботом на ESP32 и Arduino

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

Каждый, кто осваивает Arduino, проходит одни и те же этапы.

Сначала ты мигаешь светодиодом. Потом подключаешь датчик температуры — и вот уже температура выводится в монитор порта. Потом сервопривод — и какая-то пластиковая штуковина начинает смешно поворачиваться туда-сюда.

Потом появляется идея сделать систему автополива для цветов (которая в итоге их зальёт). Или мобильного робота, который будет «приносить тапочки». Правда, через месяц робот будет пылиться на полке, а датчики с него переедут в следующий проект :).

Дальше — закономерный этап: хочется управлять всем этим через интернет или со смартфона по каналу  Bluetooth. Использовать Wi-Fi модули,  заменить Arduino на  ESP8266 или ESP32. Поднял сервер, написал пару кнопок — работает.

И если все это тебя зацепило, то возникает вопрос: а что дальше?

Я тоже прошёл эти этапы. И когда задумался, куда двигаться дальше, обратил взор на ИИ (Искусственный Интеллект). Не на тот, что «Skynet уничтожит человечество», а на самый простой — умение робота видеть знак «Стоп» и отличать его от пустой стены.

 Воодушевленный идеей, начал собирать информацию про ИИ на микроконтроллерах — и быстро понял, что обычный Arduino Uno с его 2 КБ оперативной памяти (RAM) и 16 МГц для нейросетей решительно не подходит. Модель с распознаванием изображения туда не запихнуть. Даже самую простую.

Примечание

Кстати, это направление даже имеет своё название — TinyML (машинное обучение для микроконтроллеров с ограниченными ресурсами). Минимальные требования для простых задач (классификация звуков или данных с датчиков) — тактовая частота от 32 МГц, RAM от 32 КБ, Flash от 128 КБ. У Uno даже близко нет.

Читать далее

Преобразование числа в строку методом умножения на 10

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

В этом тексте рассматривается метод преобразование двоичного числа в строку без использования операций деления и остатка.

Читать далее

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

WebSocket на C++11 и Rust: сравнительный анализ библиотек и двух реализаций одного протокола

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

WebSocket — один из самых распространенных транспортов для обмена данными в реальном времени: чаты, биржевые котировки, игровые серверы, IoT. На практике выбор библиотеки редко сводится к вопросу «кто быстрее парсит заголовок фрейма». Важнее сочетание совместимости со старым набором инструментов сборки, поддержки TLS, сжатия per-message-deflate, модели асинхронности или блокировки, размера бинарника и способа обработки ошибок.

Читать далее

Но почему, почему, почему был светофор зеленый?

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

Но почему, почему, почему
Был светофор зеленый?
А потому, потому, потому,
Что был он в жизнь влюбленный.

Читать далее

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

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

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

Недавно, вдохновившись моим опытом, мой товарищ решил приобщиться к моноколёсному комьюнити и купил моноколесо Inmotion V12 Pro. В целом колесо достаточно хорошее, но первая совместная поездка выявила одну проблему, а именно: практически невидимые задние сигналы. Этот недостаток не добавляет безопасности поездкам, поэтому, как всегда, я спешу исправить ситуацию. А что из этого вышло — читайте далее.

Читать далее

«У меня работает»: десять способов узнать, что нет

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

Я думал, проект готов к релизу. CI думал иначе — и оказался прав десять раз. История про то, что видно только на чистом раннере.

«Полностью готовый» и локально зелёный проект — а первый же полный прогон CI вскрыл десяток скрытых проблем: версия CMake на Ubuntu 22.04, строгий GCC 11, артефакты с 403 от CDN, ASan под valgrind, недоступный из сети реестр и другие. Показываю каждую проблему с настоящим сообщением об ошибке и решением, а заодно — как поднял свой раннер, выпустил релиз руками без раннеров и ускорил пайплайн с 53 до 15 минут. Мораль: CI ловит ровно то, что невидимо на машине разработчика, — версии инструментов, окружение и сеть.

Читать далее

COM-порт из ничего: PTY, epoll и немного RS485-боли

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

Демон «ничего не делал» — а одно ядро было загружено на 100%. История про виртуальный COM-порт для Linux/WSL2: PTY, epoll и эмуляция RS485, с кодом и граблями.

Рассказываю, как сделал vseriald — демон, который создаёт виртуальный последовательный порт /dev/ttyV0 в Linux и WSL2 и выводит его в сеть, FIFO или очередь сообщений. Разбираю три неочевидных места: псевдотерминал, после закрытия которого одно ядро уходит в 100%; притормаживание источника в однопоточном epoll-цикле без блокировок; эмуляцию полудуплексного RS485 как конечного автомата с таймингами и коллизиями. Плюс честный ответ на вопрос «зачем это, если есть socat и /dev/pts» — и код из реального проекта.

Читать далее

Почему OSDev никогда не превратят в конструктор

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

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

Обсудим «конструкторы ОС» и все его плюсы и недостатки.

Читать далее

Vulkan рендер для S.T.A.L.K.E.R OGSR

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

Vulkan-рендер для S.T.A.L.K.E.R. OGSR: трава до горизонта, меньше статтеров и новый фундамент Зоны..

Читать далее