Философия Unsafe Rust

แชร์
ฝัง
  • เผยแพร่เมื่อ 8 พ.ค. 2024
  • В этом ролике я расскажу о философии unsafe & safe Rust, для чего применяется ключевое слово unsafe.
    ----------
    Поддержать: boosty.to/bitwiseuwu
    Мой гитхаб: github.com/IoaNNUwU
    ----------
    Это видео может быть интересно любому, кто интересуется системными языками программирования, любит изучать низкоуровневые концепции и работу железа - процессора, оперативной памяти, видеокарты. Если вы знаете или хотите изучить языки C++, Go, Zig - Rust станет отличным дополнением, а возможно даже сможет сместить ваш интерес в свою сторону за счёт таких преимуществ, как безопасность памяти, потокобезопасность, современный API. Rust так же станет прекрасным языком, если вы хотите лишь немного прикоснуться к системному программированию, изучить работу железа, но при этом не оставлять высокоуровневые, простые в использовании языки, такие как Python, Java, JavaScript, Kotlin, Lua.
    На этом канале вы найдёте множество видео как на тему системного программирования, так и более общих концепций программирования, таких как ООП, системный дизайн и множество других тем, которые стоят того, чтобы их обсудить.
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 94

  • @Sneg00vik
    @Sneg00vik 11 วันที่ผ่านมา +21

    Свежий русскоязычный канал с не хелоуворлд роликами про раст? Однозначно плюс!

  • @rkc137
    @rkc137 11 วันที่ผ่านมา +21

    не смотря на всеобщую демонетизацию, малый и узкоспециализированный контент переживает настоящий ренессанс

    • @norskiy9765
      @norskiy9765 4 วันที่ผ่านมา

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

  • @JohnDoe-js3vh
    @JohnDoe-js3vh 14 วันที่ผ่านมา +18

    самое плохое с UB, это когда компилятор может по разному генерить код в зависимости от заданной оптимизации. То же переполнение может нормально работать в дебаг режиме, и перестать работать после релизной компиляции с включенной оптимизацией. Вот ту реально мозг может опухнуть - дебажишь код - всё работает компилишь релизную версию - всё ломается.

    • @MrPusyakaryagin
      @MrPusyakaryagin 9 วันที่ผ่านมา +2

      Было дело, что при выставлении высокой оптимизации gcc падал с segmentation fault, так до сих пор код на проде и работает с низкой оптимизацией.

    • @ac130kz
      @ac130kz 3 วันที่ผ่านมา +2

      а еще веселее, когда автору сего поделия глубоко с высокой колокольни, что его код глючит на -O3 и при этом нормально работает на -O2, хотя часто это кричащий индикатор UB

  • @zoodogood
    @zoodogood 13 วันที่ผ่านมา +3

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

  • @fake-lavash
    @fake-lavash 12 วันที่ผ่านมา +2

    Хорошее видео, желаю удачи с развитием канала :>

  • @B1TLotus
    @B1TLotus 14 วันที่ผ่านมา +4

    Желаю удачи и набрать много много подписчиков, давай больше нам Rusta❤

  • @user-mi6kq5ff8r
    @user-mi6kq5ff8r 13 วันที่ผ่านมา +2

    Хороший материал, комментарий в поддержку канала

  • @white5493
    @white5493 9 วันที่ผ่านมา +2

    очень круто. если в видео будет больше практики, то будет имба. потому что так лучше понятнее

  • @covid-2284
    @covid-2284 14 วันที่ผ่านมา +2

    Это прям круто! Так и продолжай

  • @norskiy9765
    @norskiy9765 4 วันที่ผ่านมา

    Где информацию по расте брал? Какой у тебя был бэкграунд до раста?

  • @user-ml4vl8rk6o
    @user-ml4vl8rk6o 12 วันที่ผ่านมา +1

    Интересно было слушать. Как проводятся проверки времени выполнения кода на примерах rust и c. Просто с помощью функций time?

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

      На самом деле пример в видео несколько приукрашен, потому что очень сложно сравнить производительность именно с функцией print, поскольку скорость функции print_el упирается не в доступ к элементам, а в ввод-вывод. А если рассматривать пример без print, то можно просто сравнить сгенерированный ассемблер, например здесь ( godbolt.org/z/1no3oPKzf ) видно что раст генерирует проверки (ну или просто видно, что в раст много больше инструкций) и ассемблер включает вызовы core::panic::panic_bounds_check для проверки доступа, а здесь ( godbolt.org/z/bcTozj3qh ) добавив условие len < 3, мы видим очень похожий список инструкций от обоих языков.

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

      @@bitwiseuwu я мало понимаю в ассемблере и такой низкоуровневой теме, правильно ли просто сказать что там больше кода и поэтому Раст медленнее?

    • @bitwiseuwu
      @bitwiseuwu  11 วันที่ผ่านมา +1

      ​@@user-ml4vl8rk6o Вообще-то больше интрукций не всегда медленнее, скорее надо смотреть на род инструкций, именно условия (инструкции test, cmp, je) замедляют код. Версия раст генерирует эти условия, а С - нет.

    • @user-ml4vl8rk6o
      @user-ml4vl8rk6o 11 วันที่ผ่านมา

      @@bitwiseuwu понятно, спасибо

  • @specwnm
    @specwnm 10 วันที่ผ่านมา +1

    Ооо, маловато в ру комьюнити растеров-ютуберов. Удачи тебе!

  • @user-el4ht5xi9i
    @user-el4ht5xi9i 14 วันที่ผ่านมา +1

    12:59 кажется инварианты это другое, не "состояния, в которых структура не может находиться", а скорее наоборот

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

      Почему же, например инвариант структуры NonZeroU32 - это то, что она не находится в состоянии, когда её внутреннее число равно 0. Инвариант мутабельной ссылки - нет такого состояния, когда существует ещё одна. Инварианты структур можно описать именно так, но соглашусь, что определение не полное и инварианты - это также правила для отдельных unsafe функций. Тут я скорее пытаюсь объяснить происхождение слова инвариант - то есть не вариант - вариант, который не принимает структура.

    • @nikita_x44
      @nikita_x44 13 วันที่ผ่านมา +3

      инвариант структуры это набор корректных состояний, в которых она может находиться.

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

    2:44 Это с какими опциями оптимизации надо компилировать для такого результата!?

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

    Если честно, в rust такого накрутили, что порой элементарные алгоритмы не получается реализовать недельного курения материалов

  • @zenderlor2669
    @zenderlor2669 10 วันที่ผ่านมา +1

    отличное видео

  • @AntiNEGAtivchik
    @AntiNEGAtivchik 7 วันที่ผ่านมา +1

    Здравствуйте, подскажите что делать изучал раст знаю времена жизни почти полностью прочитал раст бук(дальше вряд ли буду читать там уже по мелоче) Стоит ли продолжать писать на расте мне 14 лет, системное программирование не интересует от слова совсем. Посоветуйте что-то пожалуйста, буду рад ответу!

    • @mister-ace
      @mister-ace 7 วันที่ผ่านมา +1

      если системное программирование не интересует, то не стоит, тем более на расте практически невозможно найти работу, а если и можно, то там только блокчейн; короче, лучше потратить время на более реалистичный язык.

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

      @@mister-ace мне еще до работы 5-6 лет учиться.

    • @tgitw-tq6iu
      @tgitw-tq6iu 7 วันที่ผ่านมา

      Идёшь изучать тайпскрипт, а после если осилишь переключаешься на цпп. В тс много концепций из цпп, либо похожих на цпп.

    • @bitwiseuwu
      @bitwiseuwu  7 วันที่ผ่านมา +2

      Я думаю, что для устройства на работу реалистичнее учить например Go, работу на нём можно найти даже в крупных российских компаниях, а знать надо не очень много. Знания Rust если не позволят устроиться на работу, то прокачают понимание работы железа, что будет явным преимуществом при трудоустройстве. Так же непонятно где будет Rust через 5-6 лет - возможно и не будет такой проблемой устроиться.

    • @tgitw-tq6iu
      @tgitw-tq6iu 7 วันที่ผ่านมา +1

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

  • @andrew_chumakov
    @andrew_chumakov 3 วันที่ผ่านมา

    Подписался. Пили ещё видео по расту 👍

  • @user-cm8pe1zb3h
    @user-cm8pe1zb3h 9 วันที่ผ่านมา +1

    Как насчёт видео про async/await?

    • @bitwiseuwu
      @bitwiseuwu  8 วันที่ผ่านมา +1

      Обязательно будет! Но думаю сначала стоит сделать ролики по базовым концепциям, чтобы не сломать людям голову

  • @norskiy9765
    @norskiy9765 14 วันที่ผ่านมา +5

    А я не любитель раста!!! Я любитель Си!!! Послушай песенку "write in C", советую тебе
    P.s (коммент для продвижения видео, написать просто что-то надо)

  • @B1TLotus
    @B1TLotus 14 วันที่ผ่านมา +1

    👍👍👍

  • @user-qd9lh5vw9i
    @user-qd9lh5vw9i 5 วันที่ผ่านมา

    Крутой видос!

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

    Что-то со звуком, в произношении есть посторонние частоты которые бьют в перепонку уха.

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

    Internal mutability еще есть. Почему он существует? Почему не unsafe вместо него?

    • @bitwiseuwu
      @bitwiseuwu  9 วันที่ผ่านมา +3

      Обязательно будет про это видео, на самом деле interior mutability - это красивое название для обхода ограничений языка с помощью unsafe кода.

  • @DART2WADER
    @DART2WADER 10 วันที่ผ่านมา +2

    Приветствую всех сектантов секты Rust! 😀😃

  • @gilman2056
    @gilman2056 2 วันที่ผ่านมา

    Подпишусь для кол-ва, буду посматривать, в чем смысл раст

  • @ilyasokolov9058
    @ilyasokolov9058 9 วันที่ผ่านมา +1

    А будет как вызвать UB в safe Rust?)))

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

      Это запретная тема, поэтому будем её игнорировать

    • @ilyasokolov9058
      @ilyasokolov9058 8 วันที่ผ่านมา +1

      ​@@bitwiseuwu А кто запретил?) Мне кажется, кто номикон читал, этим уже не напугаешь. Не зря там большой алерт перед чтением весит, что ваша жизнь не будет прежней 😁

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

      Нее. В расте нет UB!! И в ансейфе нет UB больше чем в си!! (Сарказм)

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

    В своей сфере Red Team & Malware development вижу что многие пытаются на расте что то писать. Выглядит отвратительно. Почти весь код в unsafe блоке. Очень многие вещи нельзя сделать. Например я не знаю как в расте заставить положить всю строку на стек(не указатель, а именно весь массив). Вместо того чтобы в .rdata ее располагать. Метапрограммирование и compile time в расте гораздо хуже развито. Я не могу очень многие вещи сделать которые на Плюсах делаются через различные трюки.
    Раст хорош пока он safe rust. С небольшими выходами на unsafe. Но когда у тебя 90% в unsafe. Стоит задуматься об использовании гораздо более удобного, понимаемого и дающего больший контроль языка, Си или плюсы. Писать Windows kernel Mode драйвер на раста это глупость.

    • @tgitw-tq6iu
      @tgitw-tq6iu 7 วันที่ผ่านมา

      Что значит "меньше развито"? Его там в принципе не существуют как и системы типов, которая осталась где-то в доисторической эпохе несмотря на тысячи костылей. Всё это обычно путают с макроснёй неотлаживаемой томрозной и всегда неработающий.
      А в safe rust, хотя такой существует только в головах понятно кого, всё ещё хуже. Рескин сишки еле-еле позволяет байты месить на базовом уровне(дальше этого мало кто ушёл), а вот дальше большие проблемы.

    • @tgitw-tq6iu
      @tgitw-tq6iu 7 วันที่ผ่านมา

      Да и писать какие-нибудь круды проще чем лоулевел потому что это круды, а не потому что раст/иной язык. Хотя о выразительной способности ходят легенды.

  • @sibkit8183
    @sibkit8183 12 วันที่ผ่านมา +1

    Rust на практике решает проблему UB за счет производительности и использования памяти, попробуйте сделать универсальную структуру дерева (TreeNode) :либо Rc либо арена. Может когда-нибудь они допилят борроу чекер, но сегодня его строгость - большая проблема. По моему лучшим решением было бы решать проблемы UB в режиме отладки, с возможностью отладчика выявлять опасные места. По такой концепции идет zig, но он еще очень сырой, и вроде как есть специальные аллокаторы и методики для c/c++, а раст - это огромная плата за безопасность сложностью и производительностью.

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

      Я согласен, но уверен, что многие предпочтут именно отсутствие UB любой ценой, тем более такая ли высокая цена по производительности? Это надо смотреть в каждом отдельном случае. А насчёт сложности я считаю, что использовать Rc проще, чем в ручную заниматься менеджментом всех указателей, ведь в случае ошибки мы получим панику, а не UB. На самом деле иногда Borrow Checker только мешает, деревья - отличный пример, ведь добиться множественного владения в Rust не просто, в связи с этим возникает мысль о том, что следует развивать unsafe Rust, чтобы он мог стать альтернативой Zig. Но я всё же остановлюсь на том, что далеко не весь код состоит из деревьев и жертвовать безопасностью в остальных сферах из-за нескольких неудачных мест не хотелось бы.

    • @nanoqsh
      @nanoqsh 11 วันที่ผ่านมา +3

      Для того, чтобы писать базовые структуры данных по типу деревьев и прочих коллекций - нужен unsafe. Это не баг, а фича. Так ты с одной стороны получаешь минимальный оверхед, а с другой стороны полностью safe публичный api, благодаря которому ты можешь использовать свою структуру данных не парясь на счёт UB и без необходимости дебажить каждый новый код, написанный с твои деревом. Это намного проще, так как большая часть прикладного кода спокойно пишется полностью без unsafe-а.
      Да, придётся запариться и написать структуру данных и хорошо её протестировать, чтобы ансейфти никуда не утекло. Так что без своего любимого отладчика никуда не денешься

    • @nanoqsh
      @nanoqsh 11 วันที่ผ่านมา +2

      И ещё, зачем тебе Box внутри Rc? Это бесполезная двойная косвенность. Rc уже проще. К тому же, честно говоря, RefCell на практике реально нужен очень редко. Та же арена куда более лучшее решение

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

      @@nanoqsh dyn any имеет неизвестный размер во время компиляции, поэтому только RefCell - это же азбука раста, стыдно не знать. А без refcell ничего не выйдет, т.к ссылка на ноду уже есть в другой ноде, без refcell весь смысл пропадает. Арена это тоже не так просто, когда дойдет до итерации по дочерним узлам, получается очень тормозная штука, раз в 10 медленнее чем тоже самое на любом другом языке, включая java и go.

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

      @@bitwiseuwu UB согласен, но раст ведь дает не единственно возможный способ избежать UB. В попытке разобраться с этим borrowchecker я добрался до трейтов DispatchFromDyn и CoerceUnsized, и после этого как-то подостыл к расту. Неоправданно большие трудозатраты для борьбы с borrowchecker-ом. Проблема UB должна решаться другим способом, например отслеживанием узких мест во время отладки.

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

    а как быть с тем что 70% опытных сотрудников потом исправляют свои ошибки? и в 99% случаев не пишут код с первого раза верно?

    • @zerdox4
      @zerdox4 8 วันที่ผ่านมา +4

      лол. к нам менеджер пробрался?

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

      @@zerdox4 может быть да может быть нет....

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา +2

    Враньё про уб на примере функции с переполнением из раст-методички. Если твои вычисления с интами где-то переполняются, то смысла в твоих вычислениях нет - они неправильные. Поэтому ссылаться на то что какое-то уб что-то там делает. Никакого уб там нет, а просто банальный вывод. Ты всегда предполагаешь что твои вычисления не переполняются, если они выдают корректный результат. А уж то, что стандарт не определяет связано именно с этим в основном, а уже во вторую очередь с оптимизациями, переносимостью и прочим. Просто, опять же, невежество и ретрансляция поверий из интернета.

  • @CaiN805
    @CaiN805 13 วันที่ผ่านมา +4

    Вообще ничего не понял, но видно, что автор разбирается в теме

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

      😭А что помешало понять? Я предполагаю, что непонятно будет тем, кто вообще незнаком с языком Rust и не представляет что это за язык. Я стараюсь делать так, чтобы понятно было тем, кто хоть что-то слышал о системных языках и игрался с самим Rust. Может сделать видео типа «Что такое Rust», но мне казалось, что заинтересованные уже давно прознали про этот язык.

    • @CaiN805
      @CaiN805 13 วันที่ผ่านมา +2

      @@bitwiseuwu я не знаком с rust, думал видео будет больше на новичков рассчитано, но видимо, расчет на опытных пользователей, что тоже хорошо, такие видео тоже нужны. Видео про «Что такое Rust» я бы с радостью глянул от знающего человека, вы явно разбираетесь в теме.

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

      ​@@bitwiseuwu привет) я работаю джуном на TS, но интересуюсь другими языками, так что какое-нибудь лёгкое видео по типу что такое Раст было бы интересно)

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

    то что синтаксис доступа к индексу массива паникует по дефолту - огромный минус. это должен быть Option или Result. либо вообще отказываться от этого синтаксиса и написать функцию которая может вызвать панику при доступе. паника не должна вызываться неявно с помощью языковых конструкций

    • @tgitw-tq6iu
      @tgitw-tq6iu 8 วันที่ผ่านมา

      Он не паникует по дефолту. Просто у тебя программа падает везде и всегда. Никакой option/result он быть не может потому что это мусор. Как ты далее сделаешь выражение с этим доступом? `arr[x] + y`? Никак. Да и вообще рассуждать о чём-то в контекста раста не имеет смысла. Всё это сделано чтобы врать, а не чтобы этим пользоваться. Ну и да, стоит не забывать что если бы цпп делал тоже самое, то это бы не считалось и было бы проблемой.

    • @bitwiseuwu
      @bitwiseuwu  8 วันที่ผ่านมา +2

      Для массивов существует специальная функция .get(index), которая возвращает Option. Паника по дефолту - это на мой взгляд вполне хороший подход, ведь выход за границы массива - это наверняка баг, поэтому делать явным обработку бага было бы странно.

    • @bitwiseuwu
      @bitwiseuwu  8 วันที่ผ่านมา +1

      @@tgitw-tq6iu Я вот не пойму, это шутка или ты просто решил комментариев накрутить?

    • @tgitw-tq6iu
      @tgitw-tq6iu 8 วันที่ผ่านมา

      @@bitwiseuwu push в вектор тоже баг?

    • @kuqmua755
      @kuqmua755 2 วันที่ผ่านมา

      @@bitwiseuwu я прекрасно знаю про .get(index). Про панику по дефолту - не соглашусь, вызывающий вашу функцию и программу должен всегда знать на уровне типов где и как она может зафейлится. В случае паники он просто может не знать что ему с этим делать. Ведет к потере информации и невозможности автоматически ее обработать. Это особенно критично когда вы используете ffi и не пишите на расте сами. Плюс паника в цикле может вести к потере информации при тяжелых вычислениях. Одна паника - и все вычисление коту под хвост

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา +2

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

    • @bitwiseuwu
      @bitwiseuwu  8 วันที่ผ่านมา +2

      Ну это же просто неправильно. Стандарт на то и стандарт, что именно он определяет поведение языка и сделать он может это для всех возможных случаев, но специально часть случаев упускает. Компиляторы подстраивают свою реализацию под этот стандарт, не существует какого-то "факта" неопределённого поведения.

    • @tgitw-tq6iu
      @tgitw-tq6iu 8 วันที่ผ่านมา

      @@bitwiseuwu Хорошо, если для языка нужен стандарт, который определяет всё - где стандарт для раста? Получается любая строчка кода на расте УБ ведь там нет определения из стандарта.
      К тому же зачем ты что-то пишешь, если ничего не понимаешь? Стандарт в принципе не способен определять поведение - это невозможно. Как невозможно определить скорость света для всех сред о чём тебе сказали выше.

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา +4

    Никакой раст не решает никакую проблему. Тебя обманули. Раст не допускает УБ потому что он находится вне области определения этого понятия.

  • @anonsd5521
    @anonsd5521 11 วันที่ผ่านมา +2

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

    • @bitwiseuwu
      @bitwiseuwu  10 วันที่ผ่านมา +2

      Легко сказать «больше не допускать», это ведь не так прост, тем-более в случае с UB можно даже никогда не узнать, что оно присутствует. А компилятор раст просто делает обязательным то, что в C++ считается очень хорошей практикой - а именно чёткая модель владения.

    • @anonsd5521
      @anonsd5521 10 วันที่ผ่านมา +1

      @@bitwiseuwu Я думаю если проблема присутствует, то программист должен её видеть при тестирований. Я понимаю в чём недостатки подхода возложить всё на программиста, но не могу не могу игнорировать его плюсы.

    • @user-qt5hy3vn5p
      @user-qt5hy3vn5p 8 วันที่ผ่านมา +2

      @@anonsd5521 аниме на аве - мать в UB канаве

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา +1

    Никакое условие if не сравнивает производительность кода. Ты врёшь. Даже если там что-то сравнялось это просто следствие того что оптимизатор цпп-компилятора смог убрать проверки. Но работает это только в примитивных примерах. К расту никакого отношения не имеет. К тому же такой код никто не пишет.

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา +1

    Далее он опять врёт о том что нужен язык си для взаимодействия с ОС. Никакой язык си ненужен для взаимодействия с ОС. Си просто может с ней взаимодействовать, а ты нет. И поэтому ты используешь си. Как и жава. И чтобы оправдать свою неспособность ты врёшь. Из этой чуши не следует существование ансейфа.
    Ансейф существует только потому что никакого сейф-раста и гарантий фентезийных тоже. Это не полноценный язык даже по меркам жаваскрипта. Поэтому его область применения крайней ограничена и на самом деле неявно вызывает тысячи ансейф-кода(да, да написанного на расте). Примерно точно так же как питон.
    А т.к. это пастве знать необязательно создаются легенды про "нужно си для ОС", "нужен ансейф для какой-то лоулевел работы". Всё это враньё.

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา +1

    Врёт про "причина всегда в ансейф-блоке". Это, мало того, что не имеет смысла. Ведь причина чего-либо всегда в коде, который написан снизу, а не сверху. А враньё это не поэтому, а потому что никакой баг никогда в ансейф-блока не ищется. Просто данный персонаж скрипторебёнок, который ничего не знает. Проблема как раз таки в окружающем коде и том как разные блоки взаимодействуют друг с другом. Инвариант существуют в коде выше и в том как ты его вызываешь, а не в блоке. Здесь он тоже наврал. И эти нарушения ищутся в коде выше, а не в блоке.

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา

    Опять враньё про панику. То, что паника сделана поверх ворованных у цпп-компилятора исключениях(потому что раст собирается цпп-компилятором) это не означает возможность восстановится. Исключения нужно не просто украсть, а реализовать код таким образом чтобы он был корректен. Никакой раст код не является таковым. Аналогично паника ничем не отличается от УБ. Во-первых потому что паника уже УБ просто это понятие не определяется. Ты так же не знаешь кода и где твоя паника вылетит и что произойдёт с программой. Да и работает она просто потому, что раст собирается конкретным цпп-компиляторов для которого всё это не является УБ. Вообще применение этого понятия к расту некорректно. И всё состояние твоей программы после паники УБ в отличии от цпп после исключения. Опять же если код безопасен для исключения, а цпп он безопасен, а в расте нет.

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา +1

    Какой же клоун на 18минуте рассказывающий про какие-то инварианты в ансейфе и то, что это не си. Да, это не си. Потому как си в 10раз надёжнее. 70% дыр в расте связано не си и не с фетезийными уб, а с самим растом. Здесь он просто бездумно повторяет какие-то лозунги. Раст не отслеживает чтения/записи. Там уб. Об этом написано даже в документации, а именно:
    let x: i32 = unsafe { MaybeUninit::uninit().assume_init() }; // undefined behavior!
    Если удалить код с for никакой ошибки не будет и будет уб. Потому что ансейф всегда уб и ничего не проверяет. И уб здесь даже не потому что си, а потому что раст.

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา

    Ансейф полностью выключает все проверки. Здесь опять автор повторяет старые мантры. Самое смешное, что буквально несколько секунд назад он это демонстрировал. Опять врёт про какую-то ОС, которая использует какой-то язык си. Никакой ос не использует язык си.

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา +1

    И того. 22 минуты вранья. Я не увидел даже минимально-адекватных лозунгов.

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา +1

    Уже спустя 20 секунды ты соврал. Никакой раст не гарантирует отсутствие уб в сейф-коде. Далее ещё раз соврал. Уб понятие стандарта си. Какое отношение он имеет красту? Какое поведение раста определено в стандарте си? Никакое

  • @tgitw-tq6iu
    @tgitw-tq6iu 8 วันที่ผ่านมา

    В мс не работают лучшие программисты. Откуда ты взял такую глупость? Статистика от конъюнктурщиков ничего не стоит. Никаких 70% там нет это всё враньё. Эта заявления ни на чём не основаны и пруфов никаких нет. Я тебе могу хоть 100% вывести потому что любая ошибка в принципе по определению связана с памятью. А знаешь почему? Потому что программа всё что и делает - это месит память. Там даже не про ошибки написано, а про ошибки безопасности. Но, опять же, все ошибки связаны с памятью. По определению.

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

    Вы своей ржавчиной колетесь для того чтобы обколовшись выкинуть из языка единственное полезное что в нём было - безопасность памяти - чтобы теперь уже и колоться и ронять память?

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

    раст это шутка, раст для идиотов написал кто-то