Позволяет ли rust автоматически копировать implementation дл
От: Дядюшка Ау Верблюд  
Дата: 18.01.21 07:19
Оценка:
Пример trait на PHP:

https://www.hashbangcode.com/article/traits-versus-inheritance-php

implementation встраивается в класс Welcome автоматически.

А в примерах на RUST:
https://riptutorial.com/rust/example/22917/inheritance-with-traits
вместо автоматической встройки implementation на мой взгляд получается обычный вручную implementation для интерфейса (который представлен в виде trait)?

На RUST можно также как на PHP сначала задавать implementation для trait, а не для класса и потом автоматически одной строчкой встраивать trait вместе с implementation в любой класс без описания персонального implementation для этого класса?
Отредактировано 18.01.2021 7:27 Дядюшка Ау . Предыдущая версия . Еще …
Отредактировано 18.01.2021 7:23 Дядюшка Ау . Предыдущая версия .
Re: Позволяет ли rust автоматически копировать implementation дл
От: Дядюшка Ау Верблюд  
Дата: 18.01.21 07:34
Оценка:
Кажется, ответ здесь:

https://riptutorial.com/rust/example/20518/default-methods

т.е. получается, что в примере на PHP как бы рассматриваются только default implementation в терминологии RUST.
Re[2]: Позволяет ли rust автоматически копировать implementation дл
От: FR  
Дата: 18.01.21 08:05
Оценка:
Здравствуйте, Дядюшка Ау, Вы писали:

ДА>Кажется, ответ здесь:


ДА>https://riptutorial.com/rust/example/20518/default-methods


ДА>т.е. получается, что в примере на PHP как бы рассматриваются только default implementation в терминологии RUST.


Не совсем понятно тебе нужны миксины или просто возможность реализовать методы по умолчанию в trait?
Миксинов нет, кроме разве написания макроса, методы по умолчанию есть и активно используются.
А почему в tools тему завел?
Re[3]: Позволяет ли rust автоматически копировать implementa
От: Дядюшка Ау Верблюд  
Дата: 18.01.21 08:15
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>А почему в tools тему завел?


Нет раздела по RUST?

А обработку исключений в RUST никогда не добавят (потому что так задумано)?

Traits вместо inheritance — это еще терпимо, но без исключений совсем жесть
Отредактировано 18.01.2021 9:18 Дядюшка Ау . Предыдущая версия .
Re[4]: Позволяет ли rust автоматически копировать implementa
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 18.01.21 19:43
Оценка: +1
Здравствуйте, Дядюшка Ау, Вы писали:

ДА>А обработку исключений в RUST никогда не добавят


Боюсь что никогда.

ДА>(потому что так задумано)?


Насколько я слышал, пытались они добавить исключения в ранние версии Rust, но не нашли удачный способ совместить это с теми compile-time проверками, которые Rust предоставляет. И поэтому сказали "так даже лучше" и убрали исключения вообще. Оставив только паник для совсем уж неисправимых ошибок.

В любом случае, исключений нет даже в планах, приходится жить без них. Оператор "?" частично решает проблему и делает структуру кода очень похожей на обработку исключений — втыкаем "?" в конец каждой строки, где может возникнуть ошибка и в случае проблем весь метод прерывается и возвращает ошибку.
С уважением, Artem Korneev.
Re[5]: Позволяет ли rust автоматически копировать implementa
От: Дядюшка Ау Верблюд  
Дата: 19.01.21 11:12
Оценка:
А почему в случае многоуровневого наследования traits RUST требует для конечного struct прописывать impl для каждого trait из всей цепочки наследования trait?

Как добиться применения цепочки trait одной строчкой для всей цепочки?

trait TraitA {
fn method1 (&self)
{
println!("TraitA");
}
}

trait TraitB {
fn method2 (&self)
{
println!("TraitB");
}
}

trait TraitC: TraitA + TraitB {}

struct TestStruct;

//impl TraitA for TestStruct {}
// impl TraitB for TestStruct {}
impl TraitC for TestStruct {}


fn main() {
println!("Hello, world!");

let T=TestStruct{};
T.method1();
T.method2();

}


error[E0277]: the trait bound `TestStruct: TraitB` is not satisfied
--> src/main.rs:21:6
|
15 | trait TraitC: TraitA + TraitB {}
| ------ required by this bound in `TraitC`
...
21 | impl TraitC for TestStruct {}
| ^^^^^^ the trait `TraitB` is not implemented for `TestStruct`


Такой способ:

https://stackoverflow.com/questions/47965967/subclassing-traits-in-rust

совсем не радует
Отредактировано 19.01.2021 12:41 Дядюшка Ау . Предыдущая версия .
Re[6]: Позволяет ли rust автоматически копировать implementa
От: Дядюшка Ау Верблюд  
Дата: 19.01.21 11:14
Оценка:
А почему бы не сделать языковый раздел для RUST?
Re[7]: Позволяет ли rust автоматически копировать implementa
От: Дядюшка Ау Верблюд  
Дата: 19.01.21 12:50
Оценка: 2 (1) +1
Забавно, оказывается, можно так:

