Re[14]: DisassemblyDiagnoser
От: Qbit86 Кипр
Дата: 09.06.20 09:22
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Всё равно всё упирается в возможность вызывать встроенные операторы без полиморфизма.

Q>>Произойдёт мономорфизация, исчезнут callvirt'ы, в простых случаях даже инлайнинг будет. Это ж не делегаты с гарантированной косвенностью. Мы ж передаём не IMonoid<T>, а TMonoid where TMonoid : IMonoid<T>.
S>Ну, если так-то конечно почему бы и нет.
S>Можно проверить, получится ли это сделать сейчас — если передать struct Monoid как параметр шаблона, то по идее это должно вызвать принудительную специализацию, и все абстрактные методы будут проинлайнены.

Так он уже параметр шаблона. Проверить можно — я подрубил к бенчмарку DisassemblyDiagnoser. (Сам-то я не шарю в CIL; но на вид генерируемый код такой же.)

S>Да и Zero-то описывать надо только для разве что string, потому что нулями всех остальных совершенно случайно являются default(T).


Кроме, например, мультипликативных моноидов, где нейтральным элементом будет единица.
Глаза у меня добрые, но рубашка — смирительная!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.