unsafe — это всегда головная боль. Вот, скажем, есть у тебя &[u64] слайса. Сможешь без UB кастануть её в &[u8]?
Ладно, если всё ещё неясно, то давай совсем простой пример: struct Qwe(Option<usize>, Vec<i32>); fn new() -> Qwe { Qwe(Some(0), vec![5]) } fn read_x(stream: &mut Qwe, can...
У меня тут недавно вопрос такой встал, а я погуглил, но пока не нашёл, как его решить нормально, может тут кто-нибудь знает? Вот, скажем, есть бинарь на питоне, который юзеру ...
Так, посоны, я не понимаю, чего компилятор от меня хочет и как ему это дать. type mismatch in function arguments expected signature of `for<'r> fn(&str, &'r &str) -> _`rustc(...
Смотри. Чтобы дропнуть Arc, надо знать <T>. Чтобы замапить арк, надо в мапе сохранять тип. В итоге получится страшная структура типа struct MappedArc<T: ?Sized, U> { mapped...
Почему char - u32, а не [u8; 3], если юникод требует всего лишь 21 бит?
fn thrower(throw: bool) -> Result<(), ()> { #[cold] const fn exception() -> Result<(), ()> { Err(()) } if !throw { Ok(()) } else { exception() } } В чём принципи...
Ну то есть давай перепишем эту функцию на обычный растовый код из асинка: fn parse_line(socket: &TcpStream, cancel_flag: Cell<bool>) -> Result<String, Error> { let len = ...
И что? Хашбраун точно так же параметризуется хешбилдером, как и std мапа. Там вообще отличий нет кроме большего количества фич в хашбравне.
Есть кто-то, кто с атомиками хорошо знаком? Я пытаюсь выразить нечто вроде let s: &'static [u8] = &[0,0,0,2,1,1,0,0,0,3,1,1,1,0,0,0,2,1,1, ..]; let index = AtomicUsize::new(0...
А зачем тебе прямо в функции авейтить? Нельзя -> impl Future вернуть?
Сколько проходов по коду надо, чтобы найти все такие проблемы?
Трансмутнуть repr(u*) енам в u* можно же?
Они там планируют в новой версии async описывать. Но в расте нет default executor. И потом начнётся "а вот в книге 'programming rust' используют X, значит он дефолтный, да?" (...
Почему *const T всегда Copy, а #[derive(Copy, Clone)] struct Ptr<T: ?Sized>(usize, PhantomData<*const T>); только когда T: Copy?
Тебе нужен какой-нибудь struct SplitArc<T: ?Sized> { counters: *const [AtomicUsize; 2], data: *const T, }
Единственный вариант, когда такая штука не выстрелит — программа с одним тредом. Но асинк же редко с одним тредом, нет?
cargo expand, не?
RefCell видел?
Когда в расте появится возможность определять размер для &(mut) T, где T: !Sized ? Прямо сейчас ссылки на безразмерный тип константно захаркожены в качестве двух usize'ов.