Обновить

Бэкенд

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

WebAssembly (WASM) — не серебряная пуля

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

WebAssembly появился для браузерных задач как способ исполнять тяжелый код быстрее, чем это делает JavaScript. Но за последние годы он начал выходить далеко (иногда буквально далеко) за пределы вкладки браузера: серверы, edge-вычисления, плагины, песочницы. Появились рантаймы Wasmtime, WasmEdge, Wasmer, которые исполняют WASM-модули\компоненты прямо на ОС. Звучит красиво - собрал один бинарь, а запускаешь где угодно, да еще и в максимальной изоляции.

Но есть интересное наблюдение. Существуют проекты, которые строили свои виртуальные машины на WASM, но отказались от него. Самый заметный пример - это Polkadot. Они спроектировали собственную PolkaVM на базе набора инструкций RISC-V и переключили исполнительный слой смарт-контрактов на нее (при этом сам runtime Polkadot по-прежнему компилируется в WASM). Если WASM настолько хорош, как заявляется, то почему для нового движка выбрали не его, а регистровую машину?

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

Давайте попробуем разобраться, чем стековая модель отличается от регистровой и где эта разница реально что-то меняет. А также рассмотрим, где же в WASM скрыты компромиссы.

Читать далее

«dap-18» это не dap-18: номер версии протокола не фиксирует формат на проводе

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

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

Читать далее

Парсер C++ на своем DSL: попытка обогнать компилятор

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

Проекты растут. Кодовая база растёт. Время компиляции растёт вместе с ними и переходит все границы разумного.

В какой-то момент я решил: а что если попробовать написать свой компилятор? Пока только для разработки, не для прода. На замену Clang++/G++/CL.EXE.

Эта статья — о первом шаге на этом пути. О парсере C++, который я написал на своём DSL специально сделанном для этого изначально.

Матчинг запущен? Кооперация предложена?

Аллокатор в Go

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

Привет, Хабр! Текущая статья будет полезна тем, кто уже знаком с основами языка программирования Golang и хочет более углублённо изучить его. Исходя из названия стати понятно, что речь пойдёт об аллокаторах, основных видах, плюсах и минусах, а также о том, какой аллокатор используется в Go. Я настоятельно рекомендую прочитать статью целиком, прежде, чем приступать к чтению части конкретно относящейся к аллокатору Go.

Читать далее

Пишу консольные приложения на iPad с помощью AI-агента и удалённого VPS

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

Консольное приложение - не самая очевидная вещь для разработки на планшете. Ни полноценного терминала, ни файловой системы, к которой привыкли на десктопе, ни нормальной многозадачности - так было ещё пару лет назад. Но если вынести сам процесс исполнения кода на удалённый Linux-сервер, а iPad превратить в тонкий клиент для управления AI-агентом и просмотра результата, картина меняется полностью. Ниже - рабочий процесс, который у меня сложился для разработки CLI-инструментов на Python: VPS + AI Coding Agent (Claude Code) в tmux + Remote IDE как единая точка входа, всё на iPad со Stage Manager. Для такого цикла нужно немного: SSH-доступ к серверу, где крутится агент, и способ параллельно смотреть на файлы и на diff, не теряя сессию агента при переключении между окнами. Дальше - как это выглядит по шагам.

Читать далее

Мок-интервью: зачем смотреть записи чужих собеседований — и как делать это правильно

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

Хабр, привет! Меня зовут Андрей Пронин, я руководитель «бирюзовой» студии заказной разработки ProninTeam и наставник на курсе по управлению командой разработки в Яндекс Практикуме.

Несколько лет назад я запустил YouTube-канал с публичными мок-собеседованиями по Python для джунов из Практикума. В этом материале расскажу, как так вышло, чем мок-интервью отличается от настоящего — и как формат помогает начинающим разработчикам.

Читать далее

Грегор Кизалес и др. «Аспектно-ориентированное программирование»

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

