Обновить
64K+

C# *

Объектно-ориентированный язык программирования

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

Вайбкодинг: что дальше?

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

Агенты стали новой средой разработки, которая фактически заменяет существующие IDE. Новые методы разработки (вайбкодинг, промпт инженеринг, харнесс инженеринг) заменяют прежние подходы. Статья относится к агентской разработке и описывает скилл, который позволяет решать большие и сложные задачи.

Читать далее

Новости

Публикуем .NET MAUI‑приложение в RuStore: от унаследованного Xamarin‑проекта до первого релиза

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

Миграция с Xamarin.Forms на.NET MAUI, десятки тысяч строк чужого кода, несколько неудачных попыток переписывания и первая публикация приложения в RuStore. Расскажу, как проходил этот путь, с какими трудностями столкнулась и что стоит учесть при подготовке Android‑приложения к публикации. А в конце — о том, что ждёт впереди: переход на новую версию на iPad.

Читать про миграцию и RuStore

Почему число это плохой адрес для инструкции?

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

В какой-то момент HydraScript перестал справляться со своей основной задачей — выполнять программы. Статический анализ падал на корректном коде, и его пришлось отключить. Кодогенерация назначала инструкциям неверные адреса: виртуальная машина зацикливалась или падала с исключением.

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

Читать далее

Обзор нововведений в C# 15

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

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

Читать далее

Scrutor: логирование отменённых HTTP-запросов

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

Представьте клиент-серверную архитектуру, где фронтенд написан на React, бэкенд — на ASP.NET Core, а для логирования на стороне бэкенда используется NLog.

Иногда может происходить следующий сценарий: пользователь находится на веб-странице и выполняет какое-то действие (например, нажимает на кнопку «Обновить»). В этот момент фронтенд присылает HTTP запрос на бэкенд, и по какой-то причине этот запрос начинает долго обрабатываться на бэкенде. В это время пользователь уходит со страницы, браузер присылает отмену запроса, бэкенд получает сигнал отмены (CancellationToken), выбрасывается OperationCanceledException, и в логи улетает полноценная ошибка.

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

Рассказываю, почему стандартные фильтры NLog или кастомные Middleware не решают эту проблему системно. Разбираем, как с помощью библиотеки Scrutor динамически декорировать ILoggerProvider и глушить логи отмен на уровне рантайма без размазывания try/catch по контроллерам. Внутри — анализ подводных камней, бенчмарки и ссылка на репозиторий с тестами.

Читать далее

Оптимизируем отпуск как инженеры: искусство продавать выходные

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

Каждую осень HR просит запланировать отпуска на следующий год. Обычно люди сразу берут между майскими, кто-то подбирает даны под день народного единства, а многие просто ставят на декабрь, чтобы потом двигать можно было.

А я задался вопросом - можно ли найти оптимальный отпуск под запросы и открыл VS Code\Jupiter с F# (пока оно еще работает). Всё живёт в Jupyter-ноутбуке с ядром .NET Interactive — да, F# умеет в ноутбуки, питонисты, не ревнуйте.

Спойлер: солвер нашёл способ заработать на отпуске 85 тысяч. Мне не понравилось.

Читать далее

Как индексация строк изменила систему типов HydraScript

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

В HydraScript мне понадобились две привычные операции со строками: получить длину и обратиться по индексу. Массивы уже умели и то и другое. Чтобы научить этому строки, нужно было поправить несколько мест в семантическом анализаторе: каждое по-своему решало, что разрешено делать с типом.

Заодно появился повод разобраться, почему эти правила оказались именно там. Тип строки в интерпретаторе был, а за списком доступных ему операций приходилось идти в обработчики разных выражений. Добавляешь возможность строке, а её поведение собираешь по всему анализатору.

HydraScript — мой интерпретируемый язык, написанный на C#. В нём статическая типизация, поэтому несовместимые операции нужно отсеять до исполнения. Для поддержки text[index] мало достать символ из .NET-строки: анализатор должен понять, допустимо ли выражение и какой у него тип.

