Восьмая лекция курса «Программирование на Rust» (весна 2019). Преподаватель - Алексей Александрович Кладов. Страница лекции на сайте CSC: bit.ly/2FSf3qu Ссылка на материалы: github.com/matklad/rust-course Все лекции курса: bit.ly/2QfWama
Правильный ответ на вопрос «зачем нужны и memcpy, и memmove» - одного в современном мире достаточно, более того, на моей машине они оба диспатчатся в __memmove_avx_unaligned_erms. Современные реализации того и другого настолько громоздки, что от ифика про то, кто в памяти лежит раньше, не меняется решительно ничего.
Да, split_at_mut через unsafe реализован, но исходя из сигнатура функции &mut -> (&mut, &mut) компилятор понимает, так же, как ки с полями структур, что, пока живы ссылки на подслайсы, ссылка на весь слайс недоступна.
@@ruslanaliyev3765 не факт: if crayfish.whistles_on_mountain() { return x } else { return y }; Тут скорее решение в том, что скорее всего возвращается что-то одно и чтобы не ломать валидный код придумано так, что лучше расставь явно лайфтаймы как тебе нужно. Иначе второй параметр должен будет жить слишком мало, хотя это и не нужно
24:00 - 25:00 - вот эта тема про reborowwing точно работает не так, как объясняется. Я не знаю как оно на самом деле работает, но точно не так. Вот такой код совершенно валиден: fn foo(x: &mut i32) { ...} let mut x = 32; let r1 : &mut i32 = &x; let r2 : &mut i32 = &x; let r3 : &mut i32 = &x; foo(r1); foo(r2); foo(r3); Но вот например что-то такое не скомпилируется: bar(r1, r2)
Да вроде первый пример не компилируется? play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=63befa0eabdeaf40ebf13ba4a7ef2018 `&T` ссылки Copy, `&mut T` нет
Этот код не компилируется. Нельзя из &x получить &mut x. Даже если исправить на &mut x, всё равно не скомпилируется: cannot borrow `x` as mutable more than once at a time