Обновить
1515.49

Программирование *

Искусство создания компьютерных программ

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

Приведение типа в C++

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

Продолжаем серию «C++, копаем вглубь». Цель этой серии — рассказать максимально подробно о разных особенностях языка, возможно довольно специфичных. Это десятая статья из серии, список предыдущих статей приведен в разделе 9. Серия ориентирована на программистов, имеющих определенный опыт работы на C++. Данная статья посвящена приведениям типа.

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

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

Читать далее

Новости

ИИ в Agile-команде. Цифровой помощник, железный дровосек или коллега?

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

Всем привет! На связи команда «Клаудмастер» («Инферит FinOps»). Хотим рассказать вам про то, как мы используем ИИ в нашей работе.

Помните март 2025-го? Дарио Амадей, генеральный директор Anthropic, обещает, что очень скоро почти весь код будет писать ИИ, регуляторы и рынок труда должны будут адаптироваться (ну вы поняли). 

Тогда мы с командой спешно затеяли эксперимент: решили проверить, каков реальный КПД от ИИ на практике и стоит ли нам в него вложиться.

Читать далее

Агглютинативный код: почему будущее IT требует смены лингвистического фундамента

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

Каждые несколько лет IT-индустрия переживает очередной ренессанс. Мы пишем новые языки программирования - Rust для безопасной работы с памятью, Go для идеальной конкурентности, Swift для экосистемности. Мы плодим новые фреймворки, стандарты и сетевые протоколы, пытаясь превзойти существующие ограничения.

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

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

Читать далее

Генерация лабиринтов с использованием алгоритма Recursive backtracker

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

Расскажу о том, как сгенерировать рандомный лабиринт, используя алгоритм Recursive backtracker. Все подробности об алгоритме, структуре кода, асимптотике и итоговых лабиринтах здесь.

Читать далее

Claude Sonnet 4.6 vs ChatGPT 5.2: кто же лучше?

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

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

Но есть одна проблема. Рынок снова раскололся. OpenAI выпустила GPT‑5.2 с упором на математику и науку, а Anthropic – Claude Sonnet 4.6, который обещает революцию в программировании и агентных сценариях. Два титана, две философии, и нам снова выбирать, на кого ставить в этом году.

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

Читайте, сравнивайте и делитесь мнением! Claude Sonnet 4.6 против GPT-5.2: кодеры против математиков, гигантский контекст против научной точности, агенты против аналитиков. Разминаем пальцы и готовимся выбирать нового короля горы!

Читать далее

Одна строка кода, которая заблокировала 102 потока

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

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

Это история о том, как DatatypeFactory.newInstance() поставил на колени наш высокопроизводительный Java-сервис, и об удивительно простом решении, позволившем полностью избавиться от проблемы.

Читать далее

3D-шейдер реального времени на Game Boy Color

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

Я написал игру для Game Boy Color, которая рендерит изображения в реальном времени. Игрок управляет источником света и вращает объект.

Поиграть в неё можно здесь: https://blog.otterstack.com/posts/202512-gbshader/data/teapot.html

Посмотреть код и скачать ROM можно здесь: https://github.com/nukep/gbshader

Читать далее

Заметки на полях: Изолируем Lua окружение в C++ приложении. Часть 3/3

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

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

В этой части разберём как из кубиков с буквами 'О', 'П', 'Ж' и 'А' while true do end

...составить слово "СЧАСТЬЕ".

Структуры данных на практике. Глава 5: Связанные списки — убийцы кэша

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

«Связанные списки — это goto структур данных.», — авторство приписывают разным системным программистам.

История из учебника

Все студенты, изучающие computer science, узнают о связанных списках на первом курсе по структурам данных. Их описание звучит привлекательно:

Преимущества (согласно учебникам):

- Вставки и удаления за O(1) в известных позициях

- Динамический размер: увеличиваются и уменьшаются согласно необходимости

- Пространство не тратится впустую: можно распределять ровно столько, сколько нужно

- Гибкость: простота реализации стеков, очередей и других структур

Недостатки (согласно учебникам):

- Поиск за O(n): необходим обход, начиная с головы списка

- Лишняя память: указатели добавляют оверхед

- Невозможность произвольного доступа: нельзя выполнять переходы в произвольные позиции

Вывод из учебника: «Используйте связанные списки, когда требуются частые вставки/удаления и не нужен произвольный доступ».

Вроде бы звучит разумно?

Проверка реальностью

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

Не потому, что ошибочен анализ «О» большого, в нём всё правильно, а потому, что он неполон. Он забывает про оборудование.

Читать далее

Я дал 100 AI-агентам равный бюджет — они изобрели кредиты под 15%

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

Дал 100 AI-агентам по 1000 токенов и одну цель — набрать максимум очков. Не программировал ни торговлю, ни кредиты, ни специализацию. Через двое суток агент №23 попросил у агента №91 займ под 15%. К 72-му часу — три банкира, 12 банкротов и коэффициент Джини 0.71. Внутри — код на Python, логи, распределение ресурсов. И честный разбор того в чем я до сих пор не уверен.

Читать далее