Читать далее

Как менялся pattern matching в C#. Пять версий на примерах

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

Я преподаю C# и делаю платформу обучения IRON PROGRAMMER во Владикавказе. Когда ученики присылают решения, я часто вижу длинные цепочки проверок. Объект существует, вложенное свойство не null, город совпадает, прогресс дошел до нужного значения. Сопоставление с образцом (pattern matching) записывает такую проверку в одну строку.

Коротко. C# 7 дал образцы объявления и when, C# 8 выражение switch и образцы свойств, C# 9 сравнения и and/or/not, C# 10 вложенные свойства через точку, C# 11 образцы списков. В C# 12, 13 и 14 новых образцов не появилось, а что будет в C# 15, расскажу в конце.

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

Читать далее

Переписали платформу для создания игр: какие решения мы считали крутыми раньше и почему отказались от них потом

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

Создать игру без знаний в IT практически невозможно, но мы нашли решение и разработали платформу, на которой пользователи могут сделать свои аналоги популярной игры Wordle. Как проходила работа над проектом, почему пришлось заново переписать почти весь код и что получилось в итоге, рассказываем в статье. 

Читать далее

Сортировка слиянием, часть 2

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

Это продолжение статьи «Сортировка слиянием — не так просто, как кажется». Там я довёл тестовое задание — отсортировать 100 ГБ строк вида число. текст за час — до 32 минут: пайплайн из пяти стадий на Channels, Brotli, sort keys во временных файлах. Сортировка, конечно же, с учетом культуры.

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

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

Итог: 100 ГБ случайных строк (худший случай для сжатия) на обычном HDD — за 52 минуты.

Рассказываю, как код к этому пришёл: тут и предложение из комментариев, которое сработало слишком хорошо, и CSR-раскладка, которую подсказал ИИ, и малоизвестные части .NET.

Читать далее

Как скормить нейросети большой проект и не скормить лишнего: что я узнал, пока агенты читали мой код

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

Год назад я копировал файлы в чат с нейросетью по одному. Сейчас агенты читают проект сами через MCP‑сервер, и месяц наблюдений за ними удивил сильнее, чем вся предыдущая работа: почему текстовое дерево дороже JSON, почему папку build нельзя пропускать по имени, как спрятать пароль и не сломать код, и что агент делает с контекстом, когда его никто не контролирует.

Читать далее

Создаём DSL на C#: генерация кода, BlackSilence и Hot Reload

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

Пам пам пам пам, пара пам пам пам, кхм кхм, к сути, вот и все заключительная часть о том как создать свой dsl на c#.

Читать далее

Собеседования на программиста в эпоху AI

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

Есть ли теперь вообще толк от собесов, проверяющие знание теории? И как их теперь проводить, когда по ту сторону уже сидит не только кандидат, но и live-агент, отвечающий на вопрос быстрее, чем вы успели его закончить. Толк есть, но только не в том виде, как мы привыкли. Об этом далее.

Читать далее

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

От школьного «Коммерсанта» до собственной экономической игры: проект, к которому я вернулся через семь лет

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


В 2019 году я решил написать экономическую игру. План казался скромным: взять идею любимого «Коммерсанта» времён MS‑DOS, добавить несколько банков, новости и чуть более осмысленное поведение цен.

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

Проект отправился в папку со старыми поделками.

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

Это первая статья о проекте: откуда он появился, какую игру я хочу получить, что в ней уже работает и куда я собираюсь двигаться дальше.

Читать далее

Cоздаю игру на Unity

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

Я решил 1.5 года делать игру и хочу ей поделиться.

Основной сюжет моей игры, ее механика и над чем работаю сейчас.

Читать далее

AS4 в.NET без Java‑шлюза: ebMS 3.0, WS‑Security и неотрекаемые квитанции шагом маршрута

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

