Anton
Это по сути единственная разница с текущим анализом
Anton
Сейчас раст весь скоуп считает залоченным, а я предлагаю более гранулярно его рассматривать
Cat
Cat
или я опять не прав?
Anton
Замыкание держит мутабельную ссылку на state, но по факту меняет оно его только при вызове
Anton
Значит между вызовами мы можем читать эти значения, не боясь, что их поменяют в этот момент
Cat
почему бы не https://play.rust-lang.org/?gist=0e03346e3ab9837bd1891a8707136c95&version=stable ?
Anton
Причём для чтения мы каждый раз новую ссылку получаем, читаем и отпускаем её
Anton
Я хочу это для генераторов применить
Anton
Там вместо mutate будет дёргаться resume
Anton
Cat
да, для генераторов возможно не выйдет
Anton
Ну то есть это можно через unsafe сделать, но было бы круто, если бы и так можно было
Anton
Хотя там с генераторами ещё проблема с self-borrowing
Anton
Но это отдельная тема
Anton
Так не надо следить. Оно безопасно же)
Cuno
где безопасно
Anton
Ну то есть да, там можно будет накосячить с кодом
Cuno
мы о чем целый час спорили
Anton
Поэтому я и хочу, чтобы такое в сейфе компилировалось
Cuno
Заменяешь ты state на вектор, в event_handler пушишь туда что-то, а юзер берет и сохраняет референс на первый элемент. Всё, приехали.
Anton
Если он держит референс на первый элемент, он не сможет вызвать mutate
Anton
Лайфтаймы будут пересекаться
Anton
Либо ему надо будет отпустить ссылку перед вызовом
Cat
ну т.е. задача состоит в том, чтобы сделать возможным такое:
let mut a;
mutate(a);
// do as many immutable borrowing as you want
mutate(a)
?
Anton
Cuno
точнее, наверное, вообще сырой указтель юзать
Anton
Не знаю, я unsafe не ковырял особо
Anton
Идея-то в том, что это и в сейфе должно работать
Cuno
Ух. Не должно.
Anton
Сейчас, понятное дело, такое не будет компилироваться
Anton
Ну вот вы мне пока не доказали обратное)
Cat
долбаный алиасинг, зачем ево придумали
Cat
выпилить!
Anton
Почему невозможно? Сейчас компилятор же отслеживает это. И он это делает в пределах одной функции
Cuno
Cat
только многосложные вызовы функций, только харкогр
Anton
Cuno
компилятор только shared xor mutable поддерживает
Anton
Да, это правило не меняется
Anton
В сейфном расте компилятор же пруфает как раз
Cuno
Пруфает программист. Компилятор лишь может сказать, что программист на каком-то моменте ошибся.
Cuno
Если бы компилятор был на это способен
Cat
типо мол новая фича
Cuno
разве нужны ли были все эти мутабельные и иммутабельные ссылки
Cat
пойдёмте составлять RFC
Anton
Cat
дада
Cat
а-ля
mutate(a);
{
// алиасинг и прочее
}
mutate(a)
Anton
mutate(a);
{
// immutable алиасинг
}
mutate(a)
Cat
ладно, хз, пора сворачивать себя обратно в мешок
Anton
Я тоже спать уже пойду
Anton
Обдумаю ещё это, напишу какую-нибудь статейку на английском
Anton
С картинками
Anton
На реддит можно будет запостить)
Anton
Кек, началось с обсуждения как анимации реализовать в ивентлупе, а закончилось еще одним длинным обсуждением)
Anton
Надо поменьше оформить и больше по теме вбрасывать)
Anton
Я к концу недели еще ui/ux дизайн компонентов с примерами анимаций накину как будет выглядеть гуи мои по умолчанию
Anton
Зацените
Anonymous
столько прочитал про рендеринг анимации, что захотелось что-то нарендерить, только все либы растерялись, какая там самая простая?
Cat
У всех либ есть фатальный недостаток
Anonymous
какой?
でゲソ
Этих либ ещё не существует
でゲソ
Глиум/ вебрендер и бинды к обычным либам типа гтк/кутэ/вхвиджетс
Anonymous
а те в свою очередь тоже к чему-то биндятся
Anonymous
глиум хорошая либа и туориал норм, но шейдеры... пойду дальше интерфейсы к бд писать
Loyd
А что с шейдерами не так?
Loyd
Там же на glsl пишешь, не?
Loyd
Или завезли уже какой-нибудь rlsl?
Anonymous
ага, в glsl еще въезжать, матрицы, векторная алгебра, вот это все
Anonymous
тапок, ты со всем этим добром тулкит пишешь?
պլհկ
Гуи тулкит на шейдерах поверх вебрендера
Loo
https://github.com/ah-/anne-key