Избавляемся от утечек памяти в Angular с withExperimentalAutoCleanupInjectors

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

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

Читать далее

Как запустить новый XBox 360 рекомпилятор RexGlue

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

Инструкция по сборке нового XBox 360 статического рекомпилятора RexGlue https://github.com/rexglue/rexglue-sdk

Читать далее

Open Source: Зачем это тебе на самом деле?

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

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

Рассказываем, как найти актуальный проект, не утонуть в заброшенных Issue и грамотно отправить свой первый PR. А если вы сами развиваете проект то узнаете, как дать ему шанс получить: звёзды, обсуждение, интерес со стороны других разработчиков и первые контрибьюты в дружелюбной среде.

▶ Войти в Open Source

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

Три аккаунта ChatGPT и один прокси: как перестать следить за лимитами

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

У меня три ChatGPT-аккаунта. На каждом свои лимиты, своя история, свои причины существовать. И на каждом они кончаются в самый неподходящий момент.

Переключаться вручную то ещё удовольствие. Особенно когда работаешь через Codex CLI или OpenCode и хочешь просто писать код, а не следить за тем, на каком аккаунте сейчас крутится запрос.

Именно под эту боль и написан codex-lb.

Читать далее

Архитектурная бомба замедленного действия

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

AI резко удешевил запуск MVP, но может так же резко повысить цену ошибок в архитектуре. Когда основу системы генерирует LLM, команда получает быстрый результат и «черный ящик» с техдолгом внутри. Код работает, а почему он устроен именно так, никто до конца не понимает.

Где именно спрятана бомба замедленного действия и как с этим жить инженерам? Как AI-генерация меняет роль архитектора, почему классические ревью перестают быть достаточными и какие виды тестирования становятся критичными?

Разбираемся далее

Писать код проще, чем книгу о том, как писать код

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

Иногда книга начинается с одной статьи, опубликованной в нужный момент и в нужном Хабре и в моём случае всё действительно началось с публикации про аллокаторы, которая несмотря на обилие технического материала, кода и схем набрала больше всего плюсов среди моих статей на околоплюсовую и игродев разработку. А дальше и сам цикл Game++ постепенно вырос из отдельных технических размышлений о C++, архитектуре движков и производительности в связный нарратив. За спиной Game++ стоит еще больше узкотехнических материалов в блоге и вики моей компании и я бы рад ими поделиться, да и делюсь периодически, но сами понимаете выкладывать можно не всё и даже из то, что выложено на Хабре, частенько было подрезано, ибо NDA и секретные технологии-бла-бла-бла. Та статья стала точкой, когда я увидел, что разрозненные тексты на самом деле образуют скелет будущей книги, нужно лишь перестать относиться к ним как к «постам» и начать воспринимать как главы. Идея написать книгу не пришла просто так, и несколько не связанных между собой людей и компаний связались и предложили переписать цикл статей в виде книги.

Читать далее

Получение списка и содержимого чатов Telegram с помощью TDLib (на примере Kotlin)

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

Когда я стал решать задачу получения сообщений из Telegram для последующего анализа, понял — не хватает простого и понятного введения во взаимодействие с Telegram в роли клиента, а не бота. Официальная документация Telegram отличается от привычной мне документации в мире Java и Rust как по подаче, так и по качеству. Большинство статьей по запросу "how to load chats from telegram" отсылают к высокоуровневым библиотекам на Python.

Главная цель статьи дать основу для разработки приложений на Telegram на среднем уровне абстракции TDLib и взаимодействие с Telegram c помощью посылки и получения сообщения MTProto. В этой статье я постарался раскрыть как надо читать документацию мессенджера, какие существуют способы взаимодействия с платформой и по каким принципам спроектировано API. Во многих местах я не буду давать детальное описание всех параметров, предоставив вместо этого ссылку на документацию. Задача статьи — дать фундамент для разработки своих сценариев. Несмотря на использование Kotlin, информация из статьи будет полезна для любого языка программирования.

Детально раскрыты следующие сценарии взаимодействия: вход в Telegram зарегистрированным пользователем; получение списка чатов и их типизация (каналы, формы и т. п.); получение сообщений из чата.

Погрузиться в TDLib

«Я напишу вам CLAUDE.md, и всё полетит»: как я провалил первую неделю внедрения ИИ и что пришлось менять

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

Честная история о том, как я взялся за проект по внедрению ИИ в разработку во время переезда на новый стек.

Читать далее

Принципы DOD в C++: Часть 1. Оптимизация структур

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

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

Читать далее

mise — утилита, необходимая каждому разработчику и в каждом проекте

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

Утилита mise (полное название MISE-EN-PLACE) настраивает необходимое для разработки окружение:

Для разработчика это глобальный набор инструментов (от языков программирования до мелких утилит) нужных версий.

Для проектов это аналогичный набор инструментов (специфичных для этого проекта версий, одинаковых у всех разработчиков и на CI) плюс конфигурация (переменные окружения/зашифрованные секреты для конкретного dev/staging/prod/… окружения плюс локальные отличия) плюс задачи (скрипты) для сборки/тестирования/деплоя/….

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

Читать далее