Romɑn
Вот вы
Vasily
Чет у меня фейспальмы
Vagif
На Рихтере переполненный зал, доклад в основном об инновациях в. NET 2.0
Roman
пранк, который вышел из-под контроля
Vasily
А в F# вот можно констрейнт на метод
Vasily
МЕЖДУ ПРОЧИМ
Ayrat
тоже подумал об этом. Но это в IL не уходит, так как statically resolved
Vasily
Ну что не уходит, понятно
Vasily
Но позволяет не писать странную ебанину в виде интерфейсов
gsomix
Чем интерфейсы-то не угодили?
Roman
Чем интерфейсы-то не угодили?
бойлерплейт, без которого можно обойтись
Vasily
Чем интерфейсы-то не угодили?
Что значит не угодили?
Roman
*в данном случае
Vasily
Просто их можно не использовать
Vasily
В данном случае
gsomix
Переформулирую. Почему интерфейсы — странная ебанина?
Ayrat
Чем интерфейсы-то не угодили?
интерфейсы норм когда надо объединить много странных констрейнов в один тип когда в интерфейсе 1 метод или поле, то лучше чо-нить другое придумать
Vasily
Переформулирую. Почему интерфейсы — странная ебанина?
Интерфейсы не стоит использовать как маркеры типов
Vasily
Это создает ложную иллюзию объединения поведения
Ayrat
Ок, функция.
ну да, функция норм.
Vasily
Кароч, интерфейс как маркер - не оч
Ayrat
Я маркер интерфейсы пользовал когда-то. Чтобы насадить на свои доменные модели разные ДЕКОРАТОРЫ над этими типами. Размазывал логику по ним. Сейчас я так не делаю
Vasily
Тут нужен тот смайлик
Vasily
С похлопыванием себя по щекам
Vasily
ДЕКОРАТОРЫ... МММ
Ayrat
ДЕКОРАТОРЫ... МММ
дада, обмазался ими когда-то по полной.
Ayrat
в фабрики опять же окунулся.
Roman
Почему? Что стоит?
ок, ситуация. Есть Message для сервис бас, и есть для ивент хаба, например. Типы определены в чужой либе, но у обоих есть метод GetBodyAsync() возвращающий таск. В сишарпе, чтобы унифицировать работу, ты создаешь интерфейс с этим методом и два враппера. В фшарпе ты делаешь SRTP функцию
gsomix
А в OCaml у тебя нормальные структурные типы.
gsomix
И что?
gsomix
А еще можно first-class модули использовать, или классы типов.
gsomix
Типажи. :)
gsomix
@atsapura @vshapenko Лучше расскажите, почему плохо-то.
Vasily
Ayrat
как?
ну вот твой пример с srtp норм, чо нет-то?
Ayrat
ты ж сам дал решение
Vasily
@atsapura @vshapenko Лучше расскажите, почему плохо-то.
Конструкция языка используется как метаданные
Vasily
Понятнее вряд ли смогу
Roman
ну вот твой пример с srtp норм, чо нет-то?
а, я не так тебя понял значит
Roman
@atsapura @vshapenko Лучше расскажите, почему плохо-то.
конкретно в моем примере функция удобней, потому что меньше кода, аллокаций и пр. Но оба решения рабочие
Roman
Когда-то я очень любил обмазываться подобной ебалой и был только рад накинуть еще пару интерфейсиков и классов
Ayrat
а, я не так тебя понял значит
ну да, твой пример это как раз тот случай когда лучше явно описать функцию и её констрейн чем интерфейс давать в котором ТА ЖЕ функция с констрейнами будет описана
Ayrat
т.е. тут интерфейс ничего не даёт
Vasily
Объявление интерфейса создает иллюзию, что объекты связаны
Ayrat
а вот когда тебе надо объединить более 1 констрейна, то без интерфейсов никуда
Vasily
Ну по-другому не умею, к сожалению
Roman
ты зря, это влияет, когда читаешь код большого проекта
Vasily
Появляются иллюзии
Vasily
О связях
Vasily
Хотя на самом деле связей нет
gsomix
А если через класс типов?
gsomix
Появляется иллюзия связи?
Vasily
Если я правильно понимаю, то класс типов - что-то вроде DU
Roman
разве?
Vasily
Хотя тут у меня гигантские провалы в теории
Roman
мне казалось, что это грубо говоря как раз пачка нормальных констрейнтов на дженерики
Vladislav
ActorRef
Vladislav
Простите за нубство
Vladislav
Читал процентов 20 доки
gsomix
Ну такой DU для функций
Нет там никакого DU. :)
Vasily
Нет там никакого DU. :)
DU - тут слово-заменитель
Roman
Ну, пусть так будет. Появляется связь или нет?
нет, в таком виде имхо не появляется
gsomix
Они очень похожи на интерфейсы, только позволяют описывать поведение отдельно от типов.
Vasily
Очень верно сформулировано
gsomix
Короче, на техническую реализацию вы накрутили философии. :)
gsomix
Я понял.