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

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

Пікірлер: 61

  • @vyorkin
    @vyorkin3 жыл бұрын

    каждую лекцию новая кружка)

  • @TheUnitto
    @TheUnitto5 жыл бұрын

    Спасибо больше за курс! Очень странно что так мало подписчиков и просмотров. Ты куда лучше расскаызваешь чем какой то блогер. Единственное что, не всегда хватает бекграунда что бы тебя понять)

  • @Tutankhamen77

    @Tutankhamen77

    3 жыл бұрын

    По-моему, как раз небольшое кол-во просмотров и подписчиков очень легко объяснить сложностью предмета. Лекции по той же Scala тоже, кмк, будут менее популярны лекций по Java.

  • @Tutankhamen77
    @Tutankhamen773 жыл бұрын

    Спасибо автору за лекции!

  • @roman6572
    @roman6572 Жыл бұрын

    Алексей добрый день, спасибо за уроки, все очень понятно и приятно тебя слушать)

  • @alogic75
    @alogic75 Жыл бұрын

    43:58 Алексей внёс вклад в разработку Cargo. Уважаю.

  • @Shwed1982

    @Shwed1982

    Жыл бұрын

    так алексей в карго как раз среди контрибьюторов по коммитам на 5 месте, а вот в самом компиляторе раста уже на первом) а rust-analyzer он вообще чуть ли не в одно лицо сам написал. сам только недавно это узнал, очень порадовался. талантище!

  • @PaulGanarara

    @PaulGanarara

    11 ай бұрын

    @@Shwed1982 вот это уровень

  • @user-gw6df6ns7e
    @user-gw6df6ns7e5 жыл бұрын

    Насчет зависимостей - хорошее решение. В java появились модули решающие проблему с разными версиями библиотек. Но полно старого кода, где от транзитивных зависимостей получаешь кучу проблем.

  • @qsyatmcode7806
    @qsyatmcode78062 ай бұрын

    Таймкоды от Я.Б.: 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
    @KirillLykov2 жыл бұрын

    Помимо коробочной системы сборки (вместо make/cmake/bjam/basel/... C++), я бы сказал про наличие встроенного менеджера пакетов (в с++ это мог быть dpkg, Conan, etc)

  • @oriontvv
    @oriontvv2 жыл бұрын

    8:22 разве вместо one.rs и nested.rs не должны быть mod.rs?

  • @alekseykladov1144

    @alekseykladov1144

    2 жыл бұрын

    Ох нет. Тут история такая -- изначально были только mod.rs. Потом, в районе Rust 2018, добавили альтернативный способ, без mod.rs, как раз то, что я на слайде показываю. Изначально был план задепрецировать mod.rs, но это как-то не срослось, и в итоге в Rust есть и "новая", и "старая" версия. Я в лекциях специально только про новую рассказываю, чтобы мозги не существенной информацией не пудрить.

  • @user-mw2yb1fn2k
    @user-mw2yb1fn2k16 күн бұрын

    На 11:34 вместо `--create-type` нужно `--crate-type`

  • @user-gw6df6ns7e
    @user-gw6df6ns7e5 жыл бұрын

    Надо писать компилятор 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

  • @bonafilmo
    @bonafilmo5 жыл бұрын

    Существует ли в 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 конечно уже использую по полной).

  • @bubblesort6368
    @bubblesort63682 жыл бұрын

    Вот все классно в 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 в качестве первого аргумента и лежит она отдельно, в своём месте исполняемого файла. В самих объектах никакой информации о трейтах нет, за одним исключением, когда мы хотим добиться динамической диспетчеризации. Но тогда методы будут содержаться в указатели на этот объект, даже не в самом объекте, и таблица виртуальных методов будет только одной иерархии трейтов, а не вообще всех реализованных

  • @KirillLykov
    @KirillLykov2 жыл бұрын

    слово "могущественно" особо доставляет, видимо как перевод с mighty

  • @atommixz
    @atommixz5 жыл бұрын

    Народ, пошарьте все ДЗ, ну как без ДЗ то, ничо не понятно

  • @flashmozzg

    @flashmozzg

    5 жыл бұрын

    Там задания более-менее следуют "Ray Tracing in One Weekend" (pdf гуглится), правда с rust-овой спецификой. Пошарить задания наверное стоит просить авторов курса, т.к. это их труд.

  • @atommixz

    @atommixz

    5 жыл бұрын

    @@flashmozzg да мне уже ответили в чате в телеграмме, еслиб они сразу написали что делайте ДЗ по этой книжке - ну вопросы бы отпали

  • @user-mi8es4ur5w
    @user-mi8es4ur5w4 жыл бұрын

    Лекции очень классные. Немытая доска на фоне - как нечищенные ботинки (не к Алексею, а организаторам).

  • @adsick_ua

    @adsick_ua

    4 жыл бұрын

    а мне доска нравится

  • @PaulGanarara

    @PaulGanarara

    11 ай бұрын

    кому вообще какое дело до чистоты моих ботинок? мы что, в Москва слезам не верит?

  • @alexgorodecky1661
    @alexgorodecky16615 жыл бұрын

    Система модулей 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
    @theden1111115 жыл бұрын

    А мне не понравился ведущий, бубнит для себя, как будто просто сам повторяет что знает

  • @desprit

    @desprit

    3 жыл бұрын

    И зачем тогда смотрели? Ваш комментарий аналогичного содержания и под лекцией #3 был.

  • @xshady2967

    @xshady2967

    10 ай бұрын

    :/

  • @ilyadruzh
    @ilyadruzh3 жыл бұрын

    Что ему мешает говорить на русском языке? Сложно слушать этот россиянский язык помесь английского и русского. Уж лучше б на английском говорил.

  • @nanoqsh

    @nanoqsh

    2 жыл бұрын

    Называется программистский

  • @xshady2967

    @xshady2967

    10 ай бұрын

    аахахахах

Келесі