Волобуев Петр | Технологический радарВолобуев Петр | Технологический радар
Использую

C# 14 с .NET 10. Жду этот LTS как следующую базовую версию для всех проектов.

Главная фича которую ждал — field keyword для property accessors. Наконец можно писать проверку или вычисление в геттере/сеттере без явного объявления backing field. Классический паттерн с private string _name уходит в прошлое для типичных случаев.

Из остального что в поле зрения:

  • Extension types — новый синтаксис extension блоков как альтернатива extension methods. Позволяет объявлять свойства и операторы для чужих типов, а не только методы. Пока присматриваюсь как лучше применять
  • Улучшения в работе с Span<T> и params — язык всё больше позволяет писать высокопроизводительный код без перехода на unsafe

Версия ещё в активной разработке пока пишу это, но основное направление уже понятно — язык взрослеет, убирает оставшийся бойлерплейт.

Использую

C# 13 с .NET 9. Релиз не LTS, нововведений в языке немного, но некоторые приятные.

  • params collectionsparams теперь работает не только с массивом, но и с IEnumerable<T>, Span<T> и другими коллекциями. Наконец можно писать универсальные методы без перегрузок
  • новый тип System.Threading.Lock — замена объекту-маркеру для lock. Семантика та же, но явнее выражает намерение
  • partial свойства и индексаторы — расширяет паттерн partial для source generators, которые всё активнее используем
  • \e escape-последовательность для ESC символа — мелочь для консольных утилит, но приятно.

В целом C# 13 чувствуется как шлифовка, а не крупный скачок — основные ожидания уже переключились на .NET 10.

Из того что прижилось сразу - это params collections и от части System.Threading.Lock, хотя пока не прочувствовал в чем сила в сравнении обычными объектами-пустышками.

Использую

C# 12 с .NET 8. Два нововведения сразу пошли в повседневную работу.

Primary constructors — долго ждали их для обычных классов (не только record). Зависимости через конструктор теперь объявляются прямо в заголовке класса, меньше бойлерплейта в сервисах. Правда нужно немного привыкнуть что параметр не становится полем автоматически — если нужно хранить, явно захватываем.

Collection expressions[1, 2, 3], spread-оператор .. для объединения коллекций. Наконец синтаксис не хуже чем в других языках. Хорошо работает вместе с Span и ReadOnlySpan без дополнительных аллокаций.

Ещё из полезного:

  • using алиасы теперь могут ссылаться на любые типы, не только named types — using Point = (int X, int Y) и т.п.
  • default параметры в lambda — стало удобнее передавать lambdas в места где нужна совместимость с несколькими сигнатурами

Релиз пушка-бомба!

Использую

C# 10 с .NET 6. Язык взял курс на лаконичность — каждый релиз убирает немного шума.

  • file-scoped namespace — убрал один уровень отступа во всех файлах. Мелочь, но глаз сразу радуется
  • global using — вынес стандартные пространства имён в один файл, перестал видеть одинаковые блоки usings повсюду
  • record struct — всё что нравится в record, но value type. Пригодилось там где boxing нежелателен
  • CallerArgumentExpression — для вспомогательных методов валидации выглядит хорошо, хотя применений пока немного
  • extended property patterns — можно писать x is { Foo.Bar: not null } вместо вложенного is { Foo: { Bar: ... } }
Использую

C# 9 вместе с .NET 5. Главное открытие — record. Наконец-то иммутабельный тип с value equality «из коробки», без ручной реализации Equals/GetHashCode. Сразу нашёл применение в доменных объектах и DTO.

Из других вещей что понравились:

  • init-only свойства — ещё один шаг к иммутабельности без лишней церемонии
  • new() — target-typed new, меньше повторений типов
  • pattern matching подрос: is not, комбинации and/or в switch — стало реально выразительнее
  • top-level statements — оценил в небольших утилитах и скриптах

Nullable reference types технически появились в C# 8, но вот теперь по-настоящему начал включать nullable enable и разбираться с предупреждениями вместо того чтобы отключать.

Использую

В мою жизнь приходит async/await. Чтобы понять как это работает открываю для себя утилиты для просмотра IL-кода.

До этого момента работа с асинхронным исполнением была связана либо с BackgroundWorker (WinForms), либо готовыми методами API (типа BeginЧто-то, EndЧто-то) либо Таски с ContinueWith.

И многопоточка на .net в целом. До этого с многопоточностью имел дело лишь в универе когда писали программы для кластера суперкомпьютера.

Вместе со всем вышеперечисленным появляются задачи с использованием примитивов синхронизации, в основном lock (monitor) и ManualResetEvent

Использую

В университете на базе курса алгоритмов стал активно использовать дженерики по аналогии с шаблонными классами в плюсах.

Также получаю базовое представление о байт-коде, JIT компиляторе, CLR и Garbage Collector.

Использую

Разобрался с идеей языка. Начал уверовать в ООП. Открыл для себя делегаты и события.

Оценка

Открыл для себя язык Си четыре плюса. Все говорят - очень круто, но мне не понятно и неудобно. Тем не менее требуется делать заказы и на нем, приходится разбираться.