AS4: подписанный и зашифрованный обмен документами с гос- и корпоративными системами ЕС. Теперь нативный коннектор redb.Route, без Java MSH.

Если искать ...

Читать далее

DotNext 2026

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

Выложу здесь в одну статью серию постов из моего ТГ канала про то, как в этом году прошёл DotNext.

25 и 26 сентября в Москве прошла очередная конференция DotNext. Вернулся и делюсь впечатлениями. Я уже писал, какие доклады хочу посетить, однако, по ходу несколько раз передумал. На этот раз решил посетить несколько воркшопов, т.к. они не записываются на видео, а доклады можно посмотреть в записи позже. Воркшоп отличается от доклада тем, что на нём разбирается конкретный практический пример, а аудитория активно участвует, задавая вопросы или предлагая решения. Раньше они меня пугали своей продолжительностью. Доклады длятся по часу, а воркшоп – это обычно от полутора часов и дольше. ИЧСХ, в начале каждого воркшопа любой докладчик считает своим долгом упомянуть, что времени у нас очень мало 😉. Хочу признать, что я много потерял, не посещая воркшопы раньше. Это отличный опыт практики и командной работы.

Первым был воркшоп от Андрея Цветцих (они с братом Денисом завсегдатаи различных конференций) «Паттерны асинхронного взаимодействия в распределенных системах». Мы разбирали пример реализации сервиса уведомлений (например, по e-mail) о событиях. Как настроить передачу информации в сервис рассылки? Какие данные передавать? Как реализовать гарантии доставки и избежать отправки дублирующих сообщений? Возможно ли реализовать доставку «exactly-once»? Интересно, что здесь нет единственно верного решения. Каждое решение – компромисс со своими плюсами и минусами.

Читать далее

Поменяли object на Lock, и два потока встретились в критической секции

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

В .NET 9 появился новый примитив синхронизации System.Threading.Lock, и многие команды начали заменять привычные object-замки на новый тип в поисках более предсказуемого поведения и производительности. Но такая замена меняет саму механику работы lock: достаточно одного места, где экземпляр потеряет свой тип, чтобы два участка кода перестали синхронизироваться между собой.

В статье разберемся, как именно устроена новая модель блокировок в C#, где компилятор помогает заметить проблему, а где она остаётся скрытой, и стоит ли переходить на Lock ради заявленных преимуществ.

Разобраться глубже

RCE из одного XML‑тега: разбираем небезопасную десериализацию XmlSerializer с нуля

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

Дисклеймер. Все описанное выполнялось в изолированной лаборатории на вымышленном приложении, которое я собрал специально для статьи. Совпадения имен с реальными продуктами случайны. Материал образовательный — для AppSec, .NET-разработчиков и всех, кому интересно, как «сохранить объект в файл» превращается в удаленное выполнение кода. Не применяйте это к системам, на которые у вас нет письменного разрешения.

Есть распространенный страх: анализ защищенности — это что-то темное, для избранных, с ассемблером и магией. На деле большая часть работы — это чтение кода по понятным правилам. Сейчас разберем реальный по механике баг (небезопасная десериализация в .NET → выполнение произвольной команды) так, будто читаем букварь: сначала буквы, потом слоги, потом целые слова.

К концу статьи вы будете уметь: декомпилировать .NET-приложение, находить в нем точки сериализации и десериализации, читать свойства и сеттеры, отличать безобидный класс от «gadget» и по одной строчке понимать, есть ли уязвимость. Все воспроизводится на приложенном стенде.

Про цвет. Листинги с подсветкой даны картинками. Цвета: желтый — имя класса/тип, синий — имя свойства, зеленый — значение (данные), красный — опасное место (sink, уязвимая строка, побочный эффект). В «было/стало» красный — что убираем, зеленый — что ставим.

Читать далее

50 минут руками — 5 минут автоматически. Или как я майнер удалял

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

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

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

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