Обновить
128K+

C++ *

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

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

Спустя 5 лет я снова пишу Всерос — часть 1

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

Привет, Хабр! На связи финалист ICPC и гроссмейстер codeforces MachineSolution. В прошлой своей статье я писал о том, как подготовиться к соревнованию. Но что делать, если время подготовки прошло, как писать саму олимпиаду? “Просто бери и решай задачи” - скажет кто-то, но будет прав лишь отчасти. У некоторых соревнований есть свои особенности и, как следствие, особые стратегии написания. И заключительный этап всероссийской олимпиады школьников по информатике не лишён своих отличительных черт.

Всероссийская олимпиада школьников по праву считается мерилом олимпиадных способностей школьников и, хотя взять диплом даже регионального этапа ВсОШ дано не каждому, всероссом называют именно заключительный этап и готовятся к нему. Мало кто из сильных олимпиадников не хочет “взять всеросс” - то есть выиграть диплом призёра заключительного этапа. Помимо поступления в любой ВУЗ без экзаменов он сам по себе является ценной наградой и подтверждением своих способностей и признания результата долгих тренировок. Более того, не так много людей стремятся к диплому победителя - настолько сложно и почётно в этой олимпиаде стать хотя бы призёром! Заветные дипломы по информатике каждый год получают всего 200-300 человек из миллионов школьников. Моя история с этой олимпиадой не самая сказочная - в свои школьные годы я пожертвовал подготовкой к информатике ради подготовки к математике. Да, в итоге я занял 7 место на финале математики и почти стал победителем, но на информатике выступил, мягко говоря, ужасно - даже не близко к призёрам. Поэтому мне стало интересно написать зеркало ВсОШ по информатике за 2026 год, чтобы проверить, как сильно я вырос в олимпиадах и на что способен.

Читать далее

Новости

Код написали за нас. Как упростить ревью и сколько это стоит в рантайме

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

Последнее время я почти не пишу код руками — значительную часть реализации берут на себя AI-агенты. Но работы меньше не стало: теперь нужно задавать ограничения, проверять архитектуру и понимать результат, не перечитывая тысячи сгенерированных строк. Я попробовал сделать архитектурный граф общей моделью для человека, агента и генератора кода. Из одного графа получил сервисы на Go, Python, C++ и Rust, а затем сравнил их с прямыми реализациями того же HTTP → gRPC сценария. Главный вопрос эксперимента: какова runtime-плата за систему, которую проще понимать, изменять и наблюдать?

Читать далее

Как я создал свою мини‑Вселенную

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

Привет, читатель!

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

Читать далее

BLIS: недостающую среднюю ступеньку построили тридцать лет назад

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

В этой части мы начнём с тупика, в который приводит голый цикл FMOPA; затем покажем, какую часть GEMM BLIS уже построил за нас; после этого разберём пять циклов BLIS и место микроядра внутри них. Финал главы должен сделать дальнейший план конкретным: что именно нужно добавить для Apple SME, а что уже относится к готовой «мебели» фреймворка.

Читать далее

Как я перестал бояться и полюбил ассемблер

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

Эта статья посвящена путешествию в мир ретропрограммирования. Надеюсь, в ней у меня получится передать вам то чувство восхищения, которое я испытал и которое заставило меня написать этот пост. Пост о том, как создавать ПО для компьютерной системы Atari ST, выпущенной в 1985 году.

Atari ST относится ко второй крупной волне домашних компьютеров. Первая волна, созданная на основе 8-битных CPU, принесла в наши дома такие знаковые машины, как Commodore C64 и Sinclair Spectrum. Вторую волну разрабатывали на основе 16-битных CPU; она породила Apple Macintosh, Commodore Amiga и, разумеется, Atari ST.

Atari ST 1040 STF с цветным монитором Atari SC1224

Типичный Atari ST (например, 1040 STFM) имел CPU Motorola 68000 с тактовой частотой 8 МГц и 1 МБ ОЗУ; он загружал ПО с 3,5-дюймовых гибких дисков. Его графические возможности состояли из монохромного режима высокого разрешения 640x400 и 16-цветного режима 320x200, получившего наибольшую популярность в играх.

Рабочий стол GEM Atari ST имел интерфейс, очень похожий на разработанный Xerox и Apple, у него были диспетчер файлов, иконки и многооконность. Это его монохромная версия высокого разрешения.

Если у вас нет реального Atari ST, то его можно просто эмулировать на современном компьютере. Первые эмуляторы появились ещё в 90-х. Хорошим считается Hatari, который существует для большинства современных платформ. В эмуляторе также есть современные инструменты разработки. В прошлом приходилось пользоваться неуклюжим ПО разработки, которое загружалось с дискет, а сегодня можно просто писать всё в VSCode и компилировать современным GCC. У нас есть доступ к современным графическим редакторам наподобие GIMP, и мы даже можем просить помощи у ИИ.

Читать далее

Композиционный анализ проектов на C++

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

