Ilya
ты её понимаешь как каст, я интерпретирую как вызов метода интерфейса
Roman
вызов метода интерфейса же требует каста
Ilya
ну и в дженериках
Doge
ты её понимаешь как каст, я интерпретирую как вызов метода интерфейса
Авторы компилятора всё же подразумевали там каст, иначе бы они не писали if the type is a non-nullable value type then we do not do the *boxing conversion* from the resource to IDisposable.
Doge
То что они говорят о boxing conversion - всё же говорит, что спеку они понимают в плане каста
Doge
И потом доказывают, что её тут корректно убрать
Ilya
То что они говорят о boxing conversion - всё же говорит, что спеку они понимают в плане каста
это не спека, но они могли реализовать как бокс + вызов, либо констрейнед + вызов
Ilya
написано, что выбрали второй
Ilya
честно говоря, я поражаюсь как можно считать людей идиотами
Ilya
как можно думать, что люди которые пишут компилятор сделают боксинг, когда его можно не делать
Doge
написано, что выбрали второй
Так они доказывают ниже, что в данном случае корректно убрать бокс и он не нарушит ожидаемого поведения. Если бы были возможны оба пути по спеке, то это доказательство им не надо было бы писать.
Ilya
но пожалуй что то в этом есть)
Roman
нет, если тип известен
с произвольным интерфейсом?
Roman
ага
https://sharplab.io/#v2:C4LglgNgPgAgTARgLACgYGYAEYB2wCmATgGYCGAxvpgJIAyA9hJgN6qYwAsmDEAFAJQBuTCNQBfVBkwBnYIQCu5YJgDCmEDR4s2I9lk7dGA7Sl1n2CAJyZeAIgiNbQnSIko3U+JgAq+WSd0XPQsANnYuAFkBVlNzETpGTAJ/AF5MHHwAd1UBQSCzZOAAOh5coLcxIA==
Roman
покажи тогда кот, который имеешь ввиду
Ilya
в рантайме тип будет известен и боксинга не будет
Anatoly
ну и это ты считал бы их идиотами, если бы они сделали боксинг
Ilya
ну и это ты считал бы их идиотами, если бы они сделали боксинг
ну я всё таки не настолько плохого мнения о них
Ilya
они же не сделали))
Anatoly
и параллельно, самое главное, под рукой надо всегда иметь тонну распечаток
Anatoly
как именно писать код, чтобы боксинга точно не было
Ilya
как именно писать код, чтобы боксинга точно не было
ну в целом боксинг происходит только при потере типа структуры
Ilya
+ вызовы базовых методов object, если они не переопределены
Ilya
@med_igor @omgszer про котлин. trimIndent и trimMargin считаются на этапе компиляции, если это возможно. Add intrinsics for compile-time computing trimMargin/trimIndent (github) Optimize trimIndent and trimMargin on constant strings (youtrack)
Roman
например вот
с женериками походу единственный случай, когда можно избежать боксинга. Не считая дак тайпинга
Ilya
с женериками походу единственный случай, когда можно избежать боксинга. Не считая дак тайпинга
дак тайпинг ничего не решит - если у тебя потерялась информация о типе, дак тайпинг работать не будет, а если информация о типе есть - вызов метода будет без боксинга
Ilya
с женериками походу единственный случай, когда можно избежать боксинга. Не считая дак тайпинга
вообще ты можешь избежать боксинга, если переопределишь gethascode, например
Ilya
но боксинг начинается не когда вызывается метод интерфейса, а когда происходит каст структуры в этот интерфейс
Ilya
например foo(IA a) =>a.Call();
Ilya
здесь не будет боксинга, боксинг будет в момент вызова
Roman
я про то, что ты не сможешь вызвать без боксинга метод интерфейса кроме как через женерик метод
Ilya
но если у тебя тип структуры известен - то без проблем - будет обычный call
Ilya
рихтер щас наверное не спит
Ilya
Для скалы я какой-то проект на гитхабе с trimMargin и trimIndent на макросах видел. Но у него 2 звезды было. Думаю, можно найти и посолиднее.
Ilya
А джаве блоки текста автоматически отступ обрезают, кстати.
Oleg
не понимаю какие проблемы с боксингом в 21 веке достаточно иметь райдер + хип аллокейшен вьювер, чтоб не тупить в качестве правила достаточно взять - писать вместо void Foo(ISome some) { } вот так void Foo<T>(T some) where T : ISome { } в большинстве случаев спасет от лишнего боксинга
Mark
Что-то не хочу я такой бойлерплейт писать
Doge
Что-то не хочу я такой бойлерплейт писать
Это ещё не бойлерплейт по сравнению с тем, что приходится в расте делать, если не хочется использовать боксы + дин трейты.
Oleg
учитывая, что мы код в основном читаем, а не пишем это мелочь, на чтение никак не оказывает влияение
Dr. Friedrich
Кажется, @fvnever писал, что этот плагин особо никто не поддерживает. Так что на верность его работы не стоит рассчитывать.
Особо не поддерживает, но и правила боксинга особо не менялись. Разве что вокруг локальных функций там немножко мрак.
Oleg
использую очень давно
Ilya
https://careers.microsoft.com/professionals/us/en/job/855274/Senior-Software-Engineer-Identity
это в твою команду? Design and develop large scale distributed software services and solutions Adhere to and drive modern software engineering practices through design reviews
Doge
Звучит так, что с языком что-то не так
Просто если ты не хочешь динамичксих вызовов, то будь добр протягивай с собой везде точную информацию о конкретных типах. Это всё вполне себе разумно в реалиях текущих компиляторов.
Vasily
High concentration of bullshit words in this advertising
Vasily
@omgszer
Vasily
Sounds like shitty job
Ayrat
я вас все равно всю правду расскажу!!11
Ayrat
но, такая работа как у меня она только в этой команде
Ayrat
остальные люди не особо напрягаются с онколом например
Mark
Не дали стоки, вот и бесишься
Ilya
у мс аккауна ещё и контакты требует
Ilya
какой ушлый
Ayrat
а я не знаю как это работает!
Ilya
а я не знаю как это работает!
кажется меня не возьмут
Ilya
введите данные в дизейбленное поле, это типа часть собеседования?
Oleg
вместо боксинга структур попробуйте написать тип с дженерик аргументом, который имеет метод сложения Т с Т ну и остальные арифметические операции это в разы веселее, чтоб примитивы не боксились на всех платформах
Ayrat
я честно не знаю, вроде работало, но я не шарю
Ilya
я честно не знаю, вроде работало, но я не шарю
не нажимаешь на подозрительные кнопки?
Ilya
Ну ты html поправь.
работаю над этим