Кстати, я заметил что кейворды abstract, virtual, override - зарезервированы,

значит есть надежда?🌚

29 ответов

36 просмотров

по-моему это ненужный сахар, пусть там в резерве и лежат, не надо из раста монстра делать, как с++

davidoc26-Eritsyan Автор вопроса
Developer
по-моему это ненужный сахар, пусть там в резерве и...

Это печально. Не обязательно ведь монстра нужно делать, какое-нибудь одиночное наследование и все🌚🌚

davidoc26 Eritsyan
Это печально. Не обязательно ведь монстра нужно де...

https://t.me/rust_beginners_ru/179563 вот здесь у человека были проблемы с наследованием, участники группы предложили выход из ситуации. в принципе все ооп-шные проблемы можно решить в расте штатными средствами. имхо излишний инструментарий не нужен в компилируемых языках - любая фича так или иначе сказывается головной болью для разработчиков компилятора. зачем это нужно?

davidoc26 Eritsyan
Это печально. Не обязательно ведь монстра нужно де...

плюсовое наследование, которое смешивает делегацию и динамический полиморфизм, можно не ждать,но вот про статическую делегацию разговоры давно идут и возможно таки что-то в итоге из них родится https://github.com/rust-lang/rfcs/issues/349 но так-то да, неплохих альтернатив для большинства ситуаций язык уже предоставляет

Как с goto в Java, ага

davidoc26 Eritsyan
Это печально. Не обязательно ведь монстра нужно де...

да хотя бы сделайте наследование реализации методов в трейте

мелькал в нескольких rfc и обсуждениях, из которых ничего пока не вышло. если надо тупо имя типа получить, то в стд есть https://doc.rust-lang.org/std/any/fn.type_name.html

ozkriff🇺🇦 Lesnikóv
мелькал в нескольких rfc и обсуждениях, из которых...

ну вообще, да, скорее всего вне темплейтов он не нужен, а темплейтов в расте нет

davidoc26 Eritsyan
2014 год... Ну-с, вряд ли))

не факт, ага. но, с другой стороны, запросы HKT тоже с 13 года висят и с GAT'ами движуха таки разогналась в последние годы

davidoc26 Eritsyan
Это печально. Не обязательно ведь монстра нужно де...

Нет смысла добавлять в раст наследование- все решается композицией

Алексей
Нет смысла добавлять в раст наследование- все реша...

У наследования и композиции свои удобные юзкейсы

Карим Аль-Савади
У наследования и композиции свои удобные юзкейсы

Наследование – это крайнее средство. Как правило всегда есть способ сделать лучше. Но иногда надо. Но ради этого в язык добавлять не стоит

Карим Аль-Савади
И почему это крайнее средство?

Потому что практика показывает, что оно плохо выражает идеи. Потому что другие средства позволяют сделать архитектуру лучше и код короче. Потому что вообще объекты – это замыкания для бедных (тут конечно в Раст много специфики, но всё равно это стоит помнить)

А можно пример из практики? Мне всегда казалось, что есть два понятных юзкейса - немного свойств у многих и много свойств у немногих. Наследование удобнее в первом случае, композиция во втором.

Карим Аль-Савади
А можно пример из практики? Мне всегда казалось, ч...

Всё-таки важно что это за "свойства", как они взаимодействуют между собой. Суть не в том, чтобы заменять наследование композицией. Суть в том, чтобы вообще иначе строить архитектуру. Ну возьмите например паттерн ECS. Да, он не подходит всегда и для всего, но это отличный пример что есть другие варианты, кроме наследования и завуалированно наследования, выраженного композицией

Anton А 🦄
Всё-таки важно что это за "свойства", как они взаи...

Ну так а зачем иначе строить архитектуру. Вот есть у меня допустим потребность в написании тестов. И для этого мне нужно в каждый отдельный тест прокидывать некоторый контекст. Почему бы не сделать это с помощью наследования, а выбирать какую-то другую архитектуру? Мне хочется узнать на примере, как это работает, абстрактно это ни о чем не говорит, кроме «делай хорошо и хорошо будет».

Карим Аль-Савади
Ну так а зачем иначе строить архитектуру. Вот есть...

