Size: a a a

2020 December 22

I

IdiocyAcceptance in F# Chat
если бы компилятор чётко знал, что есть некий struct энумератор с такими-то методами
источник

I

IdiocyAcceptance in F# Chat
в принципе, он и знает, но проблема что это интерфейс
источник

P

Pavel in F# Chat
Mark Shevchenko
Популярный пример: применение методов расширения Enumerable к массивам и спискам. У тебя есть массив, ты хочешь его отфильтровать и на выходе получить массив (или то же самое со списком). Тебе приходиться вызывать методы ToArray или ToList в конце цепочки LINQ-методов.

Если бы в языке были тайп классы, а не интерфейсы, они возвращали бы тот же самый тип, к которому их применили. Where для массива возвращал бы массив.
Ну хз хз, если идет цепочка преобразований, как раз не стоит перегенять в массивы промежуточные результаты
источник

MS

Mark Shevchenko in F# Chat
В действительности, некоторые методы Enumerable проверяют типы переданного перечисления, чтобы оптимизировать скорость выполнения.
источник

I

IdiocyAcceptance in F# Chat
плюс не совсем ясно что с размером кода делать на самом деле - интерфейсы хоть и абстракция со своими перф минусами, они позволяют не генерировать код под каждый возможный энумератор
источник

I

IdiocyAcceptance in F# Chat
а ограничиться пусть более медленным, но компактным с точки зрения размеров кода механизмом
источник

MS

Mark Shevchenko in F# Chat
IdiocyAcceptance
плюс не совсем ясно что с размером кода делать на самом деле - интерфейсы хоть и абстракция со своими перф минусами, они позволяют не генерировать код под каждый возможный энумератор
У тайп-классов есть дефолтные реализации. Можно часть методов не писать вручную.
источник

I

IdiocyAcceptance in F# Chat
не, я про уже конечный машинный код)
источник

I

IdiocyAcceptance in F# Chat
по крайней мере если смотреть через призму дотнета и структур
источник

I

IdiocyAcceptance in F# Chat
и замены всех интерфейсов на тайпклассы со структурами
источник

MS

Mark Shevchenko in F# Chat
Pavel
Ну хз хз, если идет цепочка преобразований, как раз не стоит перегенять в массивы промежуточные результаты
Производительность имеешь в виду? Да, в общем случае, ты прав. Ну вот, есть такой пример.
источник

MS

Mark Shevchenko in F# Chat
IdiocyAcceptance
не, я про уже конечный машинный код)
Тут не знаю. С этой точки зрения знатоки компиляторов лучше знают, можно это оптимизировать или нет.
источник

VS

Vladimir Shchur in F# Chat
Mark Shevchenko
В действительности, некоторые методы Enumerable проверяют типы переданного перечисления, чтобы оптимизировать скорость выполнения.
вот кстати коллега на работе тоже буквально неделю назад так говорил) на поверку оказалось что практически никаких проверок нету
источник

VS

Vladimir Shchur in F# Chat
непонятно откуда слух пошел)
источник

I

IdiocyAcceptance in F# Chat
ну почему, есть для некоторых методов
источник

I

IdiocyAcceptance in F# Chat
Например, Count всегда смотрит что под капотом, ICollection или нет
источник

I

IdiocyAcceptance in F# Chat
FirstOrDefault, LastOrDefault
источник

VS

Vladimir Shchur in F# Chat
так это не тип проверяется, а кастится к разным интерфейсам
источник

VS

Vladimir Shchur in F# Chat
нету такого что если массив,то так, а если лист то эдак
источник

I

IdiocyAcceptance in F# Chat
ну да, мне кажется это и имелось ввиду
источник