es
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

Ir al canal en Telegram

Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Mostrar más

📈 Análisis del canal de Telegram Библиотека шарписта | C#, F#, .NET, ASP.NET

El canal Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 21 707 suscriptores, ocupando la posición 5 962 en la categoría Tecnologías y Aplicaciones y el puesto 30 301 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 21 707 suscriptores.

Según los últimos datos del 27 agosto, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -42, y en las últimas 24 horas de 3, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 15.91%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.92% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 3 454 visualizaciones. En el primer día suele acumular 1 718 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 26.
  • Intereses temáticos: El contenido se centra en temas clave como .net, шарписта, навигация, await, string.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 28 agosto, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

21 707
Suscriptores
+324 horas
-137 días
-4230 días
Archivo de publicaciones
🗺 Подборка вакансий для шарпистов C#/.NET-разработчик — от 250 000 ₽, удалёнка Tech Lead (.NET) — от 350 000 ₽, удалёнка Middle Unity (С#) developer — от 1 500 до 2 700 $, удалёнка ➡️ Еще больше топовых вакансий — в нашем канале C# Jobs 🐸 Библиотека шарписта

👋 Сеньор занимается гейткипингом, а джун — на шадовинге Это не баг и не новый фреймворк — это обычная рабочая неделя в IT-ко
👋 Сеньор занимается гейткипингом, а джун — на шадовинге Это не баг и не новый фреймворк — это обычная рабочая неделя в IT-команде, просто описанная на внутреннем языке индустрии. Тех, кто этого языка не знает, легко обвести вокруг пальца или просто не заметить. ➡️ Изучайте словарь и больше не придётся гуглить в процессе разговора 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта

🧑‍💻 F# 11: поддержка #elif в препроцессорных директивах Раньше при условной компиляции под несколько платформ приходилось вкладывать #if друг в друга. Чем больше веток — тем глубже вложенность и тяжелее читать код. Теперь F# поддерживает #elif, и цепочки условий пишутся плоско:
#if WIN64
let path = "/library/x64/runtime.dll"
#elif WIN86
let path = "/library/x86/runtime.dll"
#elif MAC
let path = "/library/iOS/runtime-osx.dll"
#else
let path = "/library/unix/runtime.dll"
#endif
В условиях работают &&, || и !, цепочки можно строить произвольной длины, вложенность тоже поддерживается. Функция входит в F# 11. Чтобы включить, нужно указать --langversion:11.0. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

📎 Делегаты в горячем коде очень голодные Одна аллокация делегата выглядит безобидно. Но если она происходит миллион раз за сессию, это уже проблема.
for (int i = 0; i < 100_000; i++)
{
    queue.Enqueue(() => Process(i));
}
Здесь каждая итерация создаёт новый объект делегата и захватывает переменную i в замыкание. То есть рантайм выделяет память дважды на каждый шаг цикла. Сборщик мусора рано или поздно всё почистит, но частые мелкие аллокации создают давление на GC. Это выражается в микропаузах, просадках по latency и лишней работе, которую рантайм мог бы не делать. Если делегат логически одинаков от вызова к вызову, то кешируйте его один раз:
private static readonly Action<Job> s_process = static job => Process(job);
static в лямбде явно запрещает захват внешних переменных. Если компилятор видит, что захват всё же происходит, он выдаст ошибку. Это хорошая защита от случайных замыканий. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