trait TraitC: TraitA + TraitB {}
impl<T: TraitC> TraitA for T {}
impl<T: TraitC> TraitB for T {}


а потом уже нормально работает:

struct TestStruct;
impl TraitC for TestStruct {}


Т.е. нужно прописывать явно хотя бы через generic, ну чтоже, хотя бы так, это уже терпимо по сравнению с впечатываением всей иерархии наследования для каждой конструкции struct.

Других более лаконичных вариантов нет?

Чудной язык RUST, но мне пока нравится.

IMHO он подходит для того, чтобы часть высокопроизводительных нагруженных фрагментов выносить из кода DotNet в библиотеки и микросервисы RUST, и чтобы не связываться с гошечкой.
Отредактировано 19.01.2021 12:55 Дядюшка Ау . Предыдущая версия . Еще …
Отредактировано 19.01.2021 12:54 Дядюшка Ау . Предыдущая версия .
Отредактировано 19.01.2021 12:52 Дядюшка Ау . Предыдущая версия .
Re[8]: Позволяет ли rust автоматически копировать implementa
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 19.01.21 20:06
Оценка: +1
Здравствуйте, Дядюшка Ау, Вы писали:

ДА>А почему бы не сделать языковый раздел для RUST?


Люди не проявляли интереса. Боюсь, тут не так много Rust-программеров чтоб такой форум был живым.

ДА>Забавно, оказывается, можно так:


Hint: на RSDN есть маркер разметки "[ rust ]" (пробелы убрать), который сохраняет форматирование кода и делает подсветку Rust-синтаксиса. Для неподдерживаемых языков можно использовать "[ code ]", там будет сохранено форматирование. А с тэгом "[ q ]" код сложно читать, всё форматирование съезжает.

ДА>trait TraitC: TraitA + TraitB {}

ДА>impl<T: TraitC> TraitA for T {}
ДА>impl<T: TraitC> TraitB for T {}

Можно. Но лучше вот так:

trait TraitC: TraitA + TraitB {}
impl<T: TraitA + TraitB> TraitA for T {}
impl<T: TraitA + TraitB> TraitB for T {}


Тогда для любого нового типа, который "наследует" TraitA и TraitB вам не придётся это указывать.
Вообще, Rust не объектно-ориентированный и мне поначалу очень мешало то, что он похож на ООП язык. Так, например, я тоже пытался играться с вот эти множественным "наследованием" трейтов, когда мне нужно было написать свою "фабрику" объектов. Метод должен был возвращать dyn TraitC (если брать аналогию с вашим примером), а потом нужно было передать это туда, где ожидается dyn TraitA. Вся логика говорила мне, что это должно работать, ибо TraitC поддерживает всё то же самое, что TraitA и даже больше. Но вот нет, так нельзя. Нельзя передать dyn TraitC туда, где ожидается dyn TraitA.

ДА>IMHO он подходит для того, чтобы часть высокопроизводительных нагруженных фрагментов выносить из кода DotNet в библиотеки и микросервисы RUST, и чтобы не связываться с гошечкой.


Rust, по сравнению с "гошечкой", язык очень сложный.
Я бы не стал сходу заменять им всё то, что у вас планировалось писать на Go. Rust гораздо ближе к С++, и вот если у вас там Go не тянет или не подходит и уже назревает переписывание на С++, то вот тогда я бы предложил Rust.

Хотя, если у вас там dotnet что-то не тянет, то может быть уже и пора. Но прежде чем заниматься этим, замеряйте производительность и пересмотрите архитектуру сервисов, чтобы понять, где именно производительность проседает и убедиться, что ваши проблемы именно из-за производительности дотнета. Очень часто бывает, что проблемы в алгоритмах и структурах данных, а вовсе не в языке или платформе.
С уважением, Artem Korneev.
Re[9]: Позволяет ли rust автоматически копировать implementa
От: Дядюшка Ау Верблюд  
Дата: 20.01.21 14:04
Оценка: 4 (2)
Здравствуйте, Artem Korneev, Вы писали:

AK>Rust, по сравнению с "гошечкой", язык очень сложный.

Мне RUST нравится just for fun, так же интересно его изучать, как я изучал C++ еще в старших классах школы в 1995 году.
У меня сохранилось даже несколько библиотек на C++, написанные мной, в те далекие годы тоже just for fun, в т.ч. строковая библиотека, напоминающия работу с динамическими строками в Cliper CA 5.01, который я тоже неплохо знал в те года, даже умудрился поработать на заводе летом по программированию промышленной ERP Stalker.
Сложным RUST мне не кажется, просто необычным, конструкции читаются легче, чем трехэтажные выкрутасы на современном C++.

А вообще я любитель высокоуровневых языков типа VB.NET и C#, на C++ никогда не писал ничего на заказ, кроме как для развлечения.
IMHO managed код сравнимого качества разрабатывать на порядок проще и быстрее, что для коммерческой разработки офисных приложений намного важнее.
Математикой, 3D, ядрами и т.п. и другими специфичными для сишечки предметными областями я никогда не занимался.
Кодить обычный офисный GUI даже типа QT на сишке — имхо дичь дичайшая, доступная только дармоедам с монопольным притоком денег или из бездонного горшочка.

