Anton
Это по сути единственная разница с текущим анализом
Anton
Сейчас раст весь скоуп считает залоченным, а я предлагаю более гранулярно его рассматривать
Cat
И это отдельные получения ссылок на каждой итерации
нет, с замыканиями не так работает жеж
Cat
или я опять не прав?
Anton
Замыкание держит мутабельную ссылку на state, но по факту меняет оно его только при вызове
Anton
Значит между вызовами мы можем читать эти значения, не боясь, что их поменяют в этот момент
Cat
почему бы не https://play.rust-lang.org/?gist=0e03346e3ab9837bd1891a8707136c95&version=stable ?
Anton
Причём для чтения мы каждый раз новую ссылку получаем, читаем и отпускаем её
Anton
Я хочу это для генераторов применить
Anton
Там вместо mutate будет дёргаться resume
Cat
да, для генераторов возможно не выйдет
Anton
Ну то есть это можно через unsafe сделать, но было бы круто, если бы и так можно было
Anton
Хотя там с генераторами ещё проблема с self-borrowing
Anton
Но это отдельная тема
Cuno
Ну то есть это можно через unsafe сделать, но было бы круто, если бы и так можно было
Ну вот сделаешь ты через unsafe. Напишешь в документации "следите за ссылками" и привет С++?
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) ?
Cuno
Если он держит референс на первый элемент, он не сможет вызвать mutate
Как ты через unsafe сделаешь да с мутабельной ссылкой? Тебе придется ее иммутабельной сделать, чтобы борроучекер удовлетворить.
Cuno
точнее, наверное, вообще сырой указтель юзать
Anton
Не знаю, я unsafe не ковырял особо
Anton
Идея-то в том, что это и в сейфе должно работать
Cuno
Ух. Не должно.
Anton
Сейчас, понятное дело, такое не будет компилироваться
Anton
Ну вот вы мне пока не доказали обратное)
Cuno
https://play.rust-lang.org/?gist=2fe5faac75c0b4773378cdc552098829&version=undefined
Яж тебе пример привел. Невозможно в общем случае отследить, что алиасинга нет. Вообще это вроде и без примеров очевидно.
Cat
долбаный алиасинг, зачем ево придумали
Cat
выпилить!
Anton
Почему невозможно? Сейчас компилятор же отслеживает это. И он это делает в пределах одной функции
Cat
только многосложные вызовы функций, только харкогр
Cuno
компилятор только shared xor mutable поддерживает
Anton
Да, это правило не меняется
Cuno
Я имею в виду не этот код, а вообще
И в общем случае тоже. Единственность ссылки пруфает программист, а не компилятор.
Anton
В сейфном расте компилятор же пруфает как раз
Cuno
Пруфает программист. Компилятор лишь может сказать, что программист на каком-то моменте ошибся.
Cuno
Если бы компилятор был на это способен
Cat
И в общем случае тоже. Единственность ссылки пруфает программист, а не компилятор.
насколько я понимаю, Антон хочет что бы компилятор разрешал между мутациями делать борровинг, но так, чтобы не было алиасинга наружу этого скоупа
Cat
типо мол новая фича
Cuno
разве нужны ли были все эти мутабельные и иммутабельные ссылки
Cat
пойдёмте составлять RFC
Cat
дада
Anton
пойдёмте составлять RFC
Ну вот я щас пособираю с вас возражения и пойду писать)
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
а те в свою очередь тоже к чему-то биндятся
Andrei
нужно с кем то хоть советоваться, а не с кем
на https://closedcircles.com/ в #gamedeff пасутся русскоговорящие ветераны индустрии
Anonymous
глиум хорошая либа и туориал норм, но шейдеры... пойду дальше интерфейсы к бд писать
Loyd
А что с шейдерами не так?
Loyd
Там же на glsl пишешь, не?
Loyd
Или завезли уже какой-нибудь rlsl?
Anonymous
ага, в glsl еще въезжать, матрицы, векторная алгебра, вот это все
Anonymous
тапок, ты со всем этим добром тулкит пишешь?
պլհկ
Гуи тулкит на шейдерах поверх вебрендера
Loo
https://github.com/ah-/anne-key