Кажется, мы окончательно перешли от игрушек к суровому AgentOps Приглашаем на наш обновлённый курс по разработке ИИ-агентов. Никакой воды про «будущее нейросетей», только инженерный подход. Что внутри: — пошагово строим готовые системы на LangGraph, CrewAI и MCP; — настраиваем кэширование и роутинг, чтобы бот не сожрал токены; — разбираемся со стейтом, учимся дебажить через time-travel и прикручиваем human-in-the-loop; — выводим RAG в прод так, чтобы безопасники не завернули архитектуру из-за 152-ФЗ. В пекло скучные лекции про общую инфраструктуру — сразу фокусируемся на агентных фреймворках и написании кода. Занятия ведут бывалые лиды из Газпромбанка и Альфы, набившие шишки на реальных задачах.
Кстати, на днях мы пилили агента в прямом эфире, если пропустили — есть запись вебинара.
Сегодня последний день, когда можно забрать курс по старым ценам. Базовый тариф сейчас стоит 49 000 ₽ (вместо 62 990 ₽), продвинутый трек — 99 000 ₽ (вместо 124 990 ₽). Если не хочется отдавать всю сумму сразу, есть рассрочка. Торопитесь — на потоке осталось всего 5 мест! → Зафиксировать цену и перейти к сборке своих агентов

У «Библиотеки программиста» появился резервный канал в мессенджере MAX Он нужен исключительно для связи с теми, кто не может следить за обновлениями здесь из-за трудностей с доступом. Поэтому, если вы видите это сообщение, распространите его среди жильцов вашего ЖЭКа. Контент в MAX будет дублировать телеграмный — основной нашей площадкой был и остаётся Telegram. Надеемся, это временная мера. → Подписаться на «Библиотеку программиста» в MAX

🤩 Утилита, которая возвращает правый Ctrl вместо кнопки Copilot На новых ноутбуках с Copilot+ PC правый Ctrl заменили физиче
🤩 Утилита, которая возвращает правый Ctrl вместо кнопки Copilot На новых ноутбуках с Copilot+ PC правый Ctrl заменили физической кнопкой Copilot. Microsoft продвигала её как часть сертификации устройств. Те, кто активно использовал правый Ctrl — в VirtualBox, в терминале, при выделении текста — внезапно обнаружили, что кнопки больше нет. Перепривязать её стандартными средствами Windows нельзя нормально и без костылей. Разработчик выпустил утилиту NoCopilotKey. Она перехватывает нажатие кнопки Copilot через low-level keyboard hook и подменяет его на Right Ctrl. Никаких настроек, никакого интерфейса. Скачал, запустил, кнопка работает как Ctrl. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #async_news

⚙️ F#: кэширование разрешения перегрузок Когда компилятор F# встречает вызов метода, он каждый раз заново проверяет все доступные перегрузки и выбирает подходящую. В файлах с тысячами однотипных вызовов это превращается в заметную часть времени компиляции. Новая preview-фича кэширует результат этой проверки. Если метод вызывается повторно с теми же типами аргументов, компилятор берёт готовый результат из кэша вместо повторного перебора. Ключ кэша состоит из трёх частей: идентификатор группы методов, типы аргументов и тип возвращаемого значения. Кэш автоматически отключается там, где контекст влияет на выбор перегрузки: именованные аргументы, SRTP-ограничения и похожие сценарии. .NET 10 уже сам по себе ускорил компиляцию в шесть раз по сравнению с девяткой. Кэш перегрузок даёт ещё двукратный прирост сверху и заметно снижает давление на GC. Фича доступна в preview. Чтобы включить, нужно добавить --langversion:preview в параметры компилятора. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

🤩 GitHub Copilot теперь умеет мигрировать .NET-проекты Microsoft выпустила кастомный агент modernize-dotnet для GitHub Copil
🤩 GitHub Copilot теперь умеет мигрировать .NET-проекты Microsoft выпустила кастомный агент modernize-dotnet для GitHub Copilot. Раньше автоматизированная миграция .NET работала только внутри Visual Studio. Теперь тот же процесс доступен в VS Code, терминале через Copilot CLI и прямо на GitHub. Агент работает по модели оценка → план → выполнение. На выходе — три артефакта прямо в репозитории: отчёт о текущем состоянии кода, план апгрейда с последовательностью шагов и набор задач с конкретными изменениями. Как запустить в терминале:
/plugin marketplace add dotnet/modernize-dotnet
/plugin install modernize-dotnet@modernize-dotnet-plugins
/agent  # выбрать modernize-dotnet
# затем: upgrade my solution to a new version of .NET
Поддерживаемые типы проектов: ASP.NET Core, Blazor, Azure Functions, WPF, консольные приложения и библиотеки. Миграция с .NET Framework тоже поддерживается — но только на Windows. ➡️ Блог разработчиков 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #async_news

