Ilya
ты её понимаешь как каст, я интерпретирую как вызов метода интерфейса
Roman
вызов метода интерфейса же требует каста
Ilya
Ilya
ну и в дженериках
Doge
То что они говорят о boxing conversion - всё же говорит, что спеку они понимают в плане каста
Doge
И потом доказывают, что её тут корректно убрать
Ilya
Ilya
написано, что выбрали второй
Ilya
честно говоря, я поражаюсь как можно считать людей идиотами
Ilya
как можно думать, что люди которые пишут компилятор сделают боксинг, когда его можно не делать
Doge
написано, что выбрали второй
Так они доказывают ниже, что в данном случае корректно убрать бокс и он не нарушит ожидаемого поведения.
Если бы были возможны оба пути по спеке, то это доказательство им не надо было бы писать.
Ilya
Ilya
но пожалуй что то в этом есть)
Ilya
Roman
ага
https://sharplab.io/#v2:C4LglgNgPgAgTARgLACgYGYAEYB2wCmATgGYCGAxvpgJIAyA9hJgN6qYwAsmDEAFAJQBuTCNQBfVBkwBnYIQCu5YJgDCmEDR4s2I9lk7dGA7Sl1n2CAJyZeAIgiNbQnSIko3U+JgAq+WSd0XPQsANnYuAFkBVlNzETpGTAJ/AF5MHHwAd1UBQSCzZOAAOh5coLcxIA==
Ilya
Roman
покажи тогда кот, который имеешь ввиду
Ilya
Ilya
в рантайме тип будет известен и боксинга не будет
Anatoly
Anatoly
ну и это ты считал бы их идиотами, если бы они сделали боксинг
Ilya
Ilya
они же не сделали))
Anatoly
и параллельно, самое главное, под рукой надо всегда иметь тонну распечаток
Anatoly
как именно писать код, чтобы боксинга точно не было
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)
Ayrat
Roman
например вот
с женериками походу единственный случай, когда можно избежать боксинга. Не считая дак тайпинга
Ilya
Ilya
но боксинг начинается не когда вызывается метод интерфейса, а когда происходит каст структуры в этот интерфейс
Ilya
например foo(IA a) =>a.Call();
Ilya
здесь не будет боксинга, боксинг будет в момент вызова
Ilya
Roman
я про то, что ты не сможешь вызвать без боксинга метод интерфейса кроме как через женерик метод
Ilya
Ilya
но если у тебя тип структуры известен - то без проблем - будет обычный call
Ilya
рихтер щас наверное не спит
Igor
Ilya
Для скалы я какой-то проект на гитхабе с trimMargin и trimIndent на макросах видел. Но у него 2 звезды было. Думаю, можно найти и посолиднее.
Ayrat
Ilya
А джаве блоки текста автоматически отступ обрезают, кстати.
Oleg
не понимаю какие проблемы с боксингом
в 21 веке достаточно иметь райдер + хип аллокейшен вьювер, чтоб не тупить
в качестве правила достаточно взять - писать вместо
void Foo(ISome some) {
}
вот так
void Foo<T>(T some) where T : ISome {
}
в большинстве случаев спасет от лишнего боксинга
Mark
Что-то не хочу я такой бойлерплейт писать
Ilya
Oleg
учитывая, что мы код в основном читаем, а не пишем
это мелочь, на чтение никак не оказывает влияение
Dr. Friedrich
Mark
Oleg
Oleg
использую очень давно
Ayrat
Doge
Звучит так, что с языком что-то не так
Просто если ты не хочешь динамичксих вызовов, то будь добр протягивай с собой везде точную информацию о конкретных типах.
Это всё вполне себе разумно в реалиях текущих компиляторов.
Vasily
High concentration of bullshit words in this advertising
Vasily
@omgszer
Ayrat
Vasily
Sounds like shitty job
Ayrat
я вас все равно всю правду расскажу!!11
Ayrat
но, такая работа как у меня она только в этой команде
Ilya
Ayrat
остальные люди не особо напрягаются с онколом например
Mark
Не дали стоки, вот и бесишься
Ilya
у мс аккауна ещё и контакты требует
Ilya
какой ушлый
Ayrat
а я не знаю как это работает!
Ilya
Ilya
введите данные в дизейбленное поле, это типа часть собеседования?
Oleg
вместо боксинга структур
попробуйте написать тип с дженерик аргументом, который имеет метод сложения Т с Т
ну и остальные арифметические операции
это в разы веселее, чтоб примитивы не боксились на всех платформах
Ayrat
Ayrat
я честно не знаю, вроде работало, но я не шарю
Ilya
Ilya
Ayrat
Ilya
Doge