Berkus
Vladimir
Стоит помнить, что utf-8 по своей сути может содержать внутри себя 0.
ivan
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());
}
Berkus
Vladimir
Тогда тебе не о чем беспокоиться
Vladimir
Ну кроме того, что те кто эту строку писали, могли писать её в ASCII, что тоже может содержать невалидную utf-8
պլհկ
ascii подмножество utf-8
Vladimir
Berkus
Vladimir
Или ANSI, Windows-1251 всё что основывается на ASCII но расширяя его до 1 байта
Berkus
Короче, семибитное там.
Berkus
Я в кодировках норм разбираюсь, справлюсь уж.
Anonymous
ребят, а какая директория будет ./ если использовать cargo run?
Vladimir
@rmnff Текущая.
А если серьезно, перефразируй.
Судзумия
Anonymous
/project/target/debug?
Anonymous
или /project?
Tomato
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
отпрявь копию
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
А, т.е. работоспособность ссылок важна компилятору даже в тот момент, когда определённый код отработал?