Vladimir
Стоит помнить, что utf-8 по своей сути может содержать внутри себя 0.
Berkus
Не, не может
Berkus
պլհկ
fn main() { let bytes = vec![0,b'a',b'b']; println!("string is '{}'", String::from_utf8(bytes).unwrap()); }
Berkus
Но это не сишная строка в utf8, это просто последовательность байт
Berkus
То есть это может быть утф последовательностью - там нулевой байт имеет обычное значение, но это не верная сишная строка - там нулевой байт имеет специальное значение
Vladimir
Да, в этом и дело, я тебе говорю что utf-8 может содержать 0, а не сишная строка. И если ты захочешь эту строку записать в сишную, то ты получишь невалидную сишную строку
պլհկ
fn main() { let bytes = vec![b'a',b'b',0,b'c']; println!("string is '{}'", String::from_utf8(bytes).unwrap()); }
Vladimir
Тогда тебе не о чем беспокоиться
Vladimir
Ну кроме того, что те кто эту строку писали, могли писать её в ASCII, что тоже может содержать невалидную utf-8
պլհկ
ascii подмножество utf-8
Vladimir
Vladimir
Или ANSI, Windows-1251 всё что основывается на ASCII но расширяя его до 1 байта
Berkus
Короче, семибитное там.
Berkus
Я в кодировках норм разбираюсь, справлюсь уж.
Anonymous
ребят, а какая директория будет ./ если использовать cargo run?
Vladimir
@rmnff Текущая. А если серьезно, перефразируй.
Anonymous
/project/target/debug?
Anonymous
или /project?
Anonymous
:*
Vladimir
зис
но я могу запустить cargo и из /project/target/debug ➜ project git:(vagga_test) ✗ cd target ➜ target git:(vagga_test) ✗ cd debug ➜ debug git:(vagga_test) ✗ cargo build Compiling hex v0.2.0
Alex
создай тестовый проект с Path::new(".") и экспериментируй
Anton
Дратути посоны
Anton
нужна подсказка
Anton
https://gist.github.com/friktor/b53a32baa68be6b18b7f877a128d0e61
Anton
Короче, надо както в колбэк пропихнуть page из итератора, но я чота туплю :(
Anton
чо делать
Anton
ругается борроу чекер
Anton
тоесть я какбы понимаю, что типо как вообще передать этот параметр в постоянный колбэк ибо он сможет какбы получать доступ к несуществующему куску использованной памяти
Sherzod
ну ты и так ссылку получил
Anton
но надо пропихать както, прям оч
Sherzod
отпрявь копию
Oleg
но надо пропихать както, прям оч
Клонировать строку? Потому что реально не доживет page не вызова коллбека.
Anton
клон тоже не пашет, ибо тогда получится что неясно когда ее клонировать и куда
Sherzod
почему не ясно?
Anton
в идеале бы инициализировать колбэк с биндом выделенного под него клона аргумента
Anton
но как такое захуячить хуй знает
Sherzod
let page_copy = page.clone()
Oleg
let page = page.clone(); element.connect_toggled(move |event| { let is_active = event.get_active(); println!("toggle to {}", &is_active, &page); });
Oleg
Должно сработать, но проверить не могу
Anton
а да
Anton
сработало
Anton
спасибо
Anton
чот после бессонной ночи эту фигню делал
Anton
и чот знаю что чтото простое и очевидное
Anton
а нихуя не вдуплю
Anton
Так а теперь резко еще один жестокий тупняк, и нужен саппорт: element.connect_toggled(move |event| { let is_active = event.get_active(); if is_active { let page_query = format!("page_{}", &current_page); self.go_to_page(&page_query); } }); В этот раз проблемы также с временем жизни
Anton
святые отцы, можете спасти?
Anton
Как из колбэка позвонить в метод на уровень выше с его контекстом
Anton
И снова разобрался
Anton
и снова владения
Anton
...
Anonymous
Добрый день.
Anonymous
Это пример из мануала: let y: &i32; { let x = 5; y = &x; } println!("{}", y); Причина фейла здесь именно в том, что умирает x?
Sergey
Да
Anonymous
О, а такой код тоже фейлится: let y: &i32; let x = 5; y = &x; println!("{}", y); В этом есть практический смысл, или это просто следствие такой строгости компилятора?
Safort
Так "y" же иммутабельна.
Anonymous
Нене, я читал use after free. И про это там написано. Мой вопрос уточняющий.
Anonymous
Неа.
Anonymous
Я её объявил, потом инициализировал.
Anonymous
Там-то всё норм.
Anonymous
Ошибка та же самая, что и в предыдущем примере.
Anonymous
Если поменять местами 2 и 3 строку в последнем примере, то всё ок.
պլհկ
= note: values in a scope are dropped in the opposite order they are created
պլհկ
там же написано
Anonymous
Де. Я читал. =)
Anonymous
Но ведь связывание x не освобождается в момент использования y? То, что y существуете дольше x — это ясно. Но этот способ контроля значения слишком грубый, выглядит, как недоработка, или я чего-то не понял, и x действительно уже не существует, когда мы обращаемся к y.
Anonymous
Вот, в чём моё непонимание.
Anonymous
Просто хочу знать, почему так.
Anonymous
Или равенство времени жизни — это просто конвеншн, который намеренно так строг, чтобы упростить контроль качества кода?
պլհկ
х не существует когда дропается y
պլհկ
взятие ссылки от x не продляет время жизни x
պլհկ
выглядит это логично push y push x ... pop x pop y <- huston, we have a problem
Anonymous
А, т.е. работоспособность ссылок важна компилятору даже в тот момент, когда определённый код отработал?