Anton
по поводу остального думаю надо все же с тем чуваком посоветоваться
Kerrigan
а навигацию пришлось передирать из геймдева
Anton
плюс как минимум нужно у него узнать
Anton
как работает вебрендер
Anton
а то у меня лишь сборище догадок из разряда "ну вроде бы моя догадка работает значит архитектура как я думал"
Anton
но как реально там устроено, и какой жизненный цикл банально на верхнем уровне нихуя не знаю
Anton
Подскажите, как через unsafe получить две мутабельных ссылки на один объект
Anton
А то у меня тут вопрос есть
Kerrigan
😑
Ilya
Получение мутабельной ссылки из немутабльной если что - UB
Ilya
Не надо так делать
Anton
Мне надо для вопроса
Kerrigan
лучше вопрос давай
Anton
Ладно, вопрос:
Я правильно понимаю, что вот этот код абсолютно безопасен всегда, просто компилятор не способен отследить такое?
https://play.rust-lang.org/?gist=00b1a11ffbcf79e00d2c29614c423bd0&version=stable
Anton
Anton
впрочем для меня это ответ на любой вопрос с ссылками
Ilya
Данный код безопасен
Ilya
Но прямо вот данный-данный
Ilya
А если ты чуть усложнишь render или State - он таковым быть перестанет
Anton
А почему?
Anton
По-моему, тут по телу функции видно, что изменяться state может только в вызове хэндлера
Anton
А во всех остальных местах его можно читать
Cat
дотошности ради:
тогда уж render() должен иметь dep injection куда рисовать, раз уж печатаете в виде текста, а не графики
Anton
Да это я для примера просто)
Ilya
Ммм, ну хотя пожалуй ты прав
Ilya
Сейчас приходится передавать &mut State в замыкание
Ilya
потому что компилятор не видит этого. да
Anton
Тогда следующий вопрос: можно ли в принципе написать компилятор, который будет это понимать?
Cat
а объясните нюфагу, в чём проблема в данном примере?..
Cat
что-то про ссылки и мутабельность, но я не понял
Ilya
Ох, я слишком глуп чтобы такое обсуждать, но возможно NLL спасают ситуацию?
❖ Михаил Лещев
Кто знает когда норм IDE подъедит
Cat
Cat
так что...
Ilya
А мутабельная ссылка появляется из-за замыкания (closure) event_handler
Cat
да, но свобсвтенно в этом и суть замыкания, не?..
Ilya
Это замыкание, гм, "замыкает" в себе &mut State и таким образом лочит все остальные ссылки
Ilya
Ну да
Ilya
По сути то да
Anton
и да ребят
Anton
Просто, насколько я понимаю, мутабельные ссылки сейчас слишком жёстко ограничивают доступ к переменным. Хотя явно изменения происходят только в определённых точках. Например когда мы передаём переменную в другую функцию по мутабельной ссылке
Anton
те кто тут движок игровой пишет
Anton
или в сфере
Anton
вы кидайте новости всякие
Anton
и интересности)
Anton
оказывается тут есть шарящие во многом люди
Anton
но никто ничего не пишет
Ilya
мммм... Пожалуй тут надо придумывать не замыкания, а другую концепцию. Которая будет по-другому действовать
Anton
Я сейчас попроще пример приведу
Ilya
Я ухожу в запой после чтения его
Ilya
Кстати сказать, кто из Питера, мы тут в это воскресенье собираемся на неформальную сходку
Ilya
Никаких докладов, просто общение в офисе JetBrains
Ilya
В 13:00
Ilya
Запиньте что-ли сообщение)
❖ Михаил Лещев
О движ
Cat
я всё равно не понял, скоп вызова же немного разный,
очеведни неверным было бы например такое:
let mut v = vec![ ... ];
let clozure = | a: i32 | { v.push(a) };
fo item in v {
println!("v: {:?}", v);
clozure(5);
}
❖ Михаил Лещев
Я типо новенький всем привет
Cat
Cat
Anton
Anton
Тут две мутабельных ссылки
Cat
а-ля gravity + broken collisions
Cat
например
Anton
Точнее нет
Anton
Cat
тип того
Anton
В моём примере render отдаёт её к моменту вызова handler
Anton
мы позволяем тебе расслабится и насладится алкоголем
Anton
а то мозг выносим и тд
Anton
Вот пример проще:
https://play.rust-lang.org/?gist=55aeefba33f73aac02f8361fb22a095c&version=stable
Ilya
да я шучу, я не пью. Потому наверное мне так сложно жить
Anton
Он же на самом деле тоже полностью безопасен, не?
Anton
Anton
ну или курни
Anton
ты же раст разработчик
Ilya