Библиотека шарписта | C#, F#, .NET, ASP.NET
Відкрити в Telegram
Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Показати більше2025 рік у цифрах

22 347
Підписники
-624 години
-377 днів
-14330 день
Архів дописів
Фото недоступнеДивитись в Telegram
👀 Баг или фича
Пока мы думали как бы вам рассказать про наш Х, обнаружили любопытную вещь: если пользователь не залогинен в Х, то лента нашего паблика пустая — ни одного поста.
Теперь разбираемся, это недоработка или новая фича, мотивирующая авторизацию 🙂
🐸 Библиотека шарписта
Фото недоступнеДивитись в Telegram
💥 Весь октябрь -40% на курсы для разработчиков в proglib.academy
Бери знания под свой стек:
Python | алгоритмы | математика для Data Science | архитектура кода.
Пока одни ждут «идеальный момент», другие просто учатся. А потом берут ваши офферы.⚡️ Пока скидка действует, апдейтни свои навыки
Фото недоступнеДивитись в Telegram
🎓 Как вайб-кодинг меняет рынок IT-образования
За последние годы подход к обучению программированию меняется быстрее, чем сами языки. На смену долгим упражнениям с синтаксисом приходит работа с идеями и концепциями, где код во многом генерируется автоматически.
Этот сдвиг называют «вайб-кодингом». Он уже влияет на университетские программы, онлайн-курсы и требования к выпускникам.
➡️ В статье о том, что стоит за этим термином и как он меняет обучение IT-специалистов.
🐸 Библиотека шарписта
😢 5❤ 3👍 2
Фото недоступнеДивитись в Telegram
⭐️ Два пункта вниз
C# потерял сразу две позиции в рейтинге PYPL.
🐸 Библиотека шарписта
#async_news
😁 26😢 20👍 2🙏 2🌚 1
Фото недоступнеДивитись в Telegram
🛠 Ловите ошибку сразу
Ничто не портит день разработчика так, как внезапный
NullReferenceException в проде.
Лучше упасть сразу — с понятным сообщением, чем потом искать, где всё пошло не так.
Как избежать ошибки:
_ = arg ?? throw new ArgumentNullException(nameof(arg));
Это fail-fast подход: программа ломается там, где ошибка реально возникла, а не через пять вызовов.
Полезно для входных параметров, обязательных зависимостей и DTO, пришедших из вне.
🐸 Библиотека шарписта
#sharp_view🥱 9👍 6
⚙️ Под капотом async/await
Когда вы пишете асинхронный метод вроде:
async Task<int> GetDataAsync()
{
var data = await FetchAsync();
return data.Length;
}
вы можете думать, что это «всего лишь ожидание задачи». Но на самом деле компилятор C# превращает этот метод в state machine — конечный автомат, который управляет переходами между состояниями выполнения.
State machine — это структура, которая:
• хранит текущее состояние выполнения программы, например, до await, после await или завершено,
• знает, в какое состояние перейти дальше, когда наступает внешнее событие например, завершение Task.
Проще говоря, компилятор разворачивает ваш линейный асинхронный код в набор состояний + переключатель между ними.
Что делает компилятор
При компиляции метода с await создаётся вспомогательный класс, реализующий интерфейс IAsyncStateMachine.
Если упростить, то наш пример превращается примерно в:
private struct GetDataAsyncStateMachine : IAsyncStateMachine
{
public int _state;
public AsyncTaskMethodBuilder<int> _builder;
private TaskAwaiter<string> _awaiter;
public void MoveNext()
{
try
{
if (_state == 0)
{
// после await
var result = _awaiter.GetResult();
_builder.SetResult(result.Length);
return;
}
var task = FetchAsync();
if (!task.IsCompleted)
{
_state = 0;
_awaiter = task.GetAwaiter();
_builder.AwaitUnsafeOnCompleted(ref _awaiter, ref this);
return;
}
_builder.SetResult(task.Result.Length);
}
catch (Exception ex)
{
_builder.SetException(ex);
}
}
public void SetStateMachine(IAsyncStateMachine stateMachine) { }
}
Другие примеры использования state machines в C#
• yield return — генерация итераторов IEnumerator
• foreach на async коллекциях — асинхронные итераторы IAsyncEnumerable
Каждый await или yield превращает метод в "автомат", который сам управляет своим ходом выполнения.
🐸 Библиотека шарписта
#il_люминатор👍 13🥱 7❤ 4
Фото недоступнеДивитись в Telegram
🚩 Задача с собеса: контейнер с водой
Ваша задача — выбрать две вертикальные линии на плоскости, чтобы вместе с осью X они образовали контейнер, в который поместится максимум воды. Даны высоты этих линий в массиве.
Как действовать:
1. Ставим два указателя: один — на начало, второй — на конец массива.
2. Считаем объем текущего контейнера: ширина между указателями умножается на минимальную из двух высот.
3. Двигаем указатель с меньшей высотой внутрь. Если обе высоты равны — можно сдвигать любой.
4. Запоминаем максимум, повторяем шаги, пока указатели не встретятся.
По сути, это жадный алгоритм с двумя указателями, который перебирает края и минимизирует лишние проверки.
Пример реализации:
public int MaxArea(int[] h)
{
int l = 0, r = h.Length - 1, m = 0;
while (l < r)
{
m = Math.Max(m, (r - l) * Math.Min(h[l], h[r]));
if (h[l] < h[r]) l++; else r--;
}
return m;
}
➡️ Попробовать на литкоде
🐸 Библиотека шарписта
#dotnet_challenge👍 8❤ 2
Фото недоступнеДивитись в Telegram
🐸 Библиотека шарписта
#garbage_collector
😁 49👏 8❤ 4🥱 2
🤔 Что вас зацепило на неделе
Делитесь в комментах:
• Крутые материалы
• Интересные новости
• Полезные инсайты
• Новые инструменты
Собираем коллективную мудрость 👇
🐸 Библиотека шарписта
#entry_point
Фото недоступнеДивитись в Telegram
🗞 Дайджест недели
Освежаем в памяти прошедшие дни и готовимся к новой рабочей неделе.
— JetBrains просит разработчиков поделиться кодом
Участие добровольное, а конфиденциальность и контроль — в руках пользователя. Новые опции появятся в обновлении 2025.2.4 уже в ближайшие недели.
— PostgreSQL 18
— ТОП-9 популярных AI-агентов для разработки
— Microsoft представили Agent Framework
— Rx.NET 6.1
🐸 Библиотека шарписта
#async_news
Фото недоступнеДивитись в Telegram
🚀 Курс «ИИ-агенты для DS-специалистов» уже стартовал
Первый вебинар успешно прошёл, участники уже начали разбираться, как использовать ИИ-агентов в реальных проектах.
Но всё самое интересное только начинается!
🔥 Впереди 4 мощных занятия — с практикой, инсайтами и разбором кейсов от экспертов.
💸 Сейчас действует специальная цена → 69.000 ₽ вместо 79.000 ₽.
⏳ Осталось всего 4 места.
Не упустите шанс прокачаться в том, что будет определять будущее индустрии.
👉 Забронировать место на курсе
🥱 7
✏️ Генерация игнор-файла прямо из CLI
В .NET есть команда создаёт готовый .gitignore, оптимизированный под экосистему.
В нём уже прописаны все типичные исключения: каталоги bin/, obj/, кэш NuGet, файлы публикаций, временные артефакты IDE и прочие служебные данные, которые не должны попадать в репозиторий.
Команда:
dotnet new gitignore
Не нужно искать шаблон на GitHub или копировать его вручную — всё доступно из коробки.
🐸 Библиотека шарписта
#sharp_view👍 27🔥 8❤ 3
Фото недоступнеДивитись в Telegram
🚀 Cвежие улучшения для реактивного кода
В новой версии Rx.NET 6.1 появилось три ключевых новшества: метод
DisposeWith для удобной работы с CompositeDisposable, новый TakeUntil(CancellationToken) для управления бесконечными потоками и оператор ResetExceptionDispatchState, решающий проблему с растущими стектрейсом при повторных await.
➡️ Подробнее про обнову
🐸 Библиотека шарписта
#asycn_news👍 8
Фото недоступнеДивитись в Telegram
⚙️ Проверка на пустоту
Когда нужно проверить строку на пустоту в C# есть два популярных метода:
string.IsNullOrEmpty(str) возвращает true, если строка равна null или имеет длину 0 ("").
string.IsNullOrWhiteSpace(str) идёт дальше: он также учитывает пробелы, табы и переводы строк. То есть " " будет считаться пустой.
Код:
Console.WriteLine(string.IsNullOrEmpty(" ")); // False
Console.WriteLine(string.IsNullOrWhiteSpace(" ")); // True
string.IsNullOrWhiteSpace(str) идёт дальше: он также учитывает пробелы, табы и переводы строк. То есть " " будет считаться пустой.
Если нужно проверить только на null и пустую строку — используйте IsNullOrEmpty. Если важно исключить строки, состоящие только из пробелов или невидимых символов — выбирайте IsNullOrWhiteSpace.
🐸 Библиотека шарписта
#sharp_view🥱 28👍 6❤ 2😁 2
⚙️ Проверка на пустоту
Когда нужно проверить строку на пустоту в C# есть два популярных метода:
string.IsNullOrEmpty(str) возвращает true, если строка равна null или имеет длину 0 ("").
string.IsNullOrWhiteSpace(str) идёт дальше: он также учитывает пробелы, табы и переводы строк. То есть " " будет считаться пустой.
Код:
Console.WriteLine(string.IsNullOrEmpty(" ")); // False
Console.WriteLine(string.IsNullOrWhiteSpace(" ")); // True
string.IsNullOrWhiteSpace(str) идёт дальше: он также учитывает пробелы, табы и переводы строк. То есть " " будет считаться пустой.
Если нужно проверить только на null и пустую строку — используйте IsNullOrEmpty. Если важно исключить строки, состоящие только из пробелов или невидимых символов — выбирайте IsNullOrWhiteSpace.
🐸 Библиотека шарписта
#sharp_view💪 Разминка перед выходными
Есть код:
var dict = new Dictionary<object, string>();
dict[1] = "int";
dict[1L] = "long";
dict[1.0] = "double";
Console.WriteLine(dict.Count);
Console.WriteLine(dict[1 ]);
Что выведет код? Пишите в комменты 👇
Ответь спрячем здесь:
3
int
🐸 Библиотека шарписта
#dotnet_challenge👍 13🤔 5❤ 2
Фото недоступнеДивитись в Telegram
🐸 Библиотека шарписта
#garbage_collector
😁 35💯 8⚡ 1😢 1👾 1
Фото недоступнеДивитись в Telegram
⚙️ Zero-Allocation LINQ для .NET
LINQ — одна из лучших фич в C#. Она делает код декларативным и читаемым. Но у стандартного System.Linq есть проблема: каждая операция создает кучу объектов и аллокаций
Если у вас миллионы запросов в секунду, эти «маленькие удобства» превращаются в серьёзные проблемы со сборщиком мусора, задержками и падением производительности.
ZLinq — это библиотека, которая реализует все стандартные LINQ-операции (Where, Select, GroupBy, Aggregate, OrderBy и т.д.) без выделения памяти в куче.
Пример:
// Обычный LINQ
var result = numbers.Where(x => x % 2 == 0).Select(x => x * 2).ToList();
// ZLinq
var result = numbers.AsZEnumerable()
.Where(x => x % 2 == 0)
.Select(x => x * 2)
.ToList();
➡️ GitHub либы
🐸 Библиотека шарписта
#sharp_view🤔 39❤ 4👍 4
Фото недоступнеДивитись в Telegram
👾 AI-агенты — настоящее, о котором все говорят!
Уже 3 октября стартует второй поток нашего нового курса «AI-агенты для DS-специалистов».
Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи.
На обучении вы соберёте полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.
🎓 В рамках курса вы научитесь:
1️⃣ адаптировать LLM под разные предметные области и данные
2️⃣ собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
3️⃣ строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой
Научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.
🗓️ Завтра первый вебинар, успевайте залететь в ряды ИИ-первопроходцев 👈🏻
🥱 2❤ 1