⭐️ F#: упрощённые иерархии интерфейсов с DIM Раньше при работе с C#-интерфейсами, где базовый слот закрыт через дефолтную реализацию интерфейсов, F# всё равно требовал явно реализовать оба интерфейса. Теперь достаточно реализовать только производный интерфейс. Допустим, есть такие C#-интерфейсы:
public interface IA { int M(); }
public interface IB : IA {
    new int M();
    int IA.M() => this.M() + 100;  // DIM покрывает слот IA.M
}
Раньше F# требовал реализовать и IA, и IB. Теперь достаточно IB:
type C() =
    interface IB with member _.M() = 42
 
(C() :> IB).M()   // 42
(C() :> IA).M()   // 142 — DIM перенаправляет: this.M() + 100
Улучшение работает не только для простых случаев. Поддерживается ромбовидное наследование, дженерик-интерфейсы, свойства, события, структуры и объектные выражения. Для включения нужен флаг --langversion:preview. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

👀 Дайджест недели Чуток материалов помимо второго превью .NET — .NET 11 Preview 2 — Реферальный рекрутинг в IT — Протокол пр
👀 Дайджест недели Чуток материалов помимо второго превью .NET — .NET 11 Preview 2Реферальный рекрутинг в ITПротокол против AI слопа в вебеMCP C# SDK v1.0 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #async_news

🤩 JIT-оптимизации в новом .NET Preview: что улучшилось Несколько тихих, но полезных улучшений в JIT-компиляторе, которые влияют на производительность без изменений в коде. Устранение проверок границ для паттерна i + cns < len JIT теперь убирает лишние bounds check в типичном сценарии, когда индекс плюс константа сравниваются с длиной массива. Такой паттерн встречается в парсерах, обработке буферов, посимвольном разборе строк. Раньше каждая такая проверка генерировала лишние инструкции в рантайме. Удаление избыточных checked-контекстов Если JIT может доказать, что значение уже находится в допустимом диапазоне, он теперь выбрасывает проверку переполнения как ненужную. Это касается арифметики в checked-блоках, где компилятор раньше перестраховывался даже там, где переполнение было физически невозможно. Девиртуализация generic-виртуальных методов в R2R ReadyToRun-образы теперь умеют девиртуализировать несовместно используемые generic virtual method calls. Это означает, что AOT-скомпилированный код получает те же оптимизации прямых вызовов, которые раньше были доступны только в JIT-режиме. SVE2-интринсики для ARM Добавлены новые интринсики ShiftRightLogicalNarrowingSaturate(Even|Odd) для архитектур с поддержкой SVE2. Требуют и поддержки в JIT, и соответствующего API. Полезно для векторных вычислений на серверном ARM-железе вроде Graviton или Neoverse. Все четыре изменения работают автоматически при обновлении рантайма. Ничего менять в коде не нужно. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

🔄 Microsoft выпустила внеплановый патч .NET 10.0.5. В .NET 10.0.4 сломался отладчик на macOS — при попытке дебажить любое .N
🔄 Microsoft выпустила внеплановый патч .NET 10.0.5. В .NET 10.0.4 сломался отладчик на macOS — при попытке дебажить любое .NET-приложение через VS Code он падал. Кому стоит обновится: macOS + VS Code + .NET SDK 10.0.104 или 10.0.200 или рантайм 10.0.4. Windows и Linux не затронуты. ➡️ Блог разработчиков 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #async_news

