https://www.youtube.com/watch?v=ns8K-egSLzo
донаты собирает через youtube и через patreon
10. Значения параметров по-умолчанию в иерархии
(предлагаемые решения - статический анализатор, который будет предупреждать о проблеме,
или запретить параметры по-умолчанию во всех функциях, кроме статических)
9. Интерфейсы IEnumerable<T> и IQueryable<T>, второй наследуется от первого,
но работают они по-разному семантически. Первый локально, второй формирует запросы к удалённому ресурсу
и выполнение происходит на удалённом ресурсе.
Если применить extension-метод не к тому типу, то есть риск затянуть с удалённого ресурса гигабайты или терабайты данных.
Ошибиться таким образом легко и мало инструментов, которые бы об этом предупреждали.
Нужно быть к этому внимательными. И нужно обучать этому всех новых сотрудников.
8. void не является типом
из-за этого нельзя единообразно обрабатывать делегаты, которые возвращают void.
приходится делать два метода. А если используются асинхронные методы, то четыре.
Хотя в unsafe-контексте о похожей проблеме подумали.
7. Синтаксис подписки на события и отписки от них.
нужно знать кто был подписчиком, чтобы совершить отписку.
Если мы захотим подписать анонимный метод, то отписать не сможем, утечка памяти.
Решение - использование IDisposable
6. Оператор switch (точнее выражение, expression)
непривычный синтаксис, можно было сделать удачнее
5. Отсутствие вывода типа в конструкторах
при этом для статического метода компилятор всё может сделать.
4. Разные модификаторы доступа по-умолчанию в разных контекстах
класс внутри namespace по умолчанию internal
класс внутри класса по умолчанию pivate
это связано со старением языка. Хотелось бы новый мейнстримный язык, F# не годится.
языки программирования с 2000 по 2020-е стали значительно круче
3. Слабая система дженериков (шаблонов)
3.1. нельзя проверить, реализует ли объект типизированный интерфейс
3.2. нельзя наложить ограничения на типы более разнообразно (недостаточно синтаксиса)
2. Конструкторы
методы, деструкторы, финализаторы - неконсистентно используемая терминология
из-за обязательного вписывания конкретных имён труднее впрямую применять copy-paste,
не работают поиск и замена, потому что все конструкторы в проекте называются по-разному
в других языках (вроде TypeScript или Swift) это уже исправлено (ключевое слово "constructor" как слышится, так и пишется)
)) необязательные запятые хотелось бы добавить в прототипы функций и из вызовы
)) массивы не являются generic-овыми
1. Проблема добавления аргументов в конструкторы базовых классов
Обсуждение на RSDN:
http://rsdn.org/forum/dotnet/8496544.all
Отредактировано Лис (2023-04-08 00:24:58)