Тёмный

4. Модули. Программирование на Rust (весна 2019) 

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

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

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

 

8 мар 2019

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 61   
@vyorkin
@vyorkin 3 года назад
каждую лекцию новая кружка)
@TheUnitto
@TheUnitto 5 лет назад
Спасибо больше за курс! Очень странно что так мало подписчиков и просмотров. Ты куда лучше расскаызваешь чем какой то блогер. Единственное что, не всегда хватает бекграунда что бы тебя понять)
@Tutankhamen77
@Tutankhamen77 3 года назад
По-моему, как раз небольшое кол-во просмотров и подписчиков очень легко объяснить сложностью предмета. Лекции по той же Scala тоже, кмк, будут менее популярны лекций по Java.
@Tutankhamen77
@Tutankhamen77 3 года назад
Спасибо автору за лекции!
@roman6572
@roman6572 Год назад
Алексей добрый день, спасибо за уроки, все очень понятно и приятно тебя слушать)
@alogic75
@alogic75 Год назад
43:58 Алексей внёс вклад в разработку Cargo. Уважаю.
@Shwed1982
@Shwed1982 Год назад
так алексей в карго как раз среди контрибьюторов по коммитам на 5 месте, а вот в самом компиляторе раста уже на первом) а rust-analyzer он вообще чуть ли не в одно лицо сам написал. сам только недавно это узнал, очень порадовался. талантище!
@PaulGanarara
@PaulGanarara 11 месяцев назад
@@Shwed1982 вот это уровень
@user-gw6df6ns7e
@user-gw6df6ns7e 5 лет назад
Насчет зависимостей - хорошее решение. В java появились модули решающие проблему с разными версиями библиотек. Но полно старого кода, где от транзитивных зависимостей получаешь кучу проблем.
@KirillLykov
@KirillLykov 2 года назад
Помимо коробочной системы сборки (вместо make/cmake/bjam/basel/... C++), я бы сказал про наличие встроенного менеджера пакетов (в с++ это мог быть dpkg, Conan, etc)
@qsyatmcode7806
@qsyatmcode7806 2 месяца назад
Таймкоды от Я.Б.: 00:00 Система модулей в Rust 03:57 Импорт и использование модулей 07:50 Разделение кода на файлы и модули 12:41 Стандартная библиотека Rust 14:39 Модули и их использование 21:35 Использование модификаторов доступа 25:34 Иерархия модулей и их использование 29:31 Глобальное пространство имен и стабильность 33:25 Модель компиляции и стабильность 41:18 Директивы и оптимизация 43:16 Использование crate в Rust 47:13 Взаимодействие между пакетами 50:04 Обновление версий пакетов 52:58 Взаимодействие между пакетами и их версиями 54:56 Автоматическое обновление пакетов 56:48 Проблемы с импортом и экспортом 58:47 Локальные и глобальные правила 01:02:42 Использование версий и стабильность 01:05:29 Ломающие изменения и совместимость 01:12:09 Динамические и статические библиотеки 01:21:54 Взаимодействие языков программирования Си и Rust 01:26:42 Создание динамической библиотеки на Rust 01:30:38 Работа с библиотеками и их использование 01:35:31 Обработка ошибок и завершение работы
@user-mw2yb1fn2k
@user-mw2yb1fn2k 8 дней назад
На 11:34 вместо `--create-type` нужно `--crate-type`
@oriontvv
@oriontvv 2 года назад
8:22 разве вместо one.rs и nested.rs не должны быть mod.rs?
@alekseykladov1144
@alekseykladov1144 2 года назад
Ох нет. Тут история такая -- изначально были только mod.rs. Потом, в районе Rust 2018, добавили альтернативный способ, без mod.rs, как раз то, что я на слайде показываю. Изначально был план задепрецировать mod.rs, но это как-то не срослось, и в итоге в Rust есть и "новая", и "старая" версия. Я в лекциях специально только про новую рассказываю, чтобы мозги не существенной информацией не пудрить.
@KirillLykov
@KirillLykov 2 года назад
слово "могущественно" особо доставляет, видимо как перевод с mighty
@user-gw6df6ns7e
@user-gw6df6ns7e 5 лет назад
Надо писать компилятор rust под jvm или уже есть?
@rumadware
@rumadware 5 лет назад
Как вы это представляете себе? В JVM все объекты ссылочные и rust там не будет работать никак. В любом случае, с кодом на rust должно быть возможно взаимодействовать через JNI так же как и с кодом на C/C++
@user-gw6df6ns7e
@user-gw6df6ns7e 5 лет назад
@@rumadware Ну примитивные типы есть. Массивы примитивных типов хотя и создаются в куче все равно представляют обычную последовательность байт.
@Mike_x64
@Mike_x64 5 лет назад
github.com/oracle/graal/tree/master/sulong
@bubblesort6368
@bubblesort6368 2 года назад
Вот все классно в Rust, но все эти могущественные трейты и имплы уж вольно напоминают манки патчинг из Ruby, где порой не поймешь откуда это пришло или то.
@nanoqsh
@nanoqsh 2 года назад
Не знаю Ruby, но насколько я знаю манки патчинг работает по другому. Как минимум разница в том, что поиск метода осуществляется в рантайме. А в расте он либо осуществляется статически, и сложно ошибиться с вызовом нужного метода, так как нельзя создать неоднозначность, за исключением случая когда вместо метода трейта вызывается метод типа (Ассоциированная функция). Либо же метод ищется в рантайме через dyn объект, но тут тоже однозначно ясно какой именно вызывается метод
@bubblesort6368
@bubblesort6368 2 года назад
@@nanoqsh вы правы. Сугубо технически это не манкипатчинг. Но в руби механизм манкипатчинга реализован в виде мержа деклараций. То есть вы можете в системе объявить два класса с одним названием и тогда инстанс будет суммой этих деклараций. Так и в rust. Можно сделать неисчислимое количество имплов для одной структуры плюс дерайвы и прочие макросы и в результате сложно будет понять откуда и у чего ноги растут и код сложно поддерживать.
@nanoqsh
@nanoqsh 2 года назад
@@bubblesort6368 поэтому в расте нельзя просто вызвать метод трейта у объекта. Сначала нужно импортировать имя трейта через use, либо явно прописывать из какого трейта нужно вызвать метод. То есть на самом типе не будет висеть куча методов, они будут "скрыты" по умолчанию, так что это не будет вызывать никаких проблем
@bubblesort6368
@bubblesort6368 2 года назад
@@nanoqsh мне не нравиться то, что в коде вижу юзы которые явно не используются, а косвенно апгрейдят структуры в файле. В руби тоже если ты не подключить файл с манкипатчем он не заработает)
@nanoqsh
@nanoqsh 2 года назад
@@bubblesort6368 в том то и дело что сами структуры от добавления реализации трейта никак не апдейтятся. Метод типа, это просто функция, которая принимает self в качестве первого аргумента и лежит она отдельно, в своём месте исполняемого файла. В самих объектах никакой информации о трейтах нет, за одним исключением, когда мы хотим добиться динамической диспетчеризации. Но тогда методы будут содержаться в указатели на этот объект, даже не в самом объекте, и таблица виртуальных методов будет только одной иерархии трейтов, а не вообще всех реализованных
@bonafilmo
@bonafilmo 5 лет назад
Существует ли в Rust какая-то своя более-менее стандартная библиотека для работы с большими числами произвольного размера и арифметики произвольной точности? Как именно там реализована работа с памятью (выделение памяти, переносы, косвенная адресация, переполнения и т.п.)? Как определяются типы, типажи и вся растовская специфика? Как задаётся знаковость/беззнаковость? Какие подводные камни в реализации и использовании? Нельзя же просто взять и подключать C++'ные библиотеки и использовать всё в растовском стиле?
@KaraMaslyatam
@KaraMaslyatam 5 лет назад
C++ библиотеки (использующие специфичные механизмы языка) можно использовать только в C++ (неожиданно), только поэтому С++ до сих используется. Необходимо писать обёртку на C (если нет С++ хреноты наружу, можно сгенерировать) или найти уже готовую. Rust декларации для C либы генерируются без проблем. И всё-равно потребуется писать unsafe блоки, поэтому лучше написать safe обёртку на Rust. Например (github): ocornut/imgui (C++) -> cimgui/cimgui (C) -> Gekkio/imgui-rs (Rust).
@KaraMaslyatam
@KaraMaslyatam 5 лет назад
Если для чего-то есть C библиотека, то в Rust это автоматически есть. Для чисел есть обертки "rug" и "rust-gmp", также есть "ramp". И вообще вот - crates.io/search?q=arithmetic&sort=downloads . Что значит "стандартная библиотека" я не понял и какая разница? Главное, что cargo всё скачает и соберёт, даже не поймёшь, что там внутри - Rust, C или ASM. С этим никаких страданий как в C++ нет - если пакет есть, то он чаще всего легко подключается и собирается.
@KaraMaslyatam
@KaraMaslyatam 5 лет назад
Никаких проблем с памятью, это же Rust. Он даёт гарантии, что если ты не будешь явно указывать unsafe, то выстрелить в ногу (overflow, use after free, double free и т.д.) компилятор просто не даст. От логических ошибок и дэдлоков Rust конечно не спасёт. Смотрите первую лекцию.
@KaraMaslyatam
@KaraMaslyatam 5 лет назад
Остальные ответы найдёте в уже вышедших лекциях Алексея, посмотрите их хотя бы для общего развития.
@KaraMaslyatam
@KaraMaslyatam 5 лет назад
Какие-то подводные камни тяжело вспомнить, Rust близок к идеалу. Сначала непонятно, потом неприятно и бесит, а потом разбираешься и кайф. Ну разве что молодость языка и недопиленность каких-то вещей, например async/await всё ещё не стабилизировали, но уже совсем недолго осталось (в nightly конечно уже использую по полной).
@atommixz
@atommixz 5 лет назад
Народ, пошарьте все ДЗ, ну как без ДЗ то, ничо не понятно
@flashmozzg
@flashmozzg 5 лет назад
Там задания более-менее следуют "Ray Tracing in One Weekend" (pdf гуглится), правда с rust-овой спецификой. Пошарить задания наверное стоит просить авторов курса, т.к. это их труд.
@atommixz
@atommixz 5 лет назад
@@flashmozzg да мне уже ответили в чате в телеграмме, еслиб они сразу написали что делайте ДЗ по этой книжке - ну вопросы бы отпали
@user-mi8es4ur5w
@user-mi8es4ur5w 4 года назад
Лекции очень классные. Немытая доска на фоне - как нечищенные ботинки (не к Алексею, а организаторам).
@adsick_ua
@adsick_ua 4 года назад
а мне доска нравится
@PaulGanarara
@PaulGanarara 11 месяцев назад
кому вообще какое дело до чистоты моих ботинок? мы что, в Москва слезам не верит?
@theden111111
@theden111111 4 года назад
А мне не понравился ведущий, бубнит для себя, как будто просто сам повторяет что знает
@desprit
@desprit 3 года назад
И зачем тогда смотрели? Ваш комментарий аналогичного содержания и под лекцией #3 был.
@xshady2967
@xshady2967 10 месяцев назад
:/
@alexgorodecky1661
@alexgorodecky1661 5 лет назад
Система модулей Rust сделана извращенцами для извращенцев? Столько фичей, и они действительно все нужны? Лучше бы взяли Python за baseline и пофиксили проблемки
@Pavel.Zhigulin
@Pavel.Zhigulin 4 года назад
Если бы вы пописали на С++ что-то очень большое (у чего хотя бы 50-60 библиотек зависимостей), то поняли бы, что все эти вещи - не то что нужны, а просто жизненно необходимы. Это просто глоток свежего воздуха и избавление от огромной головоной боли под названием dependency hell.
@alexgorodecky1661
@alexgorodecky1661 4 года назад
@@Pavel.Zhigulin если бы вы пописали на Java, то поняли бы, что все эти вещи не нужны
@Pavel.Zhigulin
@Pavel.Zhigulin 4 года назад
@@alexgorodecky1661 сам Java устроен совершенно по-другому. В нём нет мономорфизации как таковой, что позволяет совершенно по-другому делать изоляцию в модулях.
@alexgorodecky1661
@alexgorodecky1661 4 года назад
@@Pavel.Zhigulin , мономорфизация это детали реализации дженериков / темплейтов. Никакого отношения к языку не имеет, особенно учитывая что либы на rust поставляются в source коде, либо в rlib, и я уверен что там ast
@Pavel.Zhigulin
@Pavel.Zhigulin 4 года назад
@@alexgorodecky1661 эти детали, как ни странно, сильно ограничивают модульность. Ты не можешь просто так "запечатать" код внутрь модуля, ты вынужден импортировать содержимое прямо в тот бинарь, где инстанцируется экземпляр дженерика. В связи с этим решить конфликт зависимостей становится не так уж и просто, потому что в одном месте инстанцируется символ из одной версии, в другом - из другой, но у символов одинаковые имена, что породит просто кучу проблем. То, что Rust поставляется в исходниках, означает лишь, что ABI еще не стандартизирован. Когда это сделают, все изменится, однако проблемы с версионированием и именами символов решили уже сейчас.
@ilyadruzh
@ilyadruzh 3 года назад
Что ему мешает говорить на русском языке? Сложно слушать этот россиянский язык помесь английского и русского. Уж лучше б на английском говорил.
@nanoqsh
@nanoqsh 2 года назад
Называется программистский
@xshady2967
@xshady2967 10 месяцев назад
аахахахах
Далее
aespa 에스파 'Supernova' MV
03:14
Просмотров 28 млн
Rust Crash Course | Rustlang
1:50:43
Просмотров 989 тыс.
Многопоточность и GIL
1:21:47
Просмотров 34 тыс.