Обновить
64K+

C# *

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

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

Статистика скачиваний релизов GitHub одним окном: WinForms-утилита в одном .cs-файле без Visual Studio

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

GitHub показывает звёзды и форки, но не показывает, сколько раз скачали файлы из релизов. Цифра есть в API, поле download_count у каждого ассета. Я захотел видеть её сразу по всем своим проектам, да ещё с историей, и написал утилиту. Ниже — как она устроена и на что я налетел.

Читать далее

Новости

Где Runtime Async в .NET 11 экономит память, а где нет

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

В.NET 11 привычный механизм async/await меняется: управление приостановкой методов переходит к рантайму, а JIT получает новые возможности для оптимизации. Но насколько это снижает аллокации в реальном коде и почему результаты замеров иногда противоречат друг другу? Разбираем Runtime Async на примере бенчмарков, сравниваем результаты с классической реализацией и выясняем, в каких сценариях выигрыш действительно заметен.

Изучить результаты тестов

Маршрутизатор языковых моделей изнутри. От вектора задачи до судьи и обучения на отзывах

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

Раннее мы описывали библиотеку FAIRouter для маршрутизации запроса к оптимальному исполнителю. В текущей редакции поддерживаются только LLM, но класс исполнителей планируем расширять также на инструменты и агентов. Но тема того какая математика стоит за всем этим осталась не до конца раскрыта.

Читать далее

.NET MAUI-приложение падает после сборки в Xcode 27: UIScene, плавающая панель iOS 26 и что ещё пришлось поправить

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

Собрала .NET MAUI-приложение в Xcode 27, поставила на iPad — и оно упало сразу при запуске. А после того как я это починила, оказалось, что интерфейс не дружит с плавающей панелью вкладок из iOS 26: под ней пустая полоса, линия-разделитель висит в воздухе, карта обрезается.

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

Спойлер: платформенного кода получилось немного — один класс на 60 строк, один стиль и пара файлов для запуска. А ушло на всё два с половиной дня

Узнать, как это задизайнено

DDD в веб-консоли для LDAP: что сработало, что пришлось выкинуть и почему границы слоёв теперь проверяют тесты

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

Axia — open-source веб-консоль для Active Directory и OpenLDAP на .NET 10. Начиналась она с учебного DDD: агрегаты, доменные события, MediatR. После нескольких ревью безопасности от этого осталась половина. Главная причина: данные принадлежат каталогу, а не нам, и агрегат User с инвариантами оказался фикцией. Рассказываю, что окупилось (value objects, порты и адаптеры, тесты на границы слоёв), что пришлось выкинуть (аудит на доменных событиях) и почему самое важное правило безопасности так и не поместилось в домен.

Читать далее

Валидация JSON во входящих REST-запросах DATAREON Platform

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

При интеграции информационных систем через REST API зачастую возникает необходимость проверки входящих данных на соответствие установленным требованиям. При этом недостаточно убедиться лишь в наличии обязательных полей: данные могут иметь некорректный тип, недопустимый формат или не соответствовать бизнес-правилам принимающей системы. 

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

Читать далее

C# теперь в GigaIDE: бесплатно и в одном окне

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

Типичная картина: в одном проекте Backend на Java, вспомогательные сервисы на Python, интерфейс на TypeScript, а один микросервис — на C#. Знакомо? Последний компонент часто означает вторую IDE, другие горячие клавиши, отдельные настройки и постоянные переключения между средами. В GigaIDE появилась поддержка C# и .NET. C# больше не требует отдельной IDE: разработка ведётся в единой среде, без переключений и потери контекста. Функция доступна бесплатно в Community-режиме.

Читать далее

Почему тормозят списки в .NET MAUI: замеры на слабом планшете и что реально помогло

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

В прошлой статье я рассказывала, как переводила приложение для торговых представителей с Xamarin.Forms на .NET MAUI. Там был короткий раздел про жалобы агентов на «тормоза»: бенчмарки показывали, что логика работает быстро, а проблема была в отрисовке списков. В этой статье — подробно: как я это мерила, что делала три с половиной месяца и что в итоге получилось в цифрах.

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

Узнать, что горит

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

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

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

Читать далее

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

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

Каждую осень 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#.

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