11. unsafe. Программирование на Rust (весна 2019).

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

Пікірлер: 14

  • @q3yk945
    @q3yk9454 жыл бұрын

    1:15:10 - Проще говоря, проблема в том что мы пытаемся записать в &mut self ссылку, полученную из того же &mut self. Т.е. пытаемся сделать self referential тип.

  • @wa7sa34cx
    @wa7sa34cx2 жыл бұрын

    Нифига не понятно, но ооооочень интересно 🧐

  • @user-yk6sp5of6t
    @user-yk6sp5of6t Жыл бұрын

    1:36:52 После фокуса на то, что даже уникальные ссылки ковартианты по собственному лайфтайму, всё равно сказал, что наличие PhantomData

  • @user-jx4jb4of3c
    @user-jx4jb4of3c2 жыл бұрын

    Про subtyping ужасно сумбурно пояснил. Хоть и в rustonomicon это тоже подано сложно, но все равно понял. Хороший пример такой можно привести из наследования C++. Наследуемый/родительский тип всегда меньше чем дочерний, поскольку дочерний содержит и данные родителя и свои уникальные. По этой логике Красноярский край является подтипом города Красноярска. С lifetype subtyping та же логика. В растономиконе, тоже пример был географический.

  • @luna_moonspeak
    @luna_moonspeak5 жыл бұрын

    Оговорка ) 31:45 "Если индекс 1 и индекс мут равны...", а должно быть "если индекс 1 и индекс 2 равны..."

  • @prigl4548
    @prigl45483 жыл бұрын

    В примере с реализацией IterMut из слайса с сырыми указателями begin и end в состоянии не очень понятно, откуда берется гарантия, что их потом можно разыменовывать. Хоть они и не объявлены как pub, их все равно хотя бы в текущем модуле можно изменить на произвольные значения, для чего unsafe не потребуется. А вот метод, который их будет в unsafe разыменовывать, получается что должен полагаться на корректность кода в safe (или даже на отсутствие такого кода), что как бы противоречит первоначальной идее. В более общем случае с сырыми указателями возникают новые инварианты, которые unsafe код не может проверить, а safe код может нарушить. Что-то ключевое в понимании этой философии у меня ускользает.

  • @nanoqsh

    @nanoqsh

    3 жыл бұрын

    Идея в том, что unsafe распространяется на весь модуль. Так что да, unsafe полагается на соседний safe код и наоборот. Поэтому нужно стараться изолировать unsafe код в как можно более простом и маленьком модуле. Подробно про это рассказывается на следующей лекции

  • @prigl4548

    @prigl4548

    3 жыл бұрын

    @@nanoqsh да, спасибо. Следующая лекция и правда ответила на мой вопрос.

  • @snatvb
    @snatvb4 жыл бұрын

    идеологически, почти, unsafe выполняет роль io в хаскеле)

  • @alekseykladov1144

    @alekseykladov1144

    3 жыл бұрын

    Не уверн, что соглашусь -- для хаскелевского IO нет аналога safe abstraction. Нельзя оберунть заражённый IO интерфейс в sans-IO. А главная мысль растового usnafe как раз в том, что сверху unsafe можно сделать не-usnafe абстракцию. Тут аналогия скорее с unsafePerformIO.

  • @olebedev
    @olebedev5 жыл бұрын

    Просто любопытно, а есть те кто понял про "вариантность"? Часто даже слова разобрать невозможно...

  • @codonaft

    @codonaft

    5 жыл бұрын

    Если предварительно что-нибудь посмотреть на эту тему - то понять можно, хотя бы частично. Вот тут разжевано про вариантность в Java: kzread.info/dash/bejne/pqB1qbWMk6zbj9o.html

  • @user-sp9jq3ee7z

    @user-sp9jq3ee7z

    5 жыл бұрын

    Возможно кому-то поможет: ru.wikipedia.org/wiki/Ковариантность_и_контравариантность_(программирование)

  • @user-jx4jb4of3c
    @user-jx4jb4of3c2 жыл бұрын

    Сразу понятно почему не стал объяснять контравариантность ф-ии по аргументу и результату. Ну это же очевидно. А почему не объяснил? Потому что вообще не раскрыл термин variance который можно просто стащить с rustonomicon-а

Келесі