Композиционный анализ (Software Composition Analysis, SCA) — это практика автоматического выявления и отслеживания внешних зависимостей проекта с целью мониторинга их известных уязвимостей.

В этой статье мы расскажем, какие инструменты используем и как организуем пайплайн для своевременного и регулярного анализа зависимостей проектов на C++.

P. S. В написании текста статьи не участвовала нейросеть! 100% ручной труд разработчика Георгия 😇

Читать далее

C++-техрадар: что разработчики действительно готовы брать в работу

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

В мае на конференциях C++ Russia и HolyJS мы предложили участникам оценить технологии, инструменты и инженерные практики, с которыми они работают или за которыми следят. Так появились данные для двух технических радаров: по экосистеме C++ и по JavaScript.

Сырые цифры сами по себе рассказывают немного, поэтому мы отдали результаты на разбор эксперту. Виктор Новиков, руководитель группы разработки в «Лаборатории Касперского», посмотрел на распределения голосов и поделился своим мнением, почему CMake уверенно побеждает, а PostgreSQL раскалывает аудиторию пополам. В этой статье — его анализ C++-части исследования. Про техрадар JavaScript мы расскажем в другой статье.

Посмотреть радар и принять участие в голосовании можно на странице проекта.

Читать далее

Как я придумывал замену Redis и что из этого получилось

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

Некоторое время назад мне пришла задача спроектировать высокопроизводительный балансировщик нагрузки для протокола Diameter. Через 3 месяца задача исчезла, так как как оказалось слишком долго и дорого, но в итоге балансировщик был сделан и имеется его MVP которое готово к установке как на реальное железо так и в облаке. В итоге продукт получился неплохим, и он с лихвой выигрывал имееющееся решение в той компании, по производительности был выигрыш раз в 6 по ресурсам раз в 100. Но суть не в этом, а в том что балансировщик был кластерным и умел хранить сессии в Redis. Решение было сделано, оно показало работоспособность, все хорошо, но меня не устраивала производительность. В тот момент я столкнулся с очень интересной проблемой - по каким то причинам я не мог пробить барьер в 5-7К Diameter Transactions per second. В принципе 5-7К TPS было неплохо, но проблемным участком как показал анализ был Redis. Проведя немного времени я смог добиться приемлемого результать и производительность поднялась до 20К TPS но там были другие проблемы.

Читать далее

Почему для Telegram-квестов мне пришлось написать свою виртуальную машину: История Questogram

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

Иногда небольшой пет-проект неожиданно превращается во что-то совсем другое. Сначала я делал квесты, потом решил сделать движок для Telegram-квестов, а в итоге разработал собственную виртуальную машину, язык сценариев и браузерный редактор, похожий на Scratch. В статье — история того, почему обычный код оказался плохим инструментом для написания сюжетов и что получилось в результате.

Читать далее

Как мы вынесли алгоритм ценообразования из кода Яндекс Такси (и почему это не было очевидно с самого начала)

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

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

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

Читать далее

Попробуйте найти примеры кода для SME — я подожду

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

В этой части мы проверим, есть ли у SME учебная дорога, сравнимая с той, которую получили тензорные ядра GPU; затем разберём два реально полезных источника: Arm Learning Path и KleidiAI; после этого отделим то, чему они действительно учат, от того, где они останавливаются. К концу главы станет видно, какая именно «середина лестницы» отсутствует и почему следующая часть неизбежно приводит к BLIS.

Читать далее

librats: Выпуск версии 2.0.x (библиотека для распределённых P2P-приложений). Так же релиз rats-search 2.1.7 и rasync

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

Всем привет! Я продолжаю развивать свою библиотеку для создания распределённых приложений. Она уже легла в основу новой версии rats-search (распределённый торрент-поисковик) и rasync (синхронизация папок, файлов и исходников между устройствами), а также, судя по всему, используется в UltraVNC (VNC-клиент).

Библиотека позволяет развернуть собственную P2P-сеть, связать пользователей между собой и выстроить обмен данными через потоки разных типов — бинарные, строковые и другие. Главная особенность — автоматическое обнаружение участников (peer discovery), что особенно актуально в условиях постоянных блокировок и сетевых ограничений.

На данный момент поддерживаются C/C++, Java (Android), Python и Node.js.

Это очередное обновление: ещё больше стабильности в работе различных функций, значительно улучшены протоколы DHT и BitTorrent. Обо всём подробнее — далее.

Последний стабильный релиз на сегодня — 2.0.5. Исходный код и собранные бинарные файлы доступны для:

Читать далее

Хакатон — соло игра за 2 дня на Fable 5 и Nano Banana 2

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

Поучаствовал в хакатоне от работы. Интересно было испытать себя и проверить свой тулсет для разработки игр. Смогу ли я один сделать игру под ключ - код, арт, звуки?

Штош, игру сделал! Правда лег спать около шести утра 😖 Но это было интересно!