Идеи аспектно-ориентированного программирования до сих пор широко используются в современных языках и фреймворках — достаточно вспомнить их роль в экосистеме Spring. Однако при всей практической востребованности сама парадигма остается как будто в тени. Чтобы немного это исправить, мы публикуем перевод текста Грегора Кизалеса и его коллег из Xerox PARC — первого полноценного манифеста АОП, представленного на конференции ECOOP ’97 и заложившего основы для дальнейших исследований в этой области.

Читать далее

redb.Route — коннектор RabbitMQ: RPC, конкурирующие консьюмеры и dead-letter. Уходим от MassTransit

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

Про Kafka в этой серии уже было. Теперь — RabbitMQ, и с упором на то, как им пользоваться. Коннектор redb.Route.RabbitMQ — поверх официального RabbitMQ.Client 7.x, но писать вам придётся не «клиент», а маршруты, где весь брокер задаётся одной строкой-URI:

Читать далее

Почему хороший результат в разработке с ИИ начинается не с промпта

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

Хабр, привет! Меня зовут Сергей Бережной, я директор по взаимодействию с разработчиками в Яндексе и эксперт онлайн-магистратуры «Фронтенд-, бэкенд-разработка и ИИ-решения» ИТМО в партнёрстве с Яндекс Практикумом. Приёмная кампания в нашу онлайн-магистратуру уже идёт, программа рассчитана на опытных разработчиков и на тех, кто идёт с нуля. Поэтому, если хотите программировать на JavaScript, Python, Java или С++ — ждём вас. А в этой статье я хочу поговорить о том, почему работа с ИИ постепенно перестаёт сводиться к написанию промптов, зачем разработчику учиться мыслить процессами, а не отдельными запросами, и почему именно такой подход позволяет получать качественный результат.

Читать далее

Суть асинхронности в python

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

Добрых дней, товарищи хабравчане! Изначально я писал этот текст как конспект по асинхронности в пайтоне для самого себя, потому что вещь эта довольно хитрая и не хотелось бы в будущем растерять и забыть знания о ней, когда буду работать с другими языками программирования и фреймворками. Но потом решил попробовать переделать это в формат статьи и опубликовать, потому что сами знаете — когда кому‑то объясняешь, сам начинаешь лучше понимать. Очень надеюсь на конструктивную критику в комментариях, так как хочу сделать эту статью хорошим пособием для новичков или просто людей, которые хотят повторить и закрепить фундаментальные концепции, потому что без их понимания никуда. Итак, приступим.

Читать далее

Великая ересь, или Как использовать protobuf без контракта

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

Привет! На связи Влад, разработчик product-facade — сердца витрины Ozon и одного из самых высоконагруженных сервисов, который выдерживает до 2,2 млн RPS. В прошлой моей статье я рассказывал об одном из архитектурных вызовов, с которым мы столкнулись в процессе работы. В этот раз продолжим тему микросервисной архитектуры и поговорим о том, что происходит, когда привычная строгость контрактов начинает мешать.

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

Читать далее

Stack Overflow for Agents: месяц внутри платформы, где опытом обмениваются агенты

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

Агент в Сан-Франциско тратит двадцать минут на то, чтобы пофиксить баг, который агент в Лондоне решил пять минут назад. Опыт первого умрёт вместе с сессией: завтра тот же баг будет с нуля решать кто-то третий. В Stack Overflow это называют Ephemeral Intelligence Gap — и 10 июня 2026-го компания запустила под эту проблему отдельную платформу: Stack Overflow for Agents, площадку, где опытом обмениваются не люди, а агенты.

На Хабре про запуск уже писали в паре статей, а в опросе под одной из них 59% проголосовали за «проект закроется». Мне есть что к этому добавить: я почти сразу после запуска завёл туда агента — научил его ходить на площадку по API — и спустя месяц он в топ-8 лидерборда. Всё это время я смотрел на платформу не из новостей, а изнутри — и встраивал её в свой пайплайн агентной разработки.

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

Читать далее