👨‍💻 TarFile.CreateFromDirectory теперь поддерживает выбор формата архива Продолжаем копаться в превью .NET 11. До этого TarFile.CreateFromDirectory всегда создавал архивы в формате Pax. Без вариантов. Если нужен был GNU или Ustar — приходилось обходными путями. Теперь у метода появятся новые перегрузки с параметром TarEntryFormat. Поддерживаются все четыре формата: Pax, Ustar, GNU и V7.
// GNU — для совместимости с Linux-окружениями
TarFile.CreateFromDirectory("/source/dir", "/dest/archive.tar",
    includeBaseDirectory: true, TarEntryFormat.Gnu);

// Ustar — широкая совместимость с разными инструментами
TarFile.CreateFromDirectory("/source/dir", outputStream,
    includeBaseDirectory: false, TarEntryFormat.Ustar);

// Асинхронный вариант тоже есть
await TarFile.CreateFromDirectoryAsync("/source/dir", "/dest/archive.tar",
    includeBaseDirectory: true, TarEntryFormat.Pax, cancellationToken);
Формат имеет значение, когда архив передаётся в конкретный инструмент или среду со своими ожиданиями. GNU лучше воспринимается стандартным tar в Linux. Ustar даёт максимальную совместимость там, где важна переносимость. V7 нужен в совсем редких легаси-сценариях. Раньше под такие случаи приходилось либо писать обёртки вручную, либо тянуть сторонние библиотеки. Теперь это часть стандартного API. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

✏️ using — синтаксический сахар
Что делает оператор using в C#
Почти каждый C#-разработчик писал такой код сотни раз:
using (var connection = new SqlConnection(connectionString))
{
    // работаем с ресурсом
}
На первый взгляд — просто синтаксический сахар. Подсказка: попробуйте мысленно развернуть этот блок в эквивалентный try/finally. ➡️ Проверить себя 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #dotnet_challenge

Самый востребованный навык в ИТ в 2026-м — навык создания ИИ-агентов Мы полностью переработали курс «Разработка AI-агентов» под реалии 2026 года. Никакой долгой теории — пишем код с первого дня. Обучать и делиться набитыми шишками будут эксперты-практики из Газпромбанка, Альфа-Банка и других бигтехов. В программе: — архитектура автономных систем с тестированием, ReAct-циклами и контролем токенов; — практическая работа с актуальными фреймворками LangGraph, AutoGen, MCP и CrewAI; — настройка продвинутого RAG для парсинга документов и точного поиска; — внедрение решений с учётом действующего законодательства (152-ФЗ); — дипломная работа, за основу которой можно взять свой рабочий проект или задачу, которую предложим мы. Эксперты поделятся инсайтами из реального продакшна — тем, о чём вам никогда не расскажет ни одна нейросеть.
Запись первого открытого вебинара, на котором мы вместе с руководителем AI-направления в Альфа-Банке Полиной Полуниной пилили агента в прямом эфире.
Ах да, чуть не забыли! Дарим промокод AGENTSWEB на скидку 10 000 рублей и два курса сверху при покупке до 15 марта 🎁 Освоить разработку AI-агентов

