Alexander
У меня уже вырисовывается вопрос, почему в этой ситуации работает .clone()?
Alexander
impl<T: ?Sized> Clone for Arc<T> { fn clone(&self) -> Arc<T> {
Vladimir
а че б не работать?
Маjко
Не понятно почему для компилера UFCS семантически не равноценен вызову метода через точку
Alexander
а че б не работать?
Типы разные. Где описано преобразование типа?
Vladimir
ну через точку же deref coercion. например так работает app_channel: Some(Arc::clone(&(app_channel as Arc<AppChannel + Send + Sync>)) ) или так Some(Arc::clone(&app_channel) as Arc<AppChannel + Send + Sync>)
Vladimir
а еще лучше при создании явно указать
Vladimir
let app_channel: Arc<AppChannel + Send + Sync> = Arc::new(ac);
Alexander
Очень интересно, почему он тогда не хочет со ссылкой преобразовывать и ругается на непримитивный тип?..
Vladimir
он же написал
Vladimir
что as работает только для примитивных типов
Alexander
Arc<T> - это примитивный?
Vladimir
имея ввиду что нету правил для &Arc<T> -> &Arc<U>
Alexander
Вот. Вопрос, где все эти правила прописаны.
Vladimir
в растбуке
Alexander
Растбук - не исходники стандартной библиотеки. Или это просто магия компилятора?
Vladimir
https://doc.rust-lang.org/book/first-edition/casting-between-types.html где-то здесь
Vladimir
as это магия компилятора
Vladimir
для смарт принтеров есть https://doc.rust-lang.org/std/ops/trait.CoerceUnsized.html
Vladimir
который позволяет юзать часть магии для либ
Anton
Кстать
Anton
посоны
Anton
вдруг кто в теме
Anton
кто знает хорошие гайдлайны и тд по opengl?
Anton
как рисовать в нем, понимание принципов работы и тд?
Anton
Чтобы потом уже можно было чтото свое фигачить в rust
Filipp
я учил по https://open.gl/
Anton
интересная для меня тема академически на будущее)
Filipp
вроде норм
Kerrigan
читай любой туториал по нему
Anton
читай любой туториал по нему
Да вроде пытался, основу вроде понял, виды шефдеров, обработки
Kerrigan
только код инициализации отличается
Anton
но ничего рисовать, понимать как делать слои и тд так и не врубился
Anton
я учил по https://open.gl/
Воу, вроде норм
Anton
спасибо
Kerrigan
какие ещё слои?
Filipp
теперь мой вопрос: как в сейф-расте сделать, чтобы структура ссылалась на саму себя?
Filipp
Struct SelfRef {s: Option<Rc<SelfRef>>}
Filipp
или че-нить такое
Filipp
или в сейф расте это никак?
Filipp
продолжай
Anton
какие ещё слои?
хочу научится делать отрисованные opengl слои, с плюшками
Anton
как в clutter например
Kerrigan
ты видимо это имел в виду https://www.khronos.org/opengl/wiki/Blending
Vladimir
продолжай
ну ты сделал правильно
Vladimir
че еще продолжать х)
Anton
и чтобы мог использовать нормально тот же lyon
Anton
который тоже на opengl
Kerrigan
потому что никаких слоев нет
Filipp
так теперь самое интересное - создать экземпляр
Anton
потому что никаких слоев нет
само собой, я скорее о том чтобы сделать обработку частей с растеризацией и последующим композитингом)
Vladimir
ок, тогда у тебя пропущен рефцелл
Vladimir
х)
Filipp
продолжай
Filipp
рефцелл внутри рефкаунтера или снаружи?
Filipp
начнем с простого
Anton
читай любой туториал по нему
не любой, а где работа с VBO, описывается изначально
Filipp
кажется фундаментальное ограничение в том, что после копирования рефкаунтера его не за борроуить мутабельно
Kerrigan
не любой, а где работа с VBO, описывается изначально
причём тут вбо, это всего лишь оптимизация
Vladimir
RefCell обычно внутри
Filipp
а снаружи бутылка
Kerrigan
к слову на мобильных устройствах тебя никакие гайдлайны не спасут
Kerrigan
вендоры косячат как только могут
Vladimir
а снаружи бутылка
https://play.rust-lang.org/?gist=0c74ba2dd6e508658ca526fbdbcc3373&version=stable
Filipp
блин работает
Vladimir
а чеб не работало
Vladimir
примерно в таким в своё время заставили выкинуть Мемори лик из понятия "безопасная работа с памятью"
Vladimir
в расте
Filipp
https://play.rust-lang.org/?gist=26f0e71e86f6e04a96163d351a7f155f&version=stable еее
Vladimir
и вместе с этим скопед треды
Alexander
Всё это интересно... "Casting between types" - ничего похожего нет. "Unsized types" и "Deref coertions" - тоже. "Trait objects" рассказывает про &Type as &Trait, &mut Type as &mut Trait и Box<Type> as Box<Trait>. И дальше упоминает "e.g. using &x as an argument to a function that takes &Foo". Но всё это не раскрывает почему Arc<Type> as Arc<Trait> работает, а &Arc - уже нет, хотя self - это именно &Arc в данном случае. Ок, это конечно всё придётся запомнить, но что-то существенно важное осталось за кадром.
Anton
причём тут вбо, это всего лишь оптимизация
Давно это было, какие то примитивные техники рисования помечены как deprected, лучше сразу привыкнуть лепить обект, а потом только отрисовывать его
Vladimir
А вот про селф не понял
Vladimir
там идет deref coercion