Задать вопрос
Ответы пользователя по тегу Rust
  • Как задать переменной тип с данными в зависимости от условия?

    @historydev
    Mistkerl, drück den Knopf.
    if else должен возвращать один тип.
    - Ты не можешь указать динамический тип переменной user.

    Оборачивай свои структуры в перечисление:
    enum UserRes {
    Res(Res),
    User(User),
    ErrServ(ErrServ)
    }
    
    let user = if a == b { UserRes::Res(Res { / * ... */ }); } else { UserRes::User(User { /* ... */ }); };
    Ответ написан
    Комментировать
  • Ссылка на трейт-объект в статической переменной?

    @historydev
    Mistkerl, drück den Knopf.
    Я не могу просто взять и изменить поле memory_backend: &'a mut dyn MemoryBackend на


    Значит раздели модули на Sync / not Sync, реализуй одну структуру с Sync, а другую без.
    - Имя и api структуры будут одинаковыми, а модули разные.

    // crate::sync::cache;
    
    pub struct Cache<'a, T> {
        memory_backend: &'a mut dyn MemoryBackend + Send + Sync,
        phantom_data: core::marker::PhantomData<T>,
    }


    // crate::cache;
    
    pub struct Cache<'a, T> {
        memory_backend: &'a mut dyn MemoryBackend,
        phantom_data: core::marker::PhantomData<T>,
    }
    Ответ написан
    3 комментария
  • Как проверить збч на примере игральной кости, не ожидая миллиона лет?

    @historydev Автор вопроса
    Mistkerl, drück den Knopf.
    Ошибка была в коде, вот конечная функция для любых диапазонов:
    // law of large numbers
    pub fn lln(min: u32, max: u32, attempts: u32) -> f32 {
        let mut sum = 0;
        let mut rng = thread_rng();
    
        for _ in 0..attempts { sum += rng.gen_range(min..=max); }
    
        sum as f32 / attempts as f32
    }
    Ответ написан
    Комментировать
  • Хочу начать изучать Rust, стоит ли начинать с официальной книги?

    @historydev
    Mistkerl, drück den Knopf.
    Да, стоит, это великолепное издание проведёт тебя так гладко и приятно по языку, что после ты не захочешь смотреть на другие)

    Вдобавок многие популярные библиотеки пишут обучалки в формате Rust Book.
    Ответ написан
    3 комментария
  • По каким причинам тест может "падать" именно в github actions?

    @historydev
    Mistkerl, drück den Knopf.
    Попробуй собрать в виртуалке, предварительно подготовив окружение, возможно проблема в том что всё это запускается в виртуалке.
    Можно докер, vbox, qemu - что угодно.
    Ответ написан
    Комментировать
  • Различная конфигурация для пакетов в одном workspace?

    @historydev
    Mistkerl, drück den Knopf.
    https://doc.rust-lang.org/book/ch14-03-cargo-works...
    A workspace is a set of packages that share the same Cargo.lock and output directory.


    https://doc.rust-lang.org/cargo/commands/cargo-bui...
    cargo build -p kernel --target x86_64-unknown-none
    Ответ написан
    Комментировать
  • В чём проявляется зависимость c++ от железа и касается ли это Rust?

    @historydev
    Mistkerl, drück den Knopf.
    Java запускается в переносимой виртуальной машине которая уже умеет во все архитектуры, а на системных языка тебе нужно компилировать программу для конкретной архитектуры, например: x86, arm.

    Это не значит что тебе нужно для каждого процессора отдельно компилировать, это значит что тебе необходимо скомпилировать один раз для каждой архитектуры.

    Архитектура подразумевает публичный api который реализуется множеством процессоров.

    Не нужно сравнивать прикладные языки с системными.

    Единственный низкоуровневый язык - это язык ассемблера, все остальные, включая С - высокоуровневые языки.

    Разница лишь в области применения, никто не будет писать фронтенды на С, у каждого из инструментов есть проблема, которую он решает и область применения в которой эта проблема актуальна.
    Ответ написан
    Комментировать
  • Как передать индекс u8 в pow u32 метод?

    @historydev Автор вопроса
    Mistkerl, drück den Knopf.
    2 ошибки, перепутал порядок элементов в деструктуризации кортежа который возвращает enumerate и пытался привести из-за этого usize в u16, отсюда и ошибка #2:
    let curr_num: u16 = 2000;
        let mut num: u16 = 0;
        
        for (i, b) in curr_num.to_le_bytes().iter().enumerate() {
            num += (*b as u16) * 256u16.pow(i as u32);
        }
        
        println!("{num}");
    Ответ написан
    Комментировать