Size: a a a

2021 April 27

Т8

Т-34 85 in rust_offtopic
так а в чём проблема? В твоём случае не будет рантайм оверхеда, или что?
источник

TK

Traveller Kolsky in rust_offtopic
Обычно наследование советуют ещё заменять композицией
источник

TK

Traveller Kolsky in rust_offtopic
Можно испортить инвариант типа, если тот криво написан, или получить diamond problem, или унаследовать ненужное поведение
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
тем что если где-то в библиотеке ест ькуча полезных функций для типа внутри оберкти то тебе придетяся их все прокидывать
источник

KR

Kai Ren in rust_offtopic
Проблема в том, что апкаст/даункаст здесь не решение, а вынужденный костыль.

Учитывая насколько много и широко используются те же маркер-трейты в расте с доп. zst-параметрами для кодирования тех или иных инвариантов, то ты можешь представить ergonomic impact от того, что нужно порождать новый тип (класс) на каждый подобный кейс + апкастить/даункастить по кд.
источник

Т8

Т-34 85 in rust_offtopic
2 раза в иерахии до самого дальнего ребёнка? Ну то есть, реализовали для класса A, объявили B : A, в B нельзя оверрайднуть тот самый дефолтный метод?
источник

TK

Traveller Kolsky in rust_offtopic
Плюс всё время работа по указателю с классами. Не существенный минус, медаль о двух сторонах, но имеет свои проблемы, довольно существенные.
источник

KR

Kai Ren in rust_offtopic
Можно не юзать подобный подход, конечно, и не использовать выгоду от автоматической проверки компилятором всех этих закодированных инвариантов.

Но так можно писать и на JS, и в ус не дуть.
источник

П

Пух in rust_offtopic
impl<T: Trait1> Trait2 for T не? Там какая-то подобная конструкция
источник

TK

Traveller Kolsky in rust_offtopic
Есть такое, но потом Trait2 никто не сможет заимплементить самостоятельно из-за отсутствия специализации
источник

Т8

Т-34 85 in rust_offtopic
>испортить инвариант типа
можно пояснение?

> diamond problem
я почти уверен, что это высосанная из пальца проблема

> унаследовать ненужное поведение
в смысле? Как Раст от этого защищает ,например?
источник

Т8

Т-34 85 in rust_offtopic
можешь развернуть мысль, а то пока не понимаю?
источник

Т8

Т-34 85 in rust_offtopic
в смысле "не решение, а костыль"? Ты точно понимаешь, что такое ООП?
источник

TK

Traveller Kolsky in rust_offtopic
Первое
Забыл вызвать реализацию super (иногда необходимо), изменил поля неожиданным образом, проблемы с деструкторами (c++)
Второе
Ой, не смеши. Поэтому она называется a diamond of death.
Третье
Раст не наследует поведение, так же, как трейты не наследуют друг друга
источник

Т8

Т-34 85 in rust_offtopic
это ж суть ООП!
источник

KR

Kai Ren in rust_offtopic
Нет, смести акцент с ООП на те проблемы в коде, которые ты пытаешься им решить.
источник

TK

Traveller Kolsky in rust_offtopic
По третьему: минус есть, но он исправим, например, при помощи derive_more
источник

KR

Kai Ren in rust_offtopic
Апкасты/даункасты на каждый чих?
источник

Т8

Т-34 85 in rust_offtopic
какие проблемы?
источник

KR

Kai Ren in rust_offtopic
Ооо… есть фича-реквесты туда?)
источник