Re[3]: Моноид и компаратор
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.06.20 16:26
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Проблема определить оператор сложения вне типа никак и ничем принципиально не отличается от проблемы определить оператор сравнения вне типа. Это ровно та же проблема для ровно тех же задач — написание обобщённых алгоритмов и структур данных, которые используют полиморфные сложения и сравнения.


Q>Алгоритмы, использующие обобщённое сравнение всем известны: сортировки, деревья, хэш-таблицы. Использование компаратора ни у кого удивления не вызывает.

Q>Алгоритмы, использующие обобщённое сложение никому кроме меня не известны: например, алгоритм Дейкстры на графах. Поэтому использование моноида вызывает бурю эмоций.

Q>Для обобщённого сравнения ты реализуешь IComparer<T> или IEqualityComparer<T>. Аналогично, для обобщённого сложения (обобщённой бинарной операции) ты реализуешь IMonoid<T>. Или, если ты больше не инженер, а уже менеджер, то IGenericAggregationControllerManager<T>, так трудовому народу понятнее.


В том-то и дело. Многие программисты могут представить зачем им понадобится обощенное сравнение. Даже если им на практике никогда не доводилось создаавать код, где такое срвнение нужно (у нас же есть .OrderBy).
Но практически никто не может представить зачем нужно обобщенное сложение. Такое мало того, что никто не писал, мало кто представляет зачем оно нужно хотя бы в теории.
Зато все понимают кост новой фичи языка — лишние ключевые слова и совместимость с существующим, более сложное чтение и навигация по коду. Неожиданные сайд-эффекты от лишнего юзинга.

Нужен другой пример использования ролей, который будет более понятен всем. Я думаю эта фича, как и куча последних фич, родилась из разработки самого компилятора C#. Могли бы сделать пример с ним, а не с моноидами.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.