Size: a a a

2021 February 11

in

ildar nizamov in rannts
Roman Haritonov
Min, Max, Sum наконец может появятся в стандартной библиотеке (не только для float64)
>  Вы скорбите по тем временам, когда мужчины были настоящими мужчинами и сами писали драйверы устройств?
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Sergey Arkhipov
По теме пропозала - я не думаю, что оно станет очень популярным. Есть ряд библиотек, которые сильно выиграют, поскольку там не будет кодогенерации, однако основной прикладной код приложений и правда очень хорошо и легко выражается интерфейсами

Хотя, конечно, черт его знает. Все может быть
Интерфейсы - это фактически использование дополнительной virtual table (или как там) для вызова методов этого интерфейса. С дженериками можно на этапе компиляции сразу прописать вызов статичных адресов. Это напрямую влияет на производительность.
источник

SA

Sergey Arkhipov in rannts
Практика показывает, что в настолько критичном коде обычно и типы заранее известны, что не нужно вообще интерфейсы использовать
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Ну частенько хочется один раз написать "высокоуровневую обвязку" и использовать её с разными типами низкоуровневых имплементаций.
источник

SA

Sergey Arkhipov in rannts
Например?
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Ну пример, где речь шла бы прям про максимальную производительность, я сходу не придумаю.
Но из реального что я делал в Rust - это работа с различными хранилищами объектов аля S3. Для этого у меня были разные "адаптеры", которые имплементили конкретную реализацию хранилища. И были высокоуровневые функции, которые должны принимать аргументом такой адаптер и что-то делать.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Про производительность, как вариант, пример с обработкой изображений с разным форматом представления пикселей
источник

SA

Sergey Arkhipov in rannts
В среднем, оверхед между прямым вызовом функции и интерфейсом - около 2нс (наносекунд). остальное - инлайнинг и копирование. на практике все это совсем нестрашно. я думаю, что эта пара наносекунд тебе погоды не сделает в адаптерах
источник

SA

Sergey Arkhipov in rannts
Я могу ближе к вечеру поискать бенчмарки, сейчас просто времени нет
источник

KK

Kirill (Cykooz) Kuzm... in rannts
А, ну и конечно же - дженерики позволяют делать inlining кода. Интерфейсы не получится инлайнить
источник

SA

Sergey Arkhipov in rannts
да, все так
источник

SA

Sergey Arkhipov in rannts
но повторюсь: даже в очень нагруженном коде, когда там реально десятки тысяч запросов в секунду были, ботллнеков именно в работе с интерфейсами у меня не было. они достаточно эффективны
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Ну видимо о таком задумываются, когда уже пытаются оптимизировать на уровне работы с предсказателем переходов в процессоре. В этом случае илайнинг позволяет выиграть доп. проценты за счёт отстутствия переходов и чтения из виртуальной-таблицы
источник

RB

Roman Bolkhovitin in rannts
Kirill (Cykooz) Kuzminykh
Ну видимо о таком задумываются, когда уже пытаются оптимизировать на уровне работы с предсказателем переходов в процессоре. В этом случае илайнинг позволяет выиграть доп. проценты за счёт отстутствия переходов и чтения из виртуальной-таблицы
когда о таком задумываются, то не пишут на языке с гарбыж коллектором и сборкой мусора )))
источник

SA

Sergey Arkhipov in rannts
Опять же: на практике в таком коде ты уже знаешь, что там за типы будут попадаться
источник

SZ

Sergey Z in rannts
Roman Bolkhovitin
когда о таком задумываются, то не пишут на языке с гарбыж коллектором и сборкой мусора )))
Шутеры на джанге пишут, если верить тому что говорят на собеседованиях....
источник

SA

Sergey Arkhipov in rannts
шут-ин-зе-фут
источник

AM

Artem Malyshev in rannts
Sergey Z
Шутеры на джанге пишут, если верить тому что говорят на собеседованиях....
Я надеюсь это стресс-тест.
источник

SZ

Sergey Z in rannts
ну это мог быть стресс-тест меня, я его не прошёл.
источник

『Serg』 in rannts
может это  пошаговый шутер
источник