Библиотека шарписта | C#, F#, .NET, ASP.NET
前往频道在 Telegram
Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
显示更多2025 年数字统计

22 353
订阅者
-624 小时
-327 天
-14630 天
帖子存档
🤖 AI сейчас на пике — и математика снова в центре внимания.
«На конференции AIJ только и разговоров, что о AI и математике. Ведь в основе генеративных моделей Gen AI лежит фундаментальная математика.»Одна из топовых экспертов, кто сегодня участвует на AIJ, преподаёт у нас. Мария Тихонова — PhD по Computer Science, руководитель направления в SberAI и доцент ВШЭ. Она работает с LLM каждый день и объясняет математику так, как она реально применяется в AI. 🔥 Экспресс-курс «Математика для DS» — 8 недель, чтобы закрыть пробелы и уверенно проходить собесы. 🎁 До 30 ноября: → скидка 40% → курс «Школьная математика» в подарок при оплате → бесплатный тест на знание основ математики 👉 Записаться на курс
🥱 7
🤩 Модификаторы параметров в лямбдах
С# 14 упрощает определение лямбда-выражений с модификаторами, без лишних повторений.
Теперь можно использовать ref, out, in и другие модификаторы в параметрах лямбд без обязательного указания типа:
delegate bool TryParse<T>(string text, out T result);
TryParse<int> parse = (text, out result) => int.TryParse(text, out result);
Ранее можно было добавлять модификаторы к параметрам лямбда-выражений только при условии, что для всех параметров явно указывались типы.
🐸Библиотека шарписта
#sharp_view👏 6
⚡️ ConfigureAwait(false) — зачем это нужно
Вы пишете библиотеку на C#, используете async/await, и всё работает. Но потом ваша библиотека попадает в веб-приложение, мобильное приложение, или какой-то другой контекст — и начинаются странные deadlock'и или даже зависания.
Проблема вот в чём: когда код выходит из await, он хочет продолжить выполнение в том же контексте, в котором был запущен. Если это UI-приложение, контекст одноточечный — только главный поток может работать с UI.
Если ваша библиотека захватит этот контекст и не отпустит — приложение зависнет. А если написали синхронный код, который вызывает async библиотеку, и она захватит контекст — будет deadlock.
ConfigureAwait(false) как раз говорит: «Мне вообще всё равно, в каком контексте продолжать. Возьми любой поток из thread pool'а«. И вот это спасает приложения от проблем:
await stream.WriteAsync(buffer, ct).ConfigureAwait(false);
Результат: библиотека не блокирует контекст, не создаёт deadlock'и, работает везде одинаково.
Когда НЕ нужен ConfigureAwait(false):
В приложениях можно писать без него, если вам нужен контекст:
// В ASP.NET контроллере — можно без ConfigureAwait(false)
[HttpGet]
public async Task<IActionResult> GetData()
{
var data = await service.GetDataAsync(); // Контекст нужен для логирования, etc
return Ok(data);
}
// В UI приложении — нужен контекст
private async void Button_Click(object sender, EventArgs e)
{
var data = await LoadDataAsync(); // Нужно вернуться в UI поток
UpdateUI(data);
}
🐸Библиотека шарписта
#il_люминатор❤ 12👍 10🥱 1
照片不可用在 Telegram 中显示
Реактивное программирование в C# Advanced: сложные операторы, обработка ошибок и холодные/горячие Observable
Асинхронность в C# может быть простой, если знать, как с ней работать правильно. На открытом вебинаре курса OTUS C# Developer. Advanced Елена Сычева покажет, как реактивное программирование помогает избавиться от Callback Hell и писать код, который сам реагирует на данные и события.
→ 26 ноября, 20:00
Реактивное программирование в C# Advanced
— продвинутые операторы Rx.NET: Switch, GroupBy, Buffer, Throttle
— устойчивые к сбоям системы: Catch, Retry, Finally
— холодные и горячие Observable: Publish, Replay, RefCount
— управление подписками и жизненным циклом реактивных компонентов
Вебинар будет полезен разработчикам на C#, работающим с асинхронным кодом, потоками данных и событиями. Участники узнают, как проектировать реактивные системы, способные восстанавливаться после ошибок, и писать декларативный, читаемый и эффективный код.
→ Зарегистрируйтесь: https://clc.to/U2plGA
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
照片不可用在 Telegram 中显示
🤓 Что нового в Git 2.52
В Git 2.52 появились полезные новинки для повседневной работы и поддержки больших репозиториев. Команда внедрила новую команду
git last-modified, с помощью которой теперь можно быстро увидеть, какие коммиты последними изменяли каждый файл в папке.
Для тех, кто заботится о здоровье репозиториев, git maintenance получил новый режим geometric, который экономит время при репаках.
Ещё одна заметная особенность — экспериментальная команда git repo, которая помогает получать разную информацию о репозитории, например, сколько в нём веток или тегов.
➡️ Анонс обновления
🐸Библиотека шарписта
#async_news🔥 11👍 3
😵💫 Усиль свои позиции на собесе в Data Science знаниями математики!
Чем важна математика расскажет Мария Тихонова - кандидат компьютерных наук, руководитель исследовательского направления SberAI, доцент факультета компьютерных наук и преподаватель НИУ ВШЭ на курсе «Математика для Data Science» от Proglib Academy.
👀 Мария - человек, который реально работает с LLM и делает так, чтобы модели понимали человеческую речь, а не делали вид.
📌 Добавь в свое портфолио проект, выделись среди конкурентов
Курс предусматривает выполнение практического проекта с фидбеком от экспертов. За проект можно взять темы:
• обучите градиентный спуск для предсказания цен на квартиры
• создадите классификатор тональности или тематики текста
• построите простую рекомендательную систему на матричных разложениях
Бонусы:
- скидка 40% до 30 ноября
- если оплатить до конца ноября, получите курс «Базовая математика» в подарок
➡️ Пройти бесплатный тест на знание математики
👇👇👇
Записаться на курс
⚡️ Быстрая фишка
Когда тип переменной явно указан, можно опускать его в инициализации с помощью target-typed new:
Dictionary<string, int> scores = new();
Вместо повторения полного типа справа, достаточно просто написать new(). Фича доступна с C# 9.
🐸Библиотека шарписта
#sharp_view🥱 31👾 2👍 1
⚙️ nameof теперь понимает несвязанные обобщения
Удобство и гибкость метапрограммирования — теперь nameof работает для обобщений без аргументов.
Благодаря новой поддержке можно получить имена обобщенных типов без указания параметров:
Console.WriteLine(nameof(List<>)); // Выведет "List"
🐸Библиотека шарписта
#sharp_view👍 18🔥 5😁 1
照片不可用在 Telegram 中显示
🎓 Экспресс-курс «Математика для Data Science» стартует 4 декабря
Этот курс для вас, если вы:
🧑💻 Программист
Когда нужно понять, что происходит «под капотом» ML-алгоритмов.
📊 Начинающий DS / аналитик / студент
Чтобы закрыть теорию, подтянуть фундамент и собрать портфолио.
📈 Смежный специалист
Чтобы уверенно работать с моделями, статистикой и гипотезами.
🎁 Сейчас лучший момент стартовать:
— скидка 40% на курс до конца ноября
— можно пройти бесплатный тест на знание основ математики
👉 Записаться на курс
照片不可用在 Telegram 中显示
💡 PowerToys может получить Windows Edge Light
Команда Microsoft обсуждает интеграцию Windows Edge Light в PowerToys. Это небольшая утилита для освещения лица во время видеоконференций, которая нужна, когда вокруг вас темно, а вебкамера плохо справляется с автоматическими настройками.
Сейчас Windows Edge Light работает как отдельное приложение: вы запускаете его перед видеозвонком, и оно подсвечивает лицо через экран вашего монитора. Инструмент простой, но продуманный — можно менять интенсивность света, использовать горячие клавиши для быстрого включения-отключения, удерживать окно поверх других приложений и даже кликать через него, не закрывая фокус на основном приложении.
➡️ Новость
➡️ Репозиторий Windows Edge Light
🐸Библиотека шарписта
#async_news
👍 9❤ 2
😍 Сериализация и API контракты по умолчанию
Records созданы для API контрактов и DTO. System.Text.Json работает с ними без дополнительных конфигураций — просто как есть.
public record WeatherData(string City, decimal Temperature, string Condition);
var data = new WeatherData("Москва", 15.5M, "Облачно");
var json = JsonSerializer.Serialize(data);
Console.WriteLine(json);
// {"City":"Москва","Temperature":15.5,"Condition":"Облачно"}
var deserialized = JsonSerializer.Deserialize<WeatherData>(json);
Ни лишних конструкторов, ни public setters, ни аннотаций. Десериализация понимает init-only свойства и positional параметры. Это делает API слой минималистичным и надёжным.
Работает и с Newtonsoft.Json, и с gRPC. Records — это естественный способ определения контрактов между системами.
🐸Библиотека шарписта
#sharp_view👍 12❤🔥 4
🛠 Натуральные преобразования для Span и ReadOnlySpan
C# 14 позволяет неявно преобразовывать между
Span<T>, ReadOnlySpan<T> и массивами, упрощая манипуляции с данными и повышая скорость:
ReadOnlySpan<char> roSpan = "hello";
Span<char> span = roSpan;
char[] array = roSpan.ToArray();
Типы Span теперь могут выступать как принимающие методы расширения, то есть станут получателями вызова таких методов. Они также могут комбинироваться с другими типами преобразований.
🐸Библиотека шарписта
#il_люминатор🔥 8❤ 2⚡ 1
照片不可用在 Telegram 中显示
🚀 В IT ценится не перфекционизм, а движение вперёд, и если вы давно откладывали обучение — самое время начать.
❤️ Proglib Academy продлевает розыгрыш MacBook Pro 14 до 30 ноября!
Что нужно:
⚡️ выбрать курс;
⚡️ пройти минимум две недели обучения (можно за два вечера);
⚡️ написать куратору #розыгрыш;
⚡️ забрать макбук.
🎓 Курсы, которые участвуют
👉 Участвовать
😁 3👍 1
🖥 Pattern matching как в функциональных языках
Records идеально сочетаются с pattern matching. Вы получаете алгебраические типы данных, которые раньше были только в функциональных языках вроде F#.
Представьте, что вам нужно рассчитать площадь разных фигур:
public abstract record Shape;
public record Circle(double Radius) : Shape;
public record Rectangle(double Width, double Height) : Shape;
double CalculateArea(Shape shape) => shape switch
{
Circle(var r) => Math.PI * r * r,
Rectangle(var w, var h) => w * h,
_ => throw new ArgumentException("Неизвестная фигура")
};
Никаких is checks, никаких кастов, никакого боксинга. Компилятор знает структуру и гарантирует полноту проверки всех случаев.
Можете комбинировать с проверками свойств:
if (shape is Rectangle { Width: > 100, Height: > 100 })
Console.WriteLine("Большой прямоугольник");
Это делает бизнес-логику выразительнее и безопаснее. Вместо цепочки if-else с кастами получаете элегантный switch:
public abstract record OrderStatus;
public record Pending : OrderStatus;
public record Shipped(DateTime Date) : OrderStatus;
public record Cancelled(string Reason) : OrderStatus;
string Describe(OrderStatus status) => status switch
{
Pending => "Ожидает отправки",
Shipped(var date) => $"Отправлен {date:d}",
Cancelled(var reason) => $"Отменён: {reason}",
};
🐸Библиотека шарписта
#sharp_view👍 27❤ 3🙏 2
❓ Признавайтесь, что вас зацепило на этой неделеAnonymous voting
- Мемы
- Пост про foreach
- Напоминания про .NET Conf
- Холивар про скриншоты
- Пост про сравнения у рекордов
- Про копирование с with
- Мини-обзор .NET 10
- Про два using'a
- Обновлённые расширения типов в C# 14
🥱 19🔥 2
照片不可用在 Telegram 中显示
⭐️ Дайджест недели
Неделю взяли Microsoft со своей конференцией и обновлениями.
— .NET Conf. День 1 и день 2
— Doom теперь в Telegram
— Юбилейный .NET
— Обновления .NET и .NET Framework
В ноябрьском обновлении 2025 года вышли новые релизы .NET 8.0.22 и .NET 9.0.11, включающие набор безопастностных и технических исправлений.
🐸Библиотека шарписта
#async_news
⚡️ Ключевое слово field упрощает свойства
Управление данными в свойствах теперь проще с новым ключевым словом для доступа к автоматически созданному полю.
Раньше для добавления логики установки значения использовалось отдельное поле и аксессоры:
private string _msg;
public string Message
{
get => _msg;
set => _msg = value ?? throw new ArgumentNullException(nameof(value));
}
Сейчас field ссылается на поле, которое создает компилятор, сокращая код:
public string Message
{
get;
set => field = value ?? throw new ArgumentNullException(nameof(value));
}
Минимум кода — максимум контроля: write-only свойства снаружи и строгая логика внутри.
🐸Библиотека шарписта
#il_люминатор👍 21❤ 2😁 2
