Loyd
Ну, например, как в сессионных типах
Loyd
https://github.com/Munksgaard/session-types/blob/master/src/lib.rs#L145
Loyd
Ну или вот. Send дуален Recv
Sergey
Sergey
Sergey
Sergey
Дока забавная
> There is one exception to implementing Into, and it's kind of esoteric.
Loyd
xd
Loyd
Сложно. Надо разбираться
Конечно, надо. Возможность делать сессионку это то отличие, которым можно тыкать в лицо хаскелистам
Loyd
Ибо линейные типы (#[must_use]) и аффинные (move-семантика)
Filipp
Из круга в овал кажется норм
Loyd
Ну, я уверен, что есть кейсы, когда from/into внутри нужно юзать. Но конкретно тут я бы смотрел на ситуацию шире: для чего это надо?
Сережа
я понял для чего From/Into, чтобы эмулировать наследование и иерархию классов
Loyd
Ну, круги и овалы, это либо рисование (конвертация не нужны), либо физический движок (тут вроде тоже)
Loyd
Сережа
держу марку
Loyd
маладца
Loyd
Ну, правильно, для конвертации
Loyd
Мой поинт в том, что внутри либы конвертацию всегда избегать надо
Michael
это, кмк. логично
Pavel
Мой поинт в том, что внутри либы конвертацию всегда избегать надо
ну к примеру.
кейс №1:
я пишу либу, которая должна рисовать графики. с одной стороны я хочу дать пользователю либы возможность оперировать на разных уровнях (от низкого - рисовать точки, линии, до высокого - в стиле, я хочу гистограмму, вот тебе данные вот такие, а вот тут поверх нарисуй среднюю по таким-то параметрам).
отсюда выходит что у либы будет несколько слоев логики, где в финале все должно превратиться в точки. На более высоких уровнях будут структуры описывающие детали гистограм, из размерности и т.п. но они в итоге должны быть преобразованы в более низкий уровень такой как вот такие точки такого цвета, а вот тут такого (при условии что мы в растр рисуем).
чем будет плохо тут преобразование структур юзая From/Into более высокого уровня в серию структур более низкого уровня такие как серия точек?
кейс №2
вот есть сторонняя либа, и автор этой либы не особо спроектировал (или наоборот так сделал специально) интерфейс и я не могу сделать println!("{:?}",x) потому что у него нет #[derive(Debug)] в его крейте. И это в общем-то порой доставляет неудобств с практической точки зрения.
Я это к тому что как пользователь либы, я бы ожидал что либа будет давать варианты сделать конвертацию в стандартные типы (если это применимо к тому что решает либа) или в какие-то структуры которые задуманы как публичный интерфейс либы для ее использования
Loyd
Кейс 2 это не "внутри либы", это как раз про взаимодействие с другими крейтами (std тоже "внешний"), об этом я писал, что это норм кейс для from/to
Loyd
Если говорить про первый кейс, то, во-первых, каждый слой должен быть в отдельном крейте, имхо
Pavel
Loyd
И тут правила конвертации как между крейтами
Loyd
Но даже в этом случае я сомневаюсь, что from лучше использовать, его тупо не хватит
Loyd
Дело в том, что чтобы сложную фигуру в примитивы перегнать, тебе как минимум параметр качества нужен
Loyd
Ну, скажем, сферу триангулировать хочешь
Loyd
Или огружность прямыми рисуешь
Loyd
Так что либо параметр качества, либо нижний уровень сам определяет (смотрит на размеры фигуры и полотна), но и в этом случае контекста не хватает
Pavel
твой кейс понял. в этом плане да, тут контекст играет немаловажную роль 🙂
Loyd
Я уже молчу о том, что маловероятно, что ты хочешь From<Circle>, скорее всего будет From<&Circle>
Loyd
Что чуть противоречит логике, сам понимаешь )
Pavel
ну да 🙂 это да
Pavel
данке за фидбек 🙂
Loo
“Why Rust is the future of robotics” https://medium.com/pollenrobotics/why-rust-is-the-future-of-robotics-81d7fb68fe37
Kerrigan
rustobotics
Sergey
Loyd
Нет
Loyd
Что правильно, кмк. Нехрен в кишки лезть
Sergey
а как тогда правильно решить тот кейс?
Sergey
хочу println! для внешнего типа
Vladimir
Sergey
а видимо придется сделать трейт
Sergey
хотелось иметь пачку элементов
и делать им format
Vladimir
Не понятно
Sergey
напишу позже кейс
Pavel
Заворачивай его в свою обёртку
так не получится. твоя обертка будет иметь дебаг, но то что она оборачивает - нет. потому прийдется писать мануальненько свой дебаг и принтить то что нужно
Tim
Tim
уупс, сорян)
Ivan
а если вот так: https://play.rust-lang.org/?gist=2f26da0bc06f7cc585c0a556cbadfb99&version=stable ?
Ivan
или я переусложнил и можно проще?
Ivan
в смысле чтобы не везде таскать обёртку для типа без std::fmt::Debug, а использовать её только для печати
Маjко
У кого-нибудль была такая херня?
cargo check просто повисает при сборке, загрузка проца низкая, памяти тоже еще навалом.
Loo
Loo
другим процессом каким нить
Sergey
у меня было такое
Sergey
когда в разных окнах терминала cargo build запустил
Маjко
Именно на сборке лочится
Маjко
Не на ожидании локфайла
Loo
ну дык он и Cargo.lock
Loo
лочит
Маjко
> не на ожидании локфайла
Loo
а. сорян. пропустил
Маjко
Другие процессы не запущены
Маjко
После cargo clean
Маjко
То же самое
Anton
в проессах нет?
Anton
кильни
Loo
@mersinvald у тебя не воркспейс
Loo
случаем?
Маjко
Нет
Маjко
Маjко
Перезапустил
Маjко
То же самое