Тёмный

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

Computer Science Center
Подписаться 160 тыс.
Просмотров 45 тыс.
50% 1

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

Опубликовано:

 

1 мар 2019

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 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 года назад
Благодарю за лекцию, трейты мощная вещь
@michaelbuzuverov67
@michaelbuzuverov67 Месяц назад
Касательно примера с App и Database - мне было непонятно почему мы не можем move out поле мутабельной структуры. Понятно стало только после того как прочитал на stack overflow, что компилятор раста отслеживает чтобы переменная не использовалась повторно только для локальных переменных, но не для полей структуры. Поэтому для поля структуры нужен дополнительный контейнер в роли которого выступает Option. Вот это было бы неплохо в лекции явно сказать.
@iyanello
@iyanello 4 года назад
Из лекции я понял, что если я структура и у меня все поля имплементируют дефолт, то дефолт для структуры это просто структура, где все поля задефолчены, а если я енум, то дерайв дефолт просто не работает. :)
@klimlitovski4057
@klimlitovski4057 Год назад
16.08.22. Дефолт для енумов уже работает
@vlad071096
@vlad071096 Год назад
@@klimlitovski4057 Как? Первый вариант что ли выбирает? Почему?
@klimlitovski4057
@klimlitovski4057 Год назад
@@vlad071096 нужно пометить атрибутом тот вариант который должен быть дефолтным
@vlad071096
@vlad071096 Год назад
1:25:28 namespace std расширять нельзя, но можно добавлять специализации шаблонов для своих типов.
@user-wq1zw4si8u
@user-wq1zw4si8u 3 месяца назад
Растовские трейты достаточно сильно напоминают CRTP из C++
@timoraivonen1848
@timoraivonen1848 3 года назад
У меня T::foo(s) выдаёт имплементацию трейта
@euginekosenko2268
@euginekosenko2268 Год назад
вот с++ и обзавелся классами хаскеля ;-)
@nefedov-dima
@nefedov-dima 4 года назад
Упоминалось про расширение namespace std в с++. Уточню, что расширять его нельзя новыми объектами в широком смысле этого слова, будь то классы или новые функции, но вот переопределять стандартные функции для пользовательских классов можно, что и делают для std::swap
@alexanderkalashnikov2721
@alexanderkalashnikov2721 2 года назад
С базой данных это не обман компилятора. Обычно в других языках self.db у вас пойнтер... но кто проверяет db != nullptr перед вызовом базы данных? И в какой момент жизни программного обеспечения там таки окажется nullptr? Вот чтобы этого никогда не случилось Rust и контролирует ситуацию.
@adamsm1th27
@adamsm1th27 5 месяцев назад
Сформировал для себя интуицию, что трейт это некая характеристика, или качество, или поведение. То есть это какой-то набор предикатов (функций), которые могут относится к разным объектам (типам). Из этой точки зрения как раз вытекает интуиция о том, что трейт не может быть типом.
@akorchyn
@akorchyn 2 года назад
Почему кстати нельзя в примере с ДБ, реализовать shutdown на уровне дропа ДБ, как раз таки будет в духе RAII и клас работающий с дБ не должен будет переживать за это. Хотя я думаю это просто синтетический пример для понимания что такое может быть и как с этим бороться
@alekseykladov1144
@alekseykladov1144 2 года назад
Да, это синтетический пример, и, действительно, если всё ровно так, то лучше убрать Db::shutdown вообще. Более реалистичный пример был бы `fn shutdown(self) -> io::Result` -- если операция выключения может зафейлится (вернуть Result), то в дроп её не засунуть. Пример из стандартной библиотеки такой формы: JointHandle::join
@heavis3103
@heavis3103 3 года назад
Ты - не ты, когда ты NaN
@_e_mask
@_e_mask 2 года назад
nan - на казахском: хлеб)))
@user-ci8mb5qc5d
@user-ci8mb5qc5d 5 лет назад
Есть ли в rust функциональные конвейеры как в f# (x |> f) ?
@alekseykladov1144
@alekseykladov1144 5 лет назад
нет
@GeorgyDev11111
@GeorgyDev11111 Месяц назад
их скоро в js добавят
@cblbopotka3915
@cblbopotka3915 2 года назад
13:20 Не знаю кто называет Trait типажами, но первое что приходит на ум, - характеристика, прекрасно описывает суть происходящего
@voodooman08
@voodooman08 2 года назад
В офф переводе книги the book так переводят
@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 Год назад
Да, в том и дело что этот метод должен быть статик. Не знаю языка где возможно делать статические методы в интерфейсах, поэтому сделать такой интерфейс проблематично
@IvanTheThird
@IvanTheThird 3 года назад
Я вот ничего не понял про "патерн мачинг", точнее я понимаю, но когда начинается, то что на слайде 3 и 5, то всё. Я ничего не понял :) Почему _ у other освобождает что-то из памяти на слайде 3. Какой именно xs и откуда он берётся. В общем для таких как я надо всё по медленнее и курс "Раст для тех кто умел писать только скрипты на питоне" :)
@ddrdmakar4175
@ddrdmakar4175 3 года назад
Я всю жизнь писал на плюсах и тоже мало что понял про паттерны. Это что-то из новомодного сахарного программирования, про которое деды и не слыхивали.
@illiadenysenko7776
@illiadenysenko7776 2 года назад
Это больше про функциональщину из времен эдак за двадцать лет до появления плюсов, можно посмотреть курс про Хаскель на этом же канале или что-то почитать про какой-нибудь OCaml. Круто что из 1970 года это проникает в наше время)
@VaGroz
@VaGroz 11 месяцев назад
53:40 на изи написать: ``` trait Clone[T
@ski5556
@ski5556 2 года назад
Лекции отличные но слишком быстро... успеваешь уловить только часть сказанного на уровне образов лишь к концу этого самого сказанного...
@luden6794
@luden6794 2 года назад
Думайте быстрее))
@ski5556
@ski5556 2 года назад
Дело не в думай быстрее а в том что слишком много связей и абстракций с другими ЯП. Слишком. Нужен большой багаж. Если его нету то шансов понять что то с каждой каждой новой минутой все меньше и меньше.
@nanoqsh
@nanoqsh Год назад
@@ski5556 ну не то что бы большой. C++ и немного Хаскеля
@user-sd7rd2fs7m
@user-sd7rd2fs7m 2 года назад
Вторая половина, ничего не понятно. Надо бы хоть примеры какие-то.
@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 4 года назад
У препода плоховато с дикцией, когда ускоряется не разобрать, что он там бормочет
@Uni-Coder
@Uni-Coder 4 года назад
Потому что молодой, малоопытный. А старых преподов по Rust не существует :)
@theden111111
@theden111111 4 года назад
@@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" == тупл и т.д. Не так важно, но слух режет
Далее
Rust Powered Polymorphism ⚡️ With Traits
9:55
Просмотров 87 тыс.