Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
то есть риск, что после стабилизации нужно будет многое проверять на корректность работы или переписывать с учетом новых реалий.
но порог входа страшно высокий для понимания средств библиотек, помогающих справиться с жесткостью borrow checker'а, на уровне, достаточном для написания серьезного проекта.
И с модулями в недавнем обновлении опять что-то намутили, все руки не дойдут исправить мой проект, чтобы компилировался.
use modulename;, хотя ниже pub mod modulename;, что настойчиво рекомендуется всей существующей документацией.rustc --pretty=expanded crate_root.rs, то компилятор вам выдаст представление всей единицы компиляции со всеми модулями, так как он его видит. В этом представлении очень хорошо видно, как модули вкладываются друг в друга.use modulename::Type;
PS не знаю, как заинлайнить на хабре код в строчку :(Есть тег code: <code>use modulename;</code> станет
use modulename;.fn print_slice(items: &[&Show]) {
for item in items.iter() {
println!("{}", item);
}
}
print_slice(&[&1i, &2i, &"a"]);
Тк у раста 0 оверхед на типы, то я так понимаю этот код показывает чисто силу статического анализатора.
Show — это трейт, поэтому &Show — это т.н. fat pointer, структура из двух указателей: на сами данные и на таблицу виртуальных методов трейта. За счёт такого представления ссылки на объекты разных типов, реализующих один трейт, можно положить в один массив.fn print_slice<T: Show>(items: &[T]) не имеет оверхед на данные, а fn print_slice(items: &[&Show]) имеет, что в целом все объясняет.print_slice, а я сомневаюсь, что компилятор сейчас на такое способен, даже если в конкретном случае такое возможно). Так что в худшем случае получите дополнительно оверхед на вызов функции (а то и двух, если шаблонная inlin’илась), плюс отсутствие оптимизаций результат inlin’а.
Rust: абстракции и безопасность, совершенно бесплатно (видеозапись с выступления на митапе Saratov Open-IT)