Size: a a a

2020 November 25

W

WhiteBlackGoose in pro.net
Если не полностью, впрочем
источник

W

WhiteBlackGoose in pro.net
А не, в фарше есть DU на структах
источник

IC

Ilya L Che in pro.net
DU только для привлечения внимания. Оригинальный вопрос был аж в пятницу.
https://t.me/pro_net/295824
Telegram
Evgeniy Alexandrov in pro.net
Раз уж вечер пятницы, то скажите что думаете об идее:
Как известно, структуры в дотнете всегда sealed и всегда в иерархии типов - прямые наследники System.ValueType (reference тип). соответственно никакого наследования не имеют.
С другой стороны какой-нибудь шаблонный код для них можно сделать только в рамках generic-специализаций, иначе приходится наворачивать T4 и прочие подобные вещи.
Возможно ли организовать в, скажем, .NET10 ограниченное наследование для структур, например сможем объявить какой-нибудь abstract struct - наследник System.ValueType, reference тип
в нем организовать общие поля и методы, а от него уже унаследовать обычные структуры, которые sealed и value типы.
Можно ли будет тогда запилить что-то в духе  https://github.com/mcintyre321/ValueOf/blob/master/ValueOf/ValueOf.cs  но без аллокации лишнего объекта?
Сам то я вижу пока в таком дизайне косяк в том, что инстанс структуры при передаче в метод этой abstract struct нужно будет боксить, либо вместо одной записи в method table реализовывать…
источник

I

Igor in pro.net
WhiteBlackGoose
А не, в фарше есть DU на структах
Но именно на структах реализовано плохо
источник

W

WhiteBlackGoose in pro.net
Ну а там видимо никто не придумал ответа
источник

W

WhiteBlackGoose in pro.net
Igor
Но именно на структах реализовано плохо
А я вообще хз как такие вещи на структах робят
источник

A

Aloraman in pro.net
IdiocyAcceptance
Есть же пропозал по DU, почитай да и всё
За четыре года только пару раз упомянули проблему с overlap. Поди как всегда закончится, language team будет ссылаться на проблемы в рантайме, runtime team будет ссылаться на проблемы в языке
источник

MA

Makc Artemiev in pro.net
Никто не обходил новый клаудфаер программно?
источник

MA

Makc Artemiev in pro.net
Там где скрипт качается отдельно и в ответе не цифры , а буквенная последовательность
источник

A

Aloraman in pro.net
IdiocyAcceptance
Есть же пропозал по DU, почитай да и всё
Да и если посмотреть оригинальный пропозал про DU, то там речь о закрытых иерархиях типов, типа OneOf{ A, B} порождает типы OneOf c конкретными наследниками OneOf.A и OneOf.B
Простенький TU ж чисто про композицию, ни  A ни B никак не завязаны на Either<A,B>
источник

K

Katz in pro.net
Larymar r.sorokin
Господа байтоебы и знатоки утечек
В фиолетовом обсуждаем
подскажите надо ли диспозить CancellationTokenSource
Кроме linked token source надо ещё помнить про таймер/таймаут. Если ничего из этого нет, то диспоузить не обязательно.
источник

VS

Vasily Shapenko in pro.net
Aloraman
Наброс про abstract struct довольно быстро потонул, видимо надобно что-то поближе к функциональщине.
Например, поддержка tagged union со стороны рантайма! (Не полноценные sum type, Either<A,A,B> и Either<B,A> - разные типы. но все ж)
Если их ручками реализовывать, то натыкаешься либо на аллокации, либо на жирненькость.
Имплементация должна содержать индекс реального значения (tag) и множество возможных значений, из которых задано только одно (вот отсюда возникает оверхед по используемой памяти)
- Если имплементирован как value-тип, то передавать его дорого, приходится возиться с ref return и ref/out параметрами
- Если имплементирован как  reference-тип, то место передавать дешево, но нужно сделать аллокацию, да и в куче место отожрет
Можно попробовать уменьшить занимаемое место, как-то сделав overlap участков памяти под конкретные значения:
- В tagged union одно поле object под все значения, а по индексу уже определяем, что за конкретный тип. Постоянный боксинг/анбоксинг и тайпчеки!
- Включаем байтоебство, и FieldOffset'ами записываем все значения по одному смещению, и по индексу вытаскиваем конкретные байтики. Все хорошо пока все значения или только value-типы или только reference-типы. Как только натыкаемся на оба получаем E-E-Exception! Нельзя оверлапить ссылки и данные, для GC нужно обязательно гарантировать, что в этом участке памяти ссылка в кучу может быть либо всегда, либо никогда!
То бишь для стройного быстрого tagged union нужна реализация со стороны рантайма, и что б GC знал, что надо индекс проверять перед тем как ссылки переписывать.
Что думаете? Где возникнут type holes, GC holes, etc?
Месье имеет очень странные вкусы.
источник

A

Aloraman in pro.net
Vasily Shapenko
Месье имеет очень странные вкусы.
Не все ж наворачивать Model -> DbSet -> DbContext -> Repository -> Dto -> ApplicationService -> ViewModel -> Controller в крудах
источник

VS

Vasily Shapenko in pro.net
Aloraman
Не все ж наворачивать Model -> DbSet -> DbContext -> Repository -> Dto -> ApplicationService -> ViewModel -> Controller в крудах
Я бы посоветовал посмотреть на фшарп
источник

I

IdiocyAcceptance in pro.net
Aloraman
Да и если посмотреть оригинальный пропозал про DU, то там речь о закрытых иерархиях типов, типа OneOf{ A, B} порождает типы OneOf c конкретными наследниками OneOf.A и OneOf.B
Простенький TU ж чисто про композицию, ни  A ни B никак не завязаны на Either<A,B>
Ну в фаршике сейчас как раз такого вида DU. Делают пропозал на второй тип, который ты описал, аля (int | string)
источник

VS

Vasily Shapenko in pro.net
А не страдать херней
источник

A

Aloraman in pro.net
Vasily Shapenko
Я бы посоветовал посмотреть на фшарп
Мы вам перезвоним
источник

I

IdiocyAcceptance in pro.net
Не совсем пока понимаю какого рода поддержку от рантайма ты хочешь увидеть
источник

VS

Vasily Shapenko in pro.net
Aloraman
Мы вам перезвоним
Написанное выглядит как некоторый бред просто. Я предлагаю посмотреть, как это сделано по-нормальному
источник

I

IdiocyAcceptance in pro.net
Vasily Shapenko
Написанное выглядит как некоторый бред просто. Я предлагаю посмотреть, как это сделано по-нормальному
так он же в начале описал 1 в 1 DU в фарше
источник