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

  Рет қаралды 25,691

Computer Science Center

Computer Science Center

5 жыл бұрын

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

Пікірлер: 61
@TheUnitto
@TheUnitto 5 жыл бұрын
Спасибо больше за курс! Очень странно что так мало подписчиков и просмотров. Ты куда лучше расскаызваешь чем какой то блогер. Единственное что, не всегда хватает бекграунда что бы тебя понять)
@Tutankhamen77
@Tutankhamen77 3 жыл бұрын
По-моему, как раз небольшое кол-во просмотров и подписчиков очень легко объяснить сложностью предмета. Лекции по той же Scala тоже, кмк, будут менее популярны лекций по Java.
@vyorkin
@vyorkin 3 жыл бұрын
каждую лекцию новая кружка)
@alogic75
@alogic75 Жыл бұрын
43:58 Алексей внёс вклад в разработку Cargo. Уважаю.
@Shwed1982
@Shwed1982 Жыл бұрын
так алексей в карго как раз среди контрибьюторов по коммитам на 5 месте, а вот в самом компиляторе раста уже на первом) а rust-analyzer он вообще чуть ли не в одно лицо сам написал. сам только недавно это узнал, очень порадовался. талантище!
@PaulGanarara
@PaulGanarara Жыл бұрын
@@Shwed1982 вот это уровень
@Tutankhamen77
@Tutankhamen77 3 жыл бұрын
Спасибо автору за лекции!
@roman6572
@roman6572 Жыл бұрын
Алексей добрый день, спасибо за уроки, все очень понятно и приятно тебя слушать)
@user-gw6df6ns7e
@user-gw6df6ns7e 5 жыл бұрын
Насчет зависимостей - хорошее решение. В java появились модули решающие проблему с разными версиями библиотек. Но полно старого кода, где от транзитивных зависимостей получаешь кучу проблем.
@qsyatmcode7806
@qsyatmcode7806 3 ай бұрын
Таймкоды от Я.Б.: 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 Обработка ошибок и завершение работы
@KirillLykov
@KirillLykov 2 жыл бұрын
Помимо коробочной системы сборки (вместо make/cmake/bjam/basel/... C++), я бы сказал про наличие встроенного менеджера пакетов (в с++ это мог быть dpkg, Conan, etc)
@user-mw2yb1fn2k
@user-mw2yb1fn2k Ай бұрын
На 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 есть и "новая", и "старая" версия. Я в лекциях специально только про новую рассказываю, чтобы мозги не существенной информацией не пудрить.
@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 конечно уже использую по полной).
@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
@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 Жыл бұрын
кому вообще какое дело до чистоты моих ботинок? мы что, в Москва слезам не верит?
@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 еще не стандартизирован. Когда это сделают, все изменится, однако проблемы с версионированием и именами символов решили уже сейчас.
@theden111111
@theden111111 5 жыл бұрын
А мне не понравился ведущий, бубнит для себя, как будто просто сам повторяет что знает
@desprit
@desprit 3 жыл бұрын
И зачем тогда смотрели? Ваш комментарий аналогичного содержания и под лекцией #3 был.
@xshady2967
@xshady2967 11 ай бұрын
:/
@ilyadruzh
@ilyadruzh 3 жыл бұрын
Что ему мешает говорить на русском языке? Сложно слушать этот россиянский язык помесь английского и русского. Уж лучше б на английском говорил.
@nanoqsh
@nanoqsh 2 жыл бұрын
Называется программистский
@xshady2967
@xshady2967 11 ай бұрын
аахахахах
Каха ограбил банк
01:00
К-Media
Рет қаралды 2,8 МЛН
Василиса наняла личного массажиста 😂 #shorts
00:22
Денис Кукояка
Рет қаралды 6 МЛН
Countries Treat the Heart of Palestine #countryballs
00:13
CountryZ
Рет қаралды 27 МЛН
FPGA - это не только FPGA
48:54
Yuri Panchul
Рет қаралды 2,1 М.
3. Трейты. Программирование на Rust (весна 2019)
1:42:31
1. Введение (Программирование на Rust)
1:41:43
Computer Science Center
Рет қаралды 203 М.
Стили обучения - это миф [Veritasium]
13:12
Vert Dider
Рет қаралды 755 М.
Why Rust will keep growing in 2024 [LIVE]
49:13
timClicks
Рет қаралды 1,3 М.
Каха ограбил банк
01:00
К-Media
Рет қаралды 2,8 МЛН