Почему одна вставка в PHP‑массив может стоить 100 мс

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

На примере PHP хорошо видно, как внутренние оптимизации динамически типизированного языка развиваются и усложняются.

PHP‑массив выглядит универсальным, но внутри него скрыто множество оптимизаций и ветвлений, в их числе оптимизации для хранения и работы с массивами: Packed List & HashTable. Взаимодействие между ними и copy‑on‑write дают иногда неожиданное и непрозрачное поведение с точки зрения PHP программиста.

Копнуть глубже

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

Масштабирование Java-систем реального времени

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

Событийно-ориентированная архитектура красиво выглядит на схеме — пока не встречается с требованиями реального времени.

В переводе от команды Spring АйО разбирается опыт масштабирования Java-платформы контакт-центра: почему локальные кеши начали расходиться, как повторное воспроизведение Kafka-событий почти сделало бесполезным автомасштабирование, откуда взялось получасовое отставание потребителей и почему часть критических путей пришлось вернуть к синхронному взаимодействию.

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

Читать далее

Асимптотика на практике: Сравнение алгоритма сортировки вставками и выбором

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

Асимптотика на практике: Сравнение алгоритма сортировки вставками и выбором

Автор: Шуравин Александр, к. т. н., доцент, в IT более 20 лет.

Введение

В теории алгоритмов мы привыкли оперировать абстракциями: O(n²), O(n log n), O(1). Но что скрывается за этими обозначениями в реальном продакшене? Насколько критичен выбор алгоритма для вашей системы?

В этой статье я исследую два классических алгоритма сортировки — сортировку выбором (Selection Sort) и сортировку вставками (Insertion Sort) — на трёх типах входных данных:

1. Случайный массив.

2. Уже отсортированный массив (best case).

3. Массив, отсортированный в обратном порядке (worst case).

 Эксперимент проведён на Python с замером времени выполнения для размеров массива от 100 до 1000 с шагом 100.

Теоретическая справка

Сортировка выбором (Selection Sort)

Идея: На каждой итерации находим минимальный элемент в неотсортированной части массива и меняем его с первым элементом этой части.

Читать далее

Создаём DSL на C#: Добавляем семантику

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

Создаю собственный DSL на C#: рассказываю о том, как я добавляю семантическую модель. Рассказываю архитектуру семантической модели.

Читать далее

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

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

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

Меня зовут Илья Новиков, я технический директор компании «Исходный код».

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

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

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

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

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

Читать далее

Docker Gitlab + Gitlab Runners на Fedora 44

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

Docker Gitlab + Gitlab runners на Fedora 44. Как настраивал у себя и немного каких приколов может быть.

Что посмотреть

Эволюция, а не революция: релиз Elixir 1.20 и почему он вас заинтересует

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

В мире разработки программного обеспечения редко можно увидеть, как зрелый, динамический язык добавляет мощную, статическую систему типов без ущерба для своей философии и существующего кода. 3 июня 2026 года команда Elixir сделала именно это, выпустив версию 1.20. Главное нововведение — постепенная типизация (gradual typing), которая обещает найти в вашем коде «верифицированные баги» (verified bugs — ошибки, гарантированно ведущие к падению в рантайме) без необходимости писать аннотации типов.

Но почему это должно волновать вас, если вы пишете на Python, Java или Go? Команда Elixir поставила перед собой цель, которую многие считают «святым граалем». На практике сочетание всех трёх свойств почти не встречается.

И я считаю, что это отличный повод присмотреться к Elixir, даже если вы никогда не писали на нём ни строчки. Зрелый и интересный язык, работающий на виртуальной машине Erlang (BEAM) и исповедующий функциональную парадигму. Он известен своей отказоустойчивостью и конкурентностью, но, увы, остается малоизвестным языком, и я надеюсь что эта статья заставит вас заинтересоваться Elixir.

Читать далее

Как обучение в ВУЗе изменило мой подход к программированию: написание собственного приложения для моделирования

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

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

Читать далее