Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
cargo build --release?pub fn new(file_path: &str) -> ModelПлохой, плохой код!&str правильнее передавать AsRef<Path>: см. std::fs::File::open. Некоторые пути непредставимы в валидном utf-8, коими являются все строки в Rust..unwrap(). Почитайте прекрасную статью об обработке ошибок в Rust: blog.burntsushi.net/rust-error-handling. Да, большая, но она раскладывает всё по полочкам.или использовать стандартный типаж std::num::ZeroЕщё есть стабильный std::default::Default. Но
Zero, конечно, по смыслу подходит больше.То же самое, в общем-то, справедливо и для обработки ошибокЕсли знаете язык — да. Но пока автор его только изучает, как по мне лучше сразу приучаться правильно. «Игрушечность» рендера наоборот только тому способствует: кода мало, соответственно, и переделывать тоже немного. Представьте, как в большом проекте искать и исправлять .unwrap(), написанные по старой привычке, исправлять возвращаемые значения функций и т.д.
Некоторые пути непредставимы в валидном utf-8, коими являются все строки в Rust.
Разве что только поиск информации, как сделать ту или иную штуку в расте осложняется тем, что язык быстро меняется. Подчас находишь какие-то ответы, пробуешь их, а они не работают, потому-что оказывается буквально несколько недель назад в 1.1 этот метод переименовали и т. п. Столкнулся с этим на примере метода from_str(), который удалили из Rust 1.1.Очень мило.
std::vector<int> face = model->face(i);std::vector<int> const& Model::face(int idx) const {
return faces_[idx];
}
...
auto const& face = model->face(i);
cepreu@cepreu-P5K:~/Загрузки/tinyrenderer-f6fecb7ad493264ecd15e230411bfb1cca539a12$ time ./a.out
real 0m1.463s
user 0m1.453s
sys 0m0.008s
face.push_back(-1);
Пишем свой упрощенный OpenGL на Rust — часть 2 (проволочный рендер)