Внутри ссылка на игру и немного технических подробностей как генерил арт, код и собирал игру

Читать далее

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

Агент изменил рабочую базу данных, хотя это было запрещено в правилах

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

На форуме Cursor разработчик рассказал, как запретил агенту работать с удалённой базой, а тот всё равно выполнил npx supabase db push. Эта команда отправляет локальные изменения схемы в подключённый удалённый проект. Агент мог изменить рабочую базу данных — и только после этого сам признал, что нарушил правило.

Модератор форума Cursor посоветовал сократить правила, убрать доступ к рабочей среде и настроить отдельную проверку, которая будет блокировать опасные команды перед запуском. Это один случай, а не статистика надёжности Cursor. Но он хорошо показывает цену забытого правила: иногда агент затрагивает внешнюю систему, где простого отката файла уже недостаточно.

У меня всё закончилось проще. Вчера я попросил Cursor разобраться с упавшим сквозным тестом. Я ждал исправления в приложении, но агент поменял проверку в самом тесте и отчитался, что всё готово. Тест, разумеется, прошёл.

Такое поведение я заранее запретил в правилах проекта. В правиле было написано: сквозные тесты считаем контрактом, при падении сначала ищем ошибку в приложении, сам тест без согласования не меняем. Cursor правило видел — по крайней мере, в начале разговора он ему следовал.

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

Читать далее

Если вы думаете, что знаете, чем отличается «Expression» от «Statement», то, скорее всего, вы ошибаетесь

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

Я занимаюсь изучением синтаксиса языков программирования и пытаюсь отделить фундаментальные закономерности от исторических случайностей. Одна из таких случайностей - почти повсеместное использование терминов выражение (expression) и инструкция (statement) при описании и классификации синтаксиса языков программирования.

Интуитивно кажется, что 2 + 2 и if (x) { foo(); } - это совершенно разные сущности, но при более глубоком анализе оказывается, что подобное разделение искусственное и возникло из-за архитектурных особенностей вычислительных машин почти полвека назад и с тех пор просто «переходит» из языка в язык.

Читать далее

CONTRACT: одна схема вместо N×M сериализаторов

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

Одна C++ схема — protobuf, binary, JSON, YAML и structured logging без ручных маппингов. В статье разбираю, как CONTRACT отделяет стабильный контракт типа от конкретных форматов, зачем нужны BASE, PROPERTY и REFERENCE и как атрибуты полей задают общую политику для разных адаптеров. Всё - на реальном коде из репозитория: YAML-конфиг, структурированный лог и сравнение производительности с libprotobuf. GitHub.

Читать далее

ИИ-Автопилот: поток принятых задач вырос в тринадцать раз

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

Вторая часть. В первой я собрал конвейер из ИИ-агентов: он сам ведёт задачу от тикета в YouTrack до коммита - разбирает, правит C++ в проекте на три миллиона строк, собирает и доказывает исправление кадром из живого интерфейса.

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

Тринадцатикратный рост из заголовка тоже разбираю. Но самое интересное оказалось не в нём.

Читать далее

Если ссылки схлопываются, значит это кому‑то нужно

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

В прошлой статье (Непослушный using ) я разобрал, как using вмешивается в поиск имён и почему его поведение часто расходится с тем, что от него ждет программист, и на этом ветку статей про поиск имен (name lookup) можно временно закрыть.

Using'и попортят вам в проектах еще немало крови, но в целом их проблемы известны и легко ловятся, а теперь давайте поговорим обauto и выводе типов в шаблонах, который регулярно удивляет даже опытных программистов на C++, когда речь идёт о распаде типов (type decay) и неявных ловушках при работе с ним. Представьте, что у нас есть несколько переменных, которые выглядят разными: const int&, просто intconst int и int&&.

По наивной интуиции можно подумать, что компилятор должен относиться к ним по‑разному: и где‑то ссылка, где‑то константность, где‑то rvalue, но это будет работать только до тех пор, пока мы не используем auto или шаблон.

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

Читать далее

C3D Vision и C3D Viewer: ключевые нововведения и усовершенствования

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

Наталья Яковлева, инженер-программист, C3D Labs, рассказывает о том, что нового появилось в продуктах C3D Vision и C3D Viewer.

C3D Vision — это высокопроизводительная графическая библиотека, ориентированная на инженерные задачи и предназначенная для рендеринга 3D-моделей САПР на настольных компьютерах (рис. 1). Она позволяет визуализировать данные в полигональном представлении, предоставляет API для работы с 3D-моделями, позволяет задавать иерархию визуальных объектов и выполнять необходимые преобразования.

Читать далее

Рефлексия в C++26 на примере сериализации и десериализации JSON

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

Всем привет! Меня зовут Тимур, я работаю в YADRO, и уже больше двух месяцев мой системный компилятор — gcc16. В новом стандарте добавили очень много, и сегодня я расскажу вам о некоторых обновлениях. В основном о рефлексии, но также будет немного и о контрактах.

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

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