RUST мог бы быть полезен для избавления от лагов garbage collection, которые теоретически могут случаться даже на GO.

AK>Я бы не стал сходу заменять им всё то, что у вас планировалось писать на Go. Rust гораздо ближе к С++, и вот если у вас там Go не тянет или не подходит и уже назревает переписывание на С++, то вот тогда я бы предложил Rust.


GO мне просто неприятен своей философией ограниченности и патогонности, как бы копай глубже — бросай дальше, он не для творчества, GO для узконишевых задач типа индусокодинга с легкой заменой исполнителей коммуникационно облачных микросервисов на потоке в корпорациях.

А RUST — это полет фантазии, он интересный, выразительный, многословный такой же как VB.NET.
Жаль, что нет наследования и исключений, которыми пожертвовали в пользу семантического анализатора для требования от программиста сверхнадежного кода еще на этапе компиляции.

AK>Хотя, если у вас там dotnet что-то не тянет, то может быть уже и пора. Но прежде чем заниматься этим, замеряйте производительность и пересмотрите архитектуру сервисов, чтобы понять, где именно производительность проседает и убедиться, что ваши проблемы именно из-за производительности дотнета. Очень часто бывает, что проблемы в алгоритмах и структурах данных, а вовсе не в языке или платформе.


Пока мне всегда хватало DotNet, но я стал интересоваться программированием микроконтроллеров на RTOS и сборкой части очень маленьких легковесных Docker контейнеров с минимальным количеством пакетов Alpine, где RUST может быть интереснее DotNet.

Конечно не стоит писать на относительно более низкоуровневом RUST то, что можно написать на C# и оно будет работать приемлемо, кроме того не за горами AOT Native для DotNet, который пока в тестовом состоянии. Т.е. собирать Docker контейнеры без полного DotNet framework наверно тоже будет можно уже в ближайшем будущем даже официально.
Отредактировано 20.01.2021 14:34 Дядюшка Ау . Предыдущая версия . Еще …
Отредактировано 20.01.2021 14:33 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:32 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:32 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:30 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:29 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:24 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:21 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:17 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:16 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:15 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:13 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:10 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:08 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:08 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:07 Дядюшка Ау . Предыдущая версия .
Отредактировано 20.01.2021 14:05 Дядюшка Ау . Предыдущая версия .
Re[7]: Позволяет ли rust автоматически копировать implementa
От: FR  
Дата: 23.01.21 08:21
Оценка: +1
Здравствуйте, Дядюшка Ау, Вы писали:

ДА>А почему бы не сделать языковый раздел для RUST?


Для того же Go недавно сделали, но насколько помню там сразу потребовали чтобы был модератор для раздела, так что можешь и поговорить с модераторами rsdn если конечно готов взять эту ношу на себя.
Re[4]: Позволяет ли rust автоматически копировать implementa
От: vsb Казахстан  
Дата: 23.01.21 08:49
Оценка:
Здравствуйте, Дядюшка Ау, Вы писали:

ДА>А обработку исключений в RUST никогда не добавят (потому что так задумано)?


Исключения в Rust называются panic. Но стандартная библиотека и другие популярные библиотеки подавляющее большинство ошибок возвращают по-другому, поэтому если хочется исключений, придётся писать обёртки для всего.
Re[5]: Позволяет ли rust автоматически копировать implementa
От: FR  
Дата: 23.01.21 09:06
Оценка:
Здравствуйте, vsb, Вы писали:

ДА>>А обработку исключений в RUST никогда не добавят (потому что так задумано)?


vsb>Исключения в Rust называются panic.


Паника все-таки не исключение, для обработки ошибок практически непригодна, кроме самых критических когда нужно просто завершать приложение или поток, так как ничего уже сделать не можем.
Re[8]: Позволяет ли rust автоматически копировать implementa
От: Дядюшка Ау Верблюд  
Дата: 24.01.21 08:03
Оценка:
Здравствуйте, FR, Вы писали:

FR>Для того же Go недавно сделали, но насколько помню там сразу потребовали чтобы был модератор для раздела, так что можешь и поговорить с модераторами rsdn если конечно готов взять эту ношу на себя.


Слишком большая ответственность, нет свободного времени на это.
Re[9]: Позволяет ли rust автоматически копировать implementa
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 25.01.21 02:22
Оценка: +1
Здравствуйте, Дядюшка Ау, Вы писали:

ДА>Слишком большая ответственность, нет свободного времени на это.


Да и мало здесь уже публики для этого. Старпёры отправились бухтеть в "политику", а новые пользователи здесь редко появляются.
Похоже, что русскоязычные сообщества программистов ушли в сторону "Хабра" и всяких каналов в Телеграме.

Я могу порекомендовать два места для общения о языке Rust, но они англоязычные:

https://www.reddit.com/r/learnrust/
https://www.reddit.com/r/rust/

Там немного портят картину какие-то постоянные анонсы и новости, но в целом там всё в основном по делу — людей много, толковых программеров, которые могут подсказать решение, хватает.
С уважением, Artem Korneev.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.