Size: a a a

RU Rust GameDev — русскоговорящее сообщество

2020 April 07

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
а дальше всё как в тумане
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
😆
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
реф селлы эти ваши
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
на пару с рц
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Я бы на твоём месте просто начал что-нибудь писать.
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
Ну я и написал пока парсер джейсона
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
Но там не разгуляешься
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
Стопвотч я как раз тоже для него делаю
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
чтобы перф мерять
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
Там у меня парсер комбинаторы
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
с адовой рекурсией
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
обычными средствами какой-нибудь флеймграф показывает фигню
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
поэтому вместо бэктрейсов хочу именованные замеры производительности только там где интересно
источник

AK

Adam K in RU Rust GameDev — русскоговорящее сообщество
Виталий Медоваров
У меня идиотский вопрос, если я избавлюсь от метода репорт и сделаю эту же функциональность в дропе, гарантированно ли что мой стопвотч доживёт до самого конца скоупа?
use std::time::Instant;

pub struct StopWatch {
   associated_name: &'static str,
   time_started: Instant
}

impl StopWatch {
   pub fn start(associated_name: &'static str) -> Self {
       StopWatch {
           associated_name,
           time_started: Instant::now()
       }
   }
   pub fn report(&mut self) {
       println!("\"{}\"\t{}", self.associated_name, self.time_started.elapsed().as_nanos());
   }
}
Формальных гарантий на вызов drop'а вообще нету. На панике в некоторых случаях может произойти abort процесса. Ну или значение может утечь, что считается memory-safe поведением.
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
Это уже крайний случай опять же
источник

AK

Adam K in RU Rust GameDev — русскоговорящее сообщество
Но в большинстве нормальных ситуаций он вызывается в конце скоупа, да
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
замеры при панике я просто не буду за валидные считать
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
>Ну или значение может утечь
ну это если я его спецом мувнул во что-то со временем жизни 'static как я понимаю
источник

p

polunin.ai in RU Rust GameDev — русскоговорящее сообщество
Виталий Медоваров
У меня идиотский вопрос, если я избавлюсь от метода репорт и сделаю эту же функциональность в дропе, гарантированно ли что мой стопвотч доживёт до самого конца скоупа?
use std::time::Instant;

pub struct StopWatch {
   associated_name: &'static str,
   time_started: Instant
}

impl StopWatch {
   pub fn start(associated_name: &'static str) -> Self {
       StopWatch {
           associated_name,
           time_started: Instant::now()
       }
   }
   pub fn report(&mut self) {
       println!("\"{}\"\t{}", self.associated_name, self.time_started.elapsed().as_nanos());
   }
}
а зачем тебе функция report? O/o
источник

ВМ

Виталий Медоваров in RU Rust GameDev — русскоговорящее сообщество
ну вот чтобы вызывать её в конце скоупа, но если дроп это итак делает всегда в конце, то лучше сделать дроп вместо неё
источник