Bitωise
Bitωise
  • 7
  • 24 892
Rust без Наследования
В этом видео я расскажу о реализации наследования в Rust, почему нам приходится думать о нём и как без сложностей перевести свой код с объектно-ориентированных языков на Rust.
----------
Поддержать: boosty.to/bitwiseuwu
Мой GitHub: github.com/IoaNNUwU
----------
Это видео может быть интересно любому, кто интересуется системными языками программирования, любит изучать низкоуровневые концепции и работу железа - процессора, оперативной памяти, видеокарты. Если вы знаете или хотите изучить языки C++, Go, Zig - Rust станет отличным дополнением, а возможно даже сможет сместить ваш интерес в свою сторону за счёт таких преимуществ, как безопасность памяти, потокобезопасность,
современный API. Rust так же станет прекрасным языком, если вы хотите лишь немного прикоснуться к системному программированию, изучить работу железа, но при этом не оставлять высокоуровневые, простые в использовании языки, такие как Python, Java, JavaScript, Kotlin, Lua.
На этом канале вы найдёте множество видео как на тему системного программирования, так и более общих концепций программирования, таких как ООП, системный дизайн и множество других тем, которые стоят того, чтобы их обсудить.
มุมมอง: 3 669

วีดีโอ

Полиморфизм не снижает производительность
มุมมอง 3.2K21 วันที่ผ่านมา
В этом ролике я расскажу о полиморфизме, его видах и способах реализации как в системных, так и объектно-ориентированных языках. По запросам зрителей я всё же сделал бенчмарки. Результат: реализация через enum быстрее в 2, а иногда и в 6 раз: github.com/IoaNNUwU/poly-bench Поддержать: boosty.to/bitwiseuwu Мой гитхаб: github.com/IoaNNUwU Это видео может быть интересно любому, кто интересуется си...
Философия Unsafe Rust
มุมมอง 9Kหลายเดือนก่อน
В этом ролике я расскажу о философии unsafe & safe Rust, для чего применяется ключевое слово unsafe. Поддержать: boosty.to/bitwiseuwu Мой гитхаб: github.com/IoaNNUwU Это видео может быть интересно любому, кто интересуется системными языками программирования, любит изучать низкоуровневые концепции и работу железа - процессора, оперативной памяти, видеокарты. Если вы знаете или хотите изучить язы...
Экстремальный Rust
มุมมอง 4.2Kหลายเดือนก่อน
В этом видео я напишу свой Аллокатор, который работает с любым массивом байт, который пользователь предоставил по уникальной ссылке. Так же я покажу один из способов применить этот аллокатор в ходе решения задачи с сайта leetcode. В этом видео я так же немного затрону работу оперативной памяти, адреса, размеры и выравнивание (alignment) структур. Видео так же будет интересно любому, кто интерес...
Времена жизни в Rust
มุมมอง 3K3 หลายเดือนก่อน
В этом видео мы поговорим о временах жизни в языке программирования Rust. На эту тему в интернете существует огромное количество материала, но каждый понимает её по-своему - в основном неправильно. Я постарался собрать и передать максимально простым способом основную суть времён жизни, или лайфтаймов в Rust. Для этого хорошо подходит визуализация: - синий прямоугольник обозначает время жизни ст...
Начала итераторов в Rust
มุมมอง 1.4K4 หลายเดือนก่อน
В этом видео мы поговорим об основах итераторов в языке программирования Rust: Зачем нужны итераторы, какие есть виды итераторов (отличия методов iter, iter_mut и into_iter в API вектора), как их правильно использовать. boosty.to/bitwiseuwu github.com/IoaNNUwU Это видео может быть интересно любому, кто интересуется системными языками программирования, любит изучать низкоуровневые концепции и ра...

ความคิดเห็น

  • @user-jx4jb4of3c
    @user-jx4jb4of3c 2 วันที่ผ่านมา

    dyn Trait - Zero sized type. Для работы с ним тебе обязательно нужен толстый указатель, но только один. Зачем два в Vec<&dyn Component>? Может так Vec<dyn Component>

  • @user-su4gb8ge2m
    @user-su4gb8ge2m 3 วันที่ผ่านมา

    Не нужно париться используйте js чистый

  • @gregandark8571
    @gregandark8571 6 วันที่ผ่านมา

    Rust = Zayebis!

  • @n1ret
    @n1ret 7 วันที่ผ่านมา

    Спасибо большое, искал, как это работает на всяких указателях и тп. Не находил

  • @user-iv8rf6he6w
    @user-iv8rf6he6w 7 วันที่ผ่านมา

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

    • @Mytest437
      @Mytest437 2 ชั่วโมงที่ผ่านมา

      Тебе кружок надо было на экране нарисовать и числа конкретные просчитать? Урок геометрии преподать?)

  • @AlexeiCheban
    @AlexeiCheban 7 วันที่ผ่านมา

    14:45 pub unsafe fn new_unchecked - зачем его сделали публичным?

  • @olegdayo
    @olegdayo 8 วันที่ผ่านมา

    Кажется, это не наследование, а встраивание (embedding), частный случай композиции

  • @CaXaPHblN_HerP
    @CaXaPHblN_HerP 8 วันที่ผ่านมา

    Чувак! Ты как раз вовремя! Я только учить начал

  • @goodpins
    @goodpins 9 วันที่ผ่านมา

    Наконец-то нормальное объяснение времени жизни с структурами🤏🤏🤌🤌👍👍👍

  • @psyunicorn4592
    @psyunicorn4592 9 วันที่ผ่านมา

    Вообще, если правильно помню, то Vec, как раз так получает функционал слайса, формируя его из указателя на первый элемент и длины

  • @lwind4884
    @lwind4884 10 วันที่ผ่านมา

    Большое спасибо за видео! Однако должен отметить, что на 7:52 наследование прямоугольника от квадрата и наоборот нарушает LSP (Liskov Substitution Principle).

  • @havoc_covenant
    @havoc_covenant 10 วันที่ผ่านมา

    Спасибо за контент по Rust'у :)

  • @BYGUR
    @BYGUR 11 วันที่ผ่านมา

    С каких это пор Ссылка в C++ является "более безопасной", чем указатель? Синтаксис обязывает всегда прописывать указатель, как указатель, в т.ч. при передаче этого указателя в функцию. Если же функция принимает ссылку, то при передаче какой-то переменной в эту функцию ты можешь не знать об этом, потому что компилятор при этом никак не чихнет. Т.е. передающий переменную считает, что она после работы функции не меняется, однако функция имеет прямой доступ к внешней переменной и меняет ее при необходимости. Офигенно "более безопасно". Со ссылками наоборот нужно работать более аккуратно. Ссылка - это скорее синтаксический сахар, но уж никак не безопасная замена указателей.

  • @goodpins
    @goodpins 12 วันที่ผ่านมา

    Слишком много слов, зачем-то убеждений и попыток чего-то доказать. Лучше бы меньше минут ролик шел чем это

    • @linkernick5379
      @linkernick5379 11 วันที่ผ่านมา

      Впервые смотрите обучающие видеоролики? Понимаю 😊

    • @goodpins
      @goodpins 11 วันที่ผ่านมา

      @@linkernick5379 да, ведь я понимаю зачем нужна композиция и различаю композицию от наследования. Мне интересно было узнать подход раста и узнать о наличии синтаксического сахара как в го

  • @user-gw8bx4pm2o
    @user-gw8bx4pm2o 13 วันที่ผ่านมา

    trait

  • @rkc137
    @rkc137 13 วันที่ผ่านมา

    как мне кажется слово НЕПРАВИЛЬНЫЙ в контексте каких то подходов не очень уместно

    • @bitwiseuwu
      @bitwiseuwu 12 วันที่ผ่านมา

      Я согласен, но здесь речь скорее про язык Rust, поэтому под неправильным я понимаю то, чего не должно быть в языке.

  • @dimitriywhite7728
    @dimitriywhite7728 13 วันที่ผ่านมา

    Наконец-то годнота

  • @drsgf32a12
    @drsgf32a12 13 วันที่ผ่านมา

    Enum dispatch ❤ Можно было рассмотреть работу с dyn в многопоточной среде

  • @ZA_CCCP
    @ZA_CCCP 13 วันที่ผ่านมา

    Хах, game dev на Rust. Смешно)

    • @user-qt5hy3vn5p
      @user-qt5hy3vn5p 12 วันที่ผ่านมา

      😂 ты свой ник то видел? Смешно ему

    • @Son0fBeelzebub
      @Son0fBeelzebub 12 วันที่ผ่านมา

      ​@@user-qt5hy3vn5p не думаю, что его смущает его же ник. сейчас красно-коричневая дупа запылает ещё

    • @bitwiseuwu
      @bitwiseuwu 12 วันที่ผ่านมา

      Почему же? Сам раст как системная, безопасная альтернатива C++ в играх кажется отличным решением. Особенно если игра содержит моддинг и мы не хотим давать пользователю небезопасный C++ API. Я использовал игровой движок Bevy и могу сказать, что он достаточно простой и понятный даже новичкам. Каждое обновление приносит новые возможности, которые уже сейчас позволяют делать красивые миры. Там нет визуального редактора как в юнити, Godot или Unreal, но мне и без него было вполне комфортно.

    • @valeryv3194
      @valeryv3194 6 วันที่ผ่านมา

      @@bitwiseuwu Bevy, можете больше рассказать о нем, как в него ворваться, а если у Вас есть опыт, поделитесь с новичками. Спасибо за ваши видео. Лайк, подписка.

  • @kjk254
    @kjk254 13 วันที่ผ่านมา

    базовая идея ооп в сpp и java это возможность создания фреймворка одними людьми и компонент для этого фреймворка другими. в фреймворк case в switch не добавишь. go и rust плохи в этой парадигме. правда на сервере паттерн фреймворк-компоненты не востребованы практически вообще.

    • @bitwiseuwu
      @bitwiseuwu 12 วันที่ผ่านมา

      Именно такой пример есть в видео. Библиотека даёт трейт Draw, пользователь реализует этот трейт и добавляет в список компонентов (с помощью библиотечной функции) как dyn Draw. Но другие реализации существуют, если нужна скорость и вы можете изменить исходный код самой библиотеки. Как я говорил в видео про полиморфизм, зачастую внутренний код организаций можно менять сколько угодно, поэтому это не проблема. Макросы и особые трейты могут упростить код и сделать его таким же юзабельным как и динамическая реализация.

    • @kjk254
      @kjk254 10 วันที่ผ่านมา

      @@bitwiseuwu пример с Draw прост до бесполезности. интересно можно ли например переложить библиотеку QT на rust и чтобы всё оставалось читаемо и расширяемо. как по мне так нет. поэтому например в андроид используется котлин с нормальным ооп, а не го с обрезаным.

  • @user-do4gc6ys5y
    @user-do4gc6ys5y 13 วันที่ผ่านมา

    Проверка на простоту возможна за O(sqrt(n)), а не за O(n) как на 19:27. for (d = 2; d * d <= n; ++d) { if (n % d == 0) { return kNotPrime; } } return kPrime;

  • @fake-lavash
    @fake-lavash 13 วันที่ผ่านมา

    Спасибо за видео :>

  • @user-nn1oe2vf9e
    @user-nn1oe2vf9e 13 วันที่ผ่านมา

    Прекрасное видео! Очень хотелось бы поподробнее про ECS)

  • @white5493
    @white5493 13 วันที่ผ่านมา

    спасибо за видео! обычно наследование помогает бороться с дублированием кода, а в Rust как будто надо каждый impl писать заново для каждого struct. особенно если используются атрибуты внутренние. можно подробнее как в Rust это решать?

    • @mk72v2oq
      @mk72v2oq 13 วันที่ผ่านมา

      Ответ дан в самом видео на 5:35.

    • @white5493
      @white5493 13 วันที่ผ่านมา

      @@mk72v2oqне очень понял как для этого макросы использовать

    • @white5493
      @white5493 13 วันที่ผ่านมา

      @@mk72v2oq не совсем понял как макросы помогают. но в целом я понимаю как это сделать через enum, но не уверен. кажется все равно надо будет дублировать код, так как неочевидно что каждая struct имеет нужные атрибуты

    • @bitwiseuwu
      @bitwiseuwu 13 วันที่ผ่านมา

      Как я сказал в видео, дублирование кода не всегда плохо, потому что мы получаем полный контроль над каждой написанной строчкой, вместо автоматических реализаций в случае наследования. В Rust для снижения повторений используются макросы. Отличный крейт для ознакомления crates.io/crates/impl-for он позволяет генерировать одинаковые impl блоки для разных типов с помощью макроса.

    • @white5493
      @white5493 11 วันที่ผ่านมา

      @@bitwiseuwu понял, спасибо!

  • @h45h_
    @h45h_ 13 วันที่ผ่านมา

    статический диспатч не считается за полиморфизм? something: impl MyTrait по сути компайл тайм полиморфизм же, ты используешь одну функцию, хоть в итоге это всё и раздувает приложение копированием функции под разные типы, или не прав?

    • @mk72v2oq
      @mk72v2oq 13 วันที่ผ่านมา

      Считается, это называется параметрический полиморфизм. И он на самом деле и есть "истинный" тип полиморфизма. Динамический диспатч иначе называют Ad-Hoc полиморфизмом, который является "грязным" типом полиморфизма.

    • @bitwiseuwu
      @bitwiseuwu 12 วันที่ผ่านมา

      impl Trait - это удобная штука, о ней можно думать как о дженериках, но там гораздо больше интересного. Обязательно про неё будет отдельное видео

  • @user-bh2ot5ks8f
    @user-bh2ot5ks8f 13 วันที่ผ่านมา

    Как то тяжело зашло и не факт что правильно понялось.

  • @ArXAnGeL2010
    @ArXAnGeL2010 13 วันที่ผ่านมา

    лайк не глядя

  • @cryptoworkdonkey
    @cryptoworkdonkey 13 วันที่ผ่านมา

    Отличное лого у видео.

    • @frexil2210
      @frexil2210 12 วันที่ผ่านมา

      Это заставка а не лого

    • @cryptoworkdonkey
      @cryptoworkdonkey 12 วันที่ผ่านมา

      @@frexil2210 , mierrenouker.

  • @snatvb
    @snatvb 13 วันที่ผ่านมา

    я понял кого напоминает мне твой голос и манера разговора - onigiri есть такой крутой блогер)

    • @kirillpupkov6314
      @kirillpupkov6314 13 วันที่ผ่านมา

      Вообще не похоже

    • @temurumaruai
      @temurumaruai 13 วันที่ผ่านมา

      Похоже только манера но не сам голос

    • @snatvb
      @snatvb 13 วันที่ผ่านมา

      @@temurumaruai оч похож, вы его первый ролик откройте, он не одинаковый, я не говорю ж что это один человек) я говорю, что похож)

    • @Partiz
      @Partiz 13 วันที่ผ่านมา

      а мне напоминает голос Ёжика из смешариков :)

  • @101picofarad
    @101picofarad 13 วันที่ผ่านมา

    О! Увидел код, который ни когда не фигурирует в моих рабочих программах! Ожидать переполнения инта в программе после матоперации? Зачем? Просто проверяй входы на соответствие разрешенному диапазону, такому, чтобы операция с числами из диапазона не приводила к переполнению.

  • @zeOnni
    @zeOnni 14 วันที่ผ่านมา

    Все правильно. Я давно говорил что if (item.y > 0) это полиморфизм.

  • @winstonmdp6565
    @winstonmdp6565 24 วันที่ผ่านมา

    Классная картинка, но нужен углублëнный rust

  • @IlyaDenisov
    @IlyaDenisov 25 วันที่ผ่านมา

    С одной стороны хорошо, что автор в конечном счёте предлагает опираться не на туманную терминологию, которую, как видно из комментариев, многие понимают по-разному, что делает её не эффективной в плане передачи идей (независимо от того, чья это вина), а предлагает вместо этого смотреть на суть и на конкретику, анализировать реальный случай / задачу. С другой стороны, есть пара моментов, которые считаю нужным озвучить. Во-первых, утверждение, что enum не влияет на скорость работы - ложное. Если в коллекции будут неким случайным образом чередоваться типы, branch prediction будет постоянно лажать, что в свою очередь будет приводить к потере многих циклов. Кроме того, если для разных типов операция, выполняемая в цикле, потребует разных по объёму данных, то либо они будут храниться по ссылке, что будет приводить к промахам кэша, и опять потере многих циклов, либо элементы в списке будут занимать наибольший размер из задействованных вариантов, что также означает неэффективное использование кэша процессора. На эту тему можно посмотреть ставшее уже классическим th-cam.com/video/rX0ItVEVjHc/w-d-xo.html Во-вторых, пример с выводом на экран адреса - это плохой пример, т.к. вероятность, что адрес с портом действительно должен выводиться так же, как адрес без порта, я бы оценил как маловероятную, скорее всего это ошибка. И хоть можно подобрать правильный пример для иллюстрации, то что плохой пример просочился в видео разбор, на мой взгляд, наглядно иллюстрирует, что нарушения Liskov substitution principle повсеместны, то есть так уж выходит, что подход с абстрактными типами / обобщённым программированием часто генерирует проблемы (тут можно проводить отдельные психологические исследования, что за дефект в нашем человеческом мышлении к этому приводит, а можно просто принять как данность), а значит неплохо бы задуматься - а стоит эта кажущееся "упрощение" кода того, чтобы повышать вероятность ошибок, которые будут накапливаться и создавать скрытые проблемы в проекте по мере его роста, пока в один день не выстрелят в ногу разработчикам?

    • @nanoqsh
      @nanoqsh 15 วันที่ผ่านมา

      Проблема всего тех-ютюба в целом. Короткие ролики неизменно упрощают многие вещи, а длинные и содержательные лекции, к сожалению, посмотрят куда меньше людей. Тем не менее, нужно отдать должное автору, материал качественно проработан и нет никакой откровенной дичи, что часто можно увидеть на других каналах

  • @timurgaliev1162
    @timurgaliev1162 25 วันที่ผ่านมา

    Капец тут ебалда в комментах разбушевалась))) Так гореть начал, что накатал 5+ разных комментов)))