Экстремальный Rust

Поделиться
HTML-код
  • Опубликовано: 25 апр 2024
  • В этом видео я напишу свой Аллокатор, который работает с любым массивом байт, который пользователь предоставил по уникальной ссылке. Так же я покажу один из способов применить этот аллокатор в ходе решения задачи с сайта leetcode.
    В этом видео я так же немного затрону работу оперативной памяти, адреса, размеры и выравнивание (alignment) структур. Видео так же будет интересно любому, кто интересуется языком Rust, поскольку я показываю много моментов, встречающихся в любых проектах - конфигурация, тесты, модули, трейты.
    Видео вдохновлено этой статьёй (Отсюда взята идея подобного аллокатора): matklad.github.io/2022/10/06/...
    ----------
    Поддержать: boosty.to/bitwiseuwu
    Код найдёте здесь: github.com/IoaNNUwU/hardcore_...
    ----------
    Это видео может быть интересно любому, кто интересуется системными языками программирования, любит изучать низкоуровневые концепции и работу железа - процессора, оперативной памяти, видеокарты. Если вы знаете или хотите изучить языки C++, Go, Zig - Rust станет отличным дополнением, а возможно даже сможет сместить ваш интерес в свою сторону за счёт таких преимуществ, как безопасность памяти, потокобезопасность, современный API. Rust так же станет прекрасным языком, если вы хотите лишь немного прикоснуться к системному программированию, изучить работу железа, но при этом не оставлять высокоуровневые, простые в использовании языки, такие как Python, Java, JavaScript, Kotlin, Lua.
    На этом канале вы найдёте множество видео как на тему системного программирования, так и более общих концепций программирования, таких как ООП, системный дизайн и множество других тем, которые стоят того, чтобы их обсудить.
  • НаукаНаука

Комментарии • 18

  • @snatvb
    @snatvb 6 дней назад +1

    ты шо, сума сошел, судя по голосу, ты молодой парень, а шаришь так хорошо, мой тебе респект

  • @NeatDeveloper
    @NeatDeveloper 7 дней назад +2

    Наконец то я тебя нашёл. Русскоязычный ютубер что снимает про Rust lang!

  • @myaccount2611
    @myaccount2611 7 дней назад +1

    11:55. Цикл можно заменить на
    if temp % align != 0 { temp += align - temp % align; }

  • @user-mi6kq5ff8r
    @user-mi6kq5ff8r 23 дня назад +1

    Хорошее видео, спасибо за контент

  • @thampasaurusrex3716
    @thampasaurusrex3716 23 дня назад +1

    Круто!

  • @tgitw-tq6iu
    @tgitw-tq6iu 5 дней назад

    А самое смешное, что код зависит от стандартной библиотеке в случае когда её нет.

  • @user-fw2hi5ho1g
    @user-fw2hi5ho1g 6 дней назад

    Обязательно ли в функции alloc вводить дополнительный lifetime 'item? Нельзя ли результату указывать просто 'mem, говоря, что результат не переживёт исходный массив? Тем более, что item потребляется функцией alloc. Или я чего-то не понимаю?

  • @norskiy9765
    @norskiy9765 24 дня назад

    Неужели!

  • @user-ud8jd8kg9y
    @user-ud8jd8kg9y 6 дней назад

    Не могу разобрать, Гэндальф. Тут что-то на эльфийском.

  • @kuqmua755
    @kuqmua755 4 дня назад

    А кто аллицирует инстанс аллокатора?

  • @random6959
    @random6959 17 дней назад +2

    Есть в планах осветить тему макросов?

    • @bitwiseuwu
      @bitwiseuwu  12 дней назад

      Вполне возможно, тема очень интересная и недавно я снова в неё погружался. Добавлю в список запланированного!

  • @scarlatum
    @scarlatum 22 дня назад +1

    7:50 - Если я правильно понимаю, и не где не путаюсь, то компилятор раста жалуется на то, что мутабельное значение может быть изменено во время сплита, верно? Если так, то эта идея с тем, чтобы "на время" заменить значение self.remaining_mem просто на пустышку, чтобы удовлетворить компилятор, как-то слишком у меня много вопросов вызывает...

    • @user-kx5ih9kw1x
      @user-kx5ih9kw1x 22 дня назад +4

      Проблема в том, что self.remaining_mem - это поле структуры self. Мы можем производить над ним операции типа .split_at_mut(), пока нам не нужно перезаписать это поле в самой структуре. То есть мы получаем ссылки, зависящие от этого поля, потом само поле изменяем, после чего ссылки инвалидируются, поэтому компилятор это запрещает. В Rust часто приходится делать что-то подобное, трейты Copy и Default помогают в таких ситуациях.

  • @nikita_x44
    @nikita_x44 21 день назад +1

    16:08. нельзя создавать даже временные объекты с некорректным инваниантом. в данном случае, нужно использовать `core::slice::from_raw_parts_mut`.

    • @bitwiseuwu
      @bitwiseuwu  21 день назад

      Согласен, слайс всегда казался мне промежуточным типом, поэтому я неаккуратно обращаюсь с длиной. Надо будет повнимательнее взглянуть на модуль core::slice. Спасибо за замечание!

  • @tgitw-tq6iu
    @tgitw-tq6iu 5 дней назад

    Ахренительный код с сотней уб, падениями на каждый чих и миллионом асейфов. Ну и, конечно же, как обычно кода ничего нет.