3. Трейты. Программирование на Rust (весна 2019)

  Рет қаралды 45,940

Computer Science Center

Computer Science Center

5 жыл бұрын

Третья лекция курса «Программирование на Rust» (весна 2019).
Преподаватель - Алексей Александрович Кладов.
Страница лекции на сайте CSC: tinyurl.com/csc-rust-3
Ссылка на материалы: github.com/matklad/rust-course
Все лекции курса: bit.ly/2QfWama

Пікірлер: 57
@ASERIA777
@ASERIA777 2 жыл бұрын
каждую лекцию все больше и больше чашка чая
@Delimor
@Delimor 3 жыл бұрын
Одни из лучших лекций по CS в ру сегменте
@qewolf
@qewolf 4 жыл бұрын
00:00:15 - Сопоставления с Образцом 00:04:09 - Range Patterns 00:05:32 - Binding Modes 00:08:22 - Сахар 00:09:10 - Всё -- Паттерны 00:10:00 - Параметричский Полиморфизм 00:12:00 - Параметризованные функции 00:13:08 - Traits 00:16:03 - impl MyTrait for YourType 00:17:36 - Return type polymorphism 00:19:24 - Static Dispatch 00:20:30 - Мономорфизация 00:22:56 - Дженерики в Java 00:25:55 - Мономорфизация 00:28:23 - Inlining 00:32:42 - Мономорфизация vs. Стирание Типа 00:38:17 - Трейты в Rust vs. Шаблоны в С++ 00:38:40 - Проверка типов 00:40:32 - Swift Generics 00:41:02 - Fully Qualified Syntax 00:45:53 - Where clauses 00:46:41 - "Наследование" трейтов 00:48:46 - Полезные Трейты 00:49:03 - Default 00:52:21 - Clone 00:54:57 - Copy 00:56:48 - Derive 01:00:17 - PartialEq, Eq 01:05:34 - PartialOrd, Ord 01:12:01 - std::hash::Hash 01:18:10 - Drop 01:24:01 - std::mem Tricks 01:27:49 - Эмуляция Линейных Типов 01:30:52 - Порядок Drop 01:32:10 - dropck 01:34:48 - Deref 01:39:03 - DerefMut 01:39:13 - std::ops::Index / IndexMut 01:41:24 - Мораль
@illiadenysenko7776
@illiadenysenko7776 4 жыл бұрын
Спасибо, что повторили вопрос на камеру)
@slvrization
@slvrization 4 жыл бұрын
спасибо за лекции, вообще огонь!
@alexkazimir3835
@alexkazimir3835 3 жыл бұрын
Благодарю за лекцию, трейты мощная вещь
@iyanello
@iyanello 4 жыл бұрын
Из лекции я понял, что если я структура и у меня все поля имплементируют дефолт, то дефолт для структуры это просто структура, где все поля задефолчены, а если я енум, то дерайв дефолт просто не работает. :)
@klimlitovski4057
@klimlitovski4057 Жыл бұрын
16.08.22. Дефолт для енумов уже работает
@vlad071096
@vlad071096 Жыл бұрын
@@klimlitovski4057 Как? Первый вариант что ли выбирает? Почему?
@klimlitovski4057
@klimlitovski4057 Жыл бұрын
@@vlad071096 нужно пометить атрибутом тот вариант который должен быть дефолтным
@michaelbuzuverov67
@michaelbuzuverov67 2 ай бұрын
Касательно примера с App и Database - мне было непонятно почему мы не можем move out поле мутабельной структуры. Понятно стало только после того как прочитал на stack overflow, что компилятор раста отслеживает чтобы переменная не использовалась повторно только для локальных переменных, но не для полей структуры. Поэтому для поля структуры нужен дополнительный контейнер в роли которого выступает Option. Вот это было бы неплохо в лекции явно сказать.
@user-wq1zw4si8u
@user-wq1zw4si8u 5 ай бұрын
Растовские трейты достаточно сильно напоминают CRTP из C++
@vlad071096
@vlad071096 Жыл бұрын
1:25:28 namespace std расширять нельзя, но можно добавлять специализации шаблонов для своих типов.
@euginekosenko2268
@euginekosenko2268 2 жыл бұрын
вот с++ и обзавелся классами хаскеля ;-)
@heavis3103
@heavis3103 3 жыл бұрын
Ты - не ты, когда ты NaN
@_e_mask
@_e_mask 2 жыл бұрын
nan - на казахском: хлеб)))
@nefedov-dima
@nefedov-dima 4 жыл бұрын
Упоминалось про расширение namespace std в с++. Уточню, что расширять его нельзя новыми объектами в широком смысле этого слова, будь то классы или новые функции, но вот переопределять стандартные функции для пользовательских классов можно, что и делают для std::swap
@cblbopotka3915
@cblbopotka3915 2 жыл бұрын
13:20 Не знаю кто называет Trait типажами, но первое что приходит на ум, - характеристика, прекрасно описывает суть происходящего
@voodooman08
@voodooman08 2 жыл бұрын
В офф переводе книги the book так переводят
@alexanderkalashnikov2721
@alexanderkalashnikov2721 2 жыл бұрын
С базой данных это не обман компилятора. Обычно в других языках self.db у вас пойнтер... но кто проверяет db != nullptr перед вызовом базы данных? И в какой момент жизни программного обеспечения там таки окажется nullptr? Вот чтобы этого никогда не случилось Rust и контролирует ситуацию.
@timoraivonen1848
@timoraivonen1848 3 жыл бұрын
У меня T::foo(s) выдаёт имплементацию трейта
@adamsm1th27
@adamsm1th27 6 ай бұрын
Сформировал для себя интуицию, что трейт это некая характеристика, или качество, или поведение. То есть это какой-то набор предикатов (функций), которые могут относится к разным объектам (типам). Из этой точки зрения как раз вытекает интуиция о том, что трейт не может быть типом.
@akorchyn
@akorchyn 2 жыл бұрын
Почему кстати нельзя в примере с ДБ, реализовать shutdown на уровне дропа ДБ, как раз таки будет в духе RAII и клас работающий с дБ не должен будет переживать за это. Хотя я думаю это просто синтетический пример для понимания что такое может быть и как с этим бороться
@alekseykladov1144
@alekseykladov1144 2 жыл бұрын
Да, это синтетический пример, и, действительно, если всё ровно так, то лучше убрать Db::shutdown вообще. Более реалистичный пример был бы `fn shutdown(self) -> io::Result` -- если операция выключения может зафейлится (вернуть Result), то в дроп её не засунуть. Пример из стандартной библиотеки такой формы: JointHandle::join
@user-ci8mb5qc5d
@user-ci8mb5qc5d 5 жыл бұрын
Есть ли в rust функциональные конвейеры как в f# (x |> f) ?
@alekseykladov1144
@alekseykladov1144 5 жыл бұрын
нет
@GeorgyDev11111
@GeorgyDev11111 3 ай бұрын
их скоро в js добавят
@VaGroz
@VaGroz Жыл бұрын
53:40 на изи написать: ``` trait Clone[T
@IvanTheThird
@IvanTheThird 3 жыл бұрын
Я вот ничего не понял про "патерн мачинг", точнее я понимаю, но когда начинается, то что на слайде 3 и 5, то всё. Я ничего не понял :) Почему _ у other освобождает что-то из памяти на слайде 3. Какой именно xs и откуда он берётся. В общем для таких как я надо всё по медленнее и курс "Раст для тех кто умел писать только скрипты на питоне" :)
@ddrdmakar4175
@ddrdmakar4175 3 жыл бұрын
Я всю жизнь писал на плюсах и тоже мало что понял про паттерны. Это что-то из новомодного сахарного программирования, про которое деды и не слыхивали.
@illiadenysenko7776
@illiadenysenko7776 3 жыл бұрын
Это больше про функциональщину из времен эдак за двадцать лет до появления плюсов, можно посмотреть курс про Хаскель на этом же канале или что-то почитать про какой-нибудь OCaml. Круто что из 1970 года это проникает в наше время)
@danila_osin
@danila_osin 2 жыл бұрын
interface Default { _default(): T } class Cat implements Default { _default() { return new Cat() } } разве это не аналог трейта Default. Это typescript
@danila_osin
@danila_osin 2 жыл бұрын
а сори, должен быть статичный метод
@nanoqsh
@nanoqsh Жыл бұрын
Да, в том и дело что этот метод должен быть статик. Не знаю языка где возможно делать статические методы в интерфейсах, поэтому сделать такой интерфейс проблематично
@ski5556
@ski5556 2 жыл бұрын
Лекции отличные но слишком быстро... успеваешь уловить только часть сказанного на уровне образов лишь к концу этого самого сказанного...
@luden6794
@luden6794 2 жыл бұрын
Думайте быстрее))
@ski5556
@ski5556 2 жыл бұрын
Дело не в думай быстрее а в том что слишком много связей и абстракций с другими ЯП. Слишком. Нужен большой багаж. Если его нету то шансов понять что то с каждой каждой новой минутой все меньше и меньше.
@nanoqsh
@nanoqsh 2 жыл бұрын
@@ski5556 ну не то что бы большой. C++ и немного Хаскеля
@user-sd7rd2fs7m
@user-sd7rd2fs7m 3 жыл бұрын
Вторая половина, ничего не понятно. Надо бы хоть примеры какие-то.
@atommixz
@atommixz 5 жыл бұрын
чота ДЗ так и нет. Я поплыл где-то на середине второй лекции, слишкмо много информации, ньюансов каких-то, слишком много "это будет в другой лекции". Я так и не понял, зачем трейты, если можно без них. И без практики (ДЗ) это всё не заходит. Видимо нужно проходить rust by example А что касается вопросов из зала, можно поставить конденсаторный микрофон с кардиойдной направленностью, направленынный в зал и за микшером человек, который бы увеличивал или уменьшал гейн микрофона, когда это нужно. Там бы звук из зала был сильно лучше и даже не нужно ходить по залу с микрофоном, главное чтоб тишина была в зале. такой сетап например sE Electronics X1 S (10к) + любой микшер с фантомным питанием (2-3к). Для площадки на которой вы ведёте курсы я думаю это посильные деньги. а можно сделать ещё богаче, поставить два микрофона, 1 в начале зала, другой в середине и в зависимости от того к какому микрофону ближе говорящий, рулить нужный ползунок гейна и громкости на микшере. И повторять вопросы не нужно будет. Нужен просто человек который сидел бы в наушниках и не зевал, мониторил звук с микрофонов и рулил микшером.
@flashmozzg
@flashmozzg 5 жыл бұрын
Уже 2 ДЗ есть.
@atommixz
@atommixz 5 жыл бұрын
@@flashmozzg а где они опубликованы? Я ниодного нигде не вижу
@flashmozzg
@flashmozzg 5 жыл бұрын
@@atommixz На странице курса, но нужно быть на него записанным, чтобы их увидеть.
@KaraMaslyatam
@KaraMaslyatam 5 жыл бұрын
На самом деле можно без всего и писать на чистом Си. Трейты нужны как минимум для обобщений, для расширения любых типов и перегрузки операторов. Например, можно принимать дженерик аргумент, для которого реализован трейт AsRef от типа str и можно принимать String и &str. Без трейтов пришлось бы писать две версии или передавать что-то одно. Можно написать свой трейт и реализовать его для любого чужого типа и вызывать новые методы через точку. Также трейты могут быть "динамическими", то есть принимаем не тип с реализацией какого-то трейта статически, а трейт объект и в рантайме его уже ковыряем - об этом Алексей должен рассказать позже.
@theden111111
@theden111111 5 жыл бұрын
У препода плоховато с дикцией, когда ускоряется не разобрать, что он там бормочет
@Uni-Coder
@Uni-Coder 5 жыл бұрын
Потому что молодой, малоопытный. А старых преподов по Rust не существует :)
@theden111111
@theden111111 5 жыл бұрын
@@Uni-Coder согласен, никого не хотел обидеть
@ranen_by
@ranen_by 4 жыл бұрын
слишком много в речи жаргонизмов
@lizzienovigot
@lizzienovigot 2 жыл бұрын
В IT это нормально. Кроме того на большинство из таких жаргонизмов или нет русского аналога или ты его точно так же не поймёшь
@ilyadruzh
@ilyadruzh 3 жыл бұрын
У чувака явно двойка по русскому языку была, сложно его недоанглийский слушать.
@alexanderxx2982
@alexanderxx2982 2 жыл бұрын
Может и так. В разработчики берут не за отличное красноречие.
@lizzienovigot
@lizzienovigot 2 жыл бұрын
Доброе пожаловать в IT Уверен что на эти англицизмы есть русский аналог, а даже если есть - он тебе будет понятен?
@ilyadruzh
@ilyadruzh 2 жыл бұрын
@@lizzienovigot конечно, умение придумывать новые смыслы и слова отличает чувака, который умеет придумывать от чувака, который просто заимствует и копирует.
@alexey_burkov
@alexey_burkov Жыл бұрын
я бы сказал двойка и по английскому: "API" == апи, "tuple" == тупл и т.д. Не так важно, но слух режет
4. Модули. Программирование на Rust (весна 2019)
1:38:01
A pack of chips with a surprise 🤣😍❤️ #demariki
00:14
Demariki
Рет қаралды 54 МЛН
孩子多的烦恼?#火影忍者 #家庭 #佐助
00:31
火影忍者一家
Рет қаралды 3,9 МЛН
FOOLED THE GUARD🤢
00:54
INO
Рет қаралды 62 МЛН
Rust Powered Polymorphism ⚡️ With Traits
9:55
Code to the Moon
Рет қаралды 91 М.
Описание бизнес-процессов по шагам на примерах
17:43
Системный Бизнес
Рет қаралды 3,5 М.
Как я писал клиента для YDB на Rust, сравнение с Go. Тимофей Кулин
27:37
Зачем системным программистам Rust? Сергей Фомин, Яндекс
44:37
Видео с мероприятий {speach!
Рет қаралды 8 М.
Язык Rust, урок #10 | Generics и traits, rustlings
32:01
Ilya Krukowski
Рет қаралды 1,1 М.
A pack of chips with a surprise 🤣😍❤️ #demariki
00:14
Demariki
Рет қаралды 54 МЛН