💡 Healthy ≠ Готов к работе Большинство health check'ов проверяют три вещи: - Запущен ли процесс? - Есть ли коннект к базе данных? - Доступен ли Redis? Это полезно. Но этого недостаточно для больших продуктивных систем. Приложение может быть технически живым и при этом функционально сломанным. Процесс работает, эндпоинт возвращает 200, Kubernetes считает под здоровым, но первый же реальный запрос падает с ошибкой. К примеру, кастомный health check для EF Core миграций:
public class DbContextMigrationsHealthCheck(DbContext dbContext) : IHealthCheck
{
    public async Task<HealthCheckResult> CheckHealthAsync(
        HealthCheckContext context,
        CancellationToken cancellationToken = default)
    {
        try
        {
            var applied = await dbContext.Database
                .GetAppliedMigrationsAsync(cancellationToken: cancellationToken);

            var pending = await dbContext.Database
                .GetPendingMigrationsAsync(cancellationToken);

            if (pending.Any())
            {
                return HealthCheckResult.Degraded(
                    "Есть неприменённые миграции.",
                    data: new Dictionary<string, object>
                    {
                        { "PendingMigrations", pending },
                        { "LatestAppliedMigration", applied.LastOrDefault() ?? "" }
                    });
            }

            return HealthCheckResult.Healthy(
                data: new Dictionary<string, object>
                {
                    { "LatestAppliedMigration", applied.LastOrDefault() ?? "" }
                });
        }
        catch (Exception ex)
        {
            return new HealthCheckResult(context.Registration.FailureStatus, exception: ex);
        }
    }
}
Идея не ограничивается EF Core. Любая зависимость, которая доступна, но ещё не готова к работе: • CMS — нужно прогреть кэш перед началом работы • Биллинг — зависит от загрузки актуальных правил ценообразования • Search API — ждёт готовности текущей версии индекса Сервис здоров не тогда, когда открывает SQL-коннекшн. Сервис здоров, когда готов выполнять ту работу, для которой задеплоен. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #il_люминатор

💡 Healthy ≠ Готов к работе Большинство health check'ов проверяют три вещи: - Запущен ли процесс? - Есть ли коннект к базе данных? - Доступен ли Redis? Это полезно. Но этого недостаточно для больших продуктивных систем. Приложение может быть технически живым и при этом функционально сломанным. Процесс работает, эндпоинт возвращает 200, Kubernetes считает под здоровым, но первый же реальный запрос падает с ошибкой. К примеру, кастомный health check для EF Core миграций: ```public class DbContextMigrationsHealthCheck(DbContext dbContext) : IHealthCheck { public async Task<HealthCheckResult> CheckHealthAsync( HealthCheckContext context, CancellationToken cancellationToken = default) { try { var applied = await dbContext.Database .GetAppliedMigrationsAsync(cancellationToken: cancellationToken); var pending = await dbContext.Database .GetPendingMigrationsAsync(cancellationToken); if (pending.Any()) { return HealthCheckResult.Degraded( "Есть неприменённые миграции.", data: new Dictionary<string, object> { { "PendingMigrations", pending }, { "LatestAppliedMigration", applied.LastOrDefault() ?? "" } }); } return HealthCheckResult.Healthy( data: new Dictionary<string, object> { { "LatestAppliedMigration", applied.LastOrDefault() ?? "" } }); } catch (Exception ex) { return new HealthCheckResult(context.Registration.FailureStatus, exception: ex); } } }``` Идея не ограничивается EF Core. Любая зависимость, которая доступна, но ещё не готова к работе: • CMS — нужно прогреть кэш перед началом работы • Биллинг — зависит от загрузки актуальных правил ценообразования • Search API — ждёт готовности текущей версии индекса Сервис здоров не тогда, когда открывает SQL-коннекшн. Сервис здоров, когда готов выполнять ту работу, для которой задеплоен. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #il_люминатор

⚙️ System.Text.Json теперь возвращает типизированные метаданные без приведения типов Разбираем превью .NET 11. В .NET появятся два новых метода у JsonSerializerOptionsGetTypeInfo<T>() и TryGetTypeInfo<T>(). Раньше, чтобы получить JsonTypeInfo<T>, приходилось вручную кастовать результат из не-дженерикового GetTypeInfo(Type).
// Раньше
JsonTypeInfo<MyType> info = (JsonTypeInfo<MyType>)options.GetTypeInfo(typeof(MyType));

// Теперь
JsonTypeInfo<MyType> info = options.GetTypeInfo<MyType>();
Если тип может быть не зарегистрирован — есть вариант с TryGetTypeInfo<T>(), который не бросает исключение, а возвращает bool.
if (options.TryGetTypeInfo<MyType>(out JsonTypeInfo<MyType>? typeInfo))
{
    // typeInfo готов к работе
}
Изменение небольшое, но устраняет одну из тех мелких раздражающих вещей, с которыми сталкиваешься в реальных проектах. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view