Это вопрос из серии "зачем делать отступы в коде". У программистов, постигших классическое ООП (то есть у примерно всех), есть когнитивное искажение: бездумное следование определенной схеме. Чтобы его преодолеть, чтобы не застрять на уровне развития "умею пользоваться ООП", а дойти до уровня "умею не пользоваться ООП", нужно постараться. Вот например наблюдение из практики. При наследовании зачастую код специфического назначения оказывается в базовом классе, хотя он там как собаке пятая нога. Грубо говоря, если вам надо добавить животному поведение при встрече с человеком, нужно запихнуть в базовый класс абстрактный метод. Чувствуете запахло недекомпозированностью и сложностью "m x n" вместо "m + n"?

Anton А 🦄
Это вопрос из серии "зачем делать отступы в коде"....

Первый абзац комментировать не буду, скажу только, что уверенность в своей правоте это худший способ доказать что-то. Особенно, когда кроме него ничего нет. Так вы не останавливайтесь в этом примере на моменте со сложностью. Вы расскажите, как эта сложность решается. Заодно можете рассказать, почему "Грубо говоря, если вам надо добавить животному поведение при встрече с человеком, нужно запихнуть в базовый класс абстрактный метод." это решение в духе наследования, а не просто плохое.

Сложность решается с помощью алгебраических типов данных. Если в данном случае нет противопоказаний к использованию ADT. А если есть, то решается иначе. Индивидуально в каждом случае. Я упоминал ECS. Или надо аккуратно воткнуть в нужное место Any. Суть в том, что решение индивидуально

Anton А 🦄
Сложность решается с помощью алгебраических типов ...

То есть, мы пришли обратно к тому, что все индивидуально и нет обоснования для фразы "Практика показывает, что оно плохо выражает идеи". Потому что на практике просто оказывается, что инструмент был применен неправильно или его не нужно было применять в конкретном случае. И я напомню, что изначальное я об этом и сказал - у каждого инструмента(будь то наследование или композиция) свои юзкейсы.

Карим Аль-Савади
То есть, мы пришли обратно к тому, что все индивид...

А я говорю, что практика показывает (моя практика если хотите), что почти всегда есть решение не использующее наследование, и оно лучше в смысле более точного соответствия кода мыслям в голове программиста. Но чтобы его найти, его нужно искать, потому наследование руки пишут сами без участия головы.

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

Карим Аль-Савади
Вполне может быть. Мне тоже зачастую не нравится н...

Возможно. Но я прежде хотел бы увидеть в Rust impl Trait through Field и посмотреть на количество оставшегося бойлерплейта

Карим Аль-Савади
Вполне может быть. Мне тоже зачастую не нравится н...

Наследование в системном языке нетривиально в реализации

Карим Аль-Савади
Вполне может быть. Мне тоже зачастую не нравится н...

Чаще видно, что гору бойлерплейта порождает оверинжиниринг, который в частности ооп создавать просто обожает, а от процедурки отвык народ, поэтому так и выходит

Traveller Kolsky
Чаще видно, что гору бойлерплейта порождает оверин...

Да просто у ООП реклама лучше, так еще и рекламируют, как универсальное решение, к сожалению.

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
Всем привет. Не понимаю, в чём тут шутка юмора. Убирается только разрешение на send_messages. А send_media_messages остаётся. Как сделать, чтобы оба убирались? await b...
Alexander
2
Ребята привет. Telegraf 3.38 актуален ещё или лучше обновиться?
𝙊𝑙ẽ𝘨 // Rabbit Hole
2
Есть ли лимиты на кол-во вебхук по домену? Стоит в данный момент 900+ ботов и бывает бот перестает отвечать (не приходят вебхуки) 🐒 Помогает только перезапуск
ᅠ [ Кому не ответил, дублируйте ]
11
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Товарищи, я с вопросом На сколько мне известно, это, конечно, зависит от того, как программа использует процессор, но у меня всё равно остаётся вопрос Допустим, есть 2 проце...
Shen
1
Товарищи, здравствуйте Подскажите, пожалуйста, может кто-нибудь сталкивался с такой задачей Через вебапку можно сканировать qr-код, а есть ли возможность считывать nfc?
Artem Stormageddon
8
Визуальное отображение моделей таблиц sql какое посоветуете?
Shen
7
Коллеги, здравствуйте Подскажите, пожалуйста. я почему-то всегда думал, что если переходить по ссылке такого формата(t.me/bot_bot?start=1) на бота. То бот сразу прожимает кн...
Artem Stormageddon
3
Карта сайта