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

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

الذهاب إلى القناة على Telegram

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

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام Библиотека шарписта | C#, F#, .NET, ASP.NET

تُعد قناة Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 21 707 مشتركاً، محتلاً المرتبة 5 962 في فئة التكنولوجيات والتطبيقات والمرتبة 30 301 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 21 707 مشتركاً.

بحسب آخر البيانات بتاريخ 27 أغسطس, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -42، وفي آخر 24 ساعة بمقدار 3، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 15.91‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 7.92‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 3 454 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 718 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 26.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل .net, шарписта, навигация, await, string.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 28 أغسطس, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

21 707
المشتركون
+324 ساعات
-137 أيام
-4230 أيام
أرشيف المشاركات
🗺 Подборка вакансий для шарпистов 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

📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #garbage_collector
📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #garbage_collector

🤩 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