6:52 Ранее было сказано, что RUST делает проверку на выход за границы массива при каждом обращении. В языке раст получается 4 проверки, 1 проверка что написана автором, и еще 3 на каждой строке принта, в то время как в C лишь 1 проверка в начале функции, в таком контексте можно сделать вывод, что программа на C будет быстрее так или иначе. Или же RUST оптимизирует такой код при наличии проверки снаружи?
Да, этот пример и был сделан чтобы показать, что Rust умеет оптимизировать код (удалять ненужные проверки) не хуже C, но при этом не жертвует безопасностью.
давно и регулярно пользуюсь многим из этого, но всё равно регулярно перечитываю доки и пересматриваю видосы... ибо нарабатывать и трамбовать правильные стереотипы в мозгу можно достаточно долго ))
У меня просьба, пожалуйста. Я никогда не изучал ни С ни С++, вы делаете сноски на эти языки это очень хорошо для других, но меня это путает. Вы добавляете логотипы языков чтоб было всем понятно это супер удобно, но есть некоторые места где нет логотипа и они я так понимаю на RUST, но вы переодически делаете словесные сноски на языки С в результате я путаюсь. Пожалуйста добавляйте во все части кода логотипы языков. Пусть будет маленькая пометочка логотипа RUST на всех частях кода. Спасибо за Ваш вклад в уроки - я очень благодарен и ценю Ваш труд.
отличная подача. кстати можно еще упомянуть кодогенерацию и макросы, для создания тех самых енамов. Оно конечно полностью не заменит динамику настоящую, но серьезно сократит время если система активно модифицируется
Абсолютно не интересен раст. Но превью, название видео, название и ава канала… все так стильно, достаточно просто и стильно.. в общем просто лайк поставил и ушел
Абсолютно не интересен раст. Но превью, название видео, название и ава канала… все так стильно, достаточно просто и стильно.. в общем просто лайк поставил и ушел
Полезно, но с сожалению эта фича опт-ин. Далеко не каждая библиотека будет требовать ограничение шаблонного параметра. В расте же ограничения на женерики тотальны, они есть всегда и везде, даже в собственном коде
Видео хорошее! Но на минуте 6-ой, когда начинается пример с `trait From`, мне кажется там ошибка в имплементации трейта: там где километры должно быть `* 1000.0`, а где миллиметры - `/ 1000.0`. А может я не до конца уловил реализацию `trait From` )
@@mk72v2oq Я оказался всё-таки прав, там ошибка (видимо автор канала перепутал операции). К сожалению удалили комментарий с ответом, в котором была ссылка на песочницу с кодом, не поленитесь и воспроизведите его.
@@mk72v2oq Я оказался всё-таки прав, там ошибка (видимо автор канала перепутал операции). К сожалению удалили комментарий с ответом, в котором была ссылка на песочницу с кодом, не поленитесь и воспроизведите его.
В C++ ограничения на тип выражается через специализации шаблонов, constexpr, constexpr if, SFINAE , concept , traits, requeries, -> decltype() и т. д.. Овер много способов ограничить диапазон типов, некоторые из них гораздо красивее и понятнее чем в Rustе. В С++ тоже можно реализовать один и тот же трейт для разных типов. В C++ что то похожее на ассоциированные типы тоже есть (using наверное или специализации шаблонов опять же). C++ вообще ооочень разнообразный язык после него Rust даже кажется сильно ужатым и ненужным. пример ограничения типа в c++ (проверяется на этапе компиляции): template<class U, typename _U = typename all_types::approx::type<U>> constexpr Initializer(U) noexcept requires(all_types::has<_U> && any_basic_types::has<_U>); // если приближённый к типам all_types тип _U имеется в пакете типов all_types и any_basic_types то ошибки не будет или template<typename _L, typename _R> constexpr static inline auto call() -> decltype(std::declval<_L>() == std::declval<_R>()); // если существует оператор == для типа _L то ошибки не будет или template<typename U> void print_numeric(U) requires(std::is_same_v<U, int> || std::is_same_v<U, float>) и т. д. во всех этих примерах будет вылетать ровно одна ошибка и указывать на вызов функции, в ней будет говорится что не существует реализации для данного типа и всё.
приводились примеры на С++, озвучилось, нет уточнений классов, начиная с 20 стандарта, появились концепты, мне, кажется, это про это. Не то, чтобы это было важно, да и повествование, сильно не меняет, и я вообще не пользовался этими самыми концептами, да и не озвучивается какой конкретно стандарт имеется в виду, да и не по С++ канал. Во всяком случае, спасибо автору за его труд!!!
Я несколько изучил приёмы C++, которые позволяют делать что-то похожее на Rust, но не нашёл ничего хотябы приблизительно простого и очевидного как в Rust. Концепты и static_assert внутри темплейтов представляются мне больше хаками, чем естественно вписывающимися в логику языка элементы Rust
В некоторых случаях автор натягивает Раст реализацию на Котлин, и говорит что там так нельзя. Да, нельзя, но в котлине так не делают. А так как делают - там проблем нет
Kotlin тут служит как пример работы дженериков в большинстве языков - понятно, что он изначально создавался под другие задачи, но я хочу сказать, что некоторые паттерны Rust просто не реализуемы в других языках, что и делает его уникальным
"Два вида дженериков" режет слух. Всё-таки правильное название для "type: T" это "асоциированный тип". Такой вид записи, через "type: T", показывает, что тип T должен быть определён в impl блоке.
типа как некие модели скелетов приложений? если так, то имеет смысл, новичкам тяжело понять с чего начать. да, Автор годно составляет, озвучивает материал.
Автор, Вы хотя бы примеры под свои утверждения подбирали правильные. Вот как можно назвать ограничением возврат строки методом toString? И если Вам понадобилось это, то причем тут наследование? Наследование оно наследует. Иерархия наследования -- это иерархия абстракций. А расширение -- это другое отношение между классами.
4:03 Здесь каждый вызов print_user() не будет выделять новый память как вы говорите. Память уже выделяется в main(), и просто передается ссылка на этот объект в функцию print_user(). Другое дело, если память выделилось в функции print_user(), тогда да, каждый вызов этой функции будет выделять новый память. Не так ли?
хорошие видео, однако раздражает один маленький момент, не знаю то ли особенность речи, то ли "петухов" ловишь, но те моменты где ты в окончаниях повышаешь свой голос до высоких нот, что он превращается в писк - звучит ужасно
Очень интересная тема, да и ты хороший специалист в расте скорее всего, но в некоторых моментах складывается ощущение, что ты чуть ли не плачешь (скорее от счастья, потому-что пишешь на расте), например: 20:07, 23:31, 24:55