Роман Проскуряков - Голый Rust

Ближайшая конференция: С++ Russia 2024, 24 мая (online), 2-3 июня (offline, Москва)
Подробности и билеты: jrg.su/W8skjE
- -
Роман покажет внутреннее устройство std/core языка Rust, примитивы и подходы, которые можно применить для низкоуровневого программирования (модуля ядра Linux, под микроконтроллеры). Бонусом будет объяснение принципов работы безопасной многопоточности.
Скачать презентацию: squidex.jugru.team/api/assets...

Пікірлер: 97

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

    Я этот путь с C++ прошёл на Cypress FX3) прекрасно было ещё с at_exit, конструкторы, деструкторы глобальных переменных и т.д.. Исключения не делал.

  • @user-zl5vi6bn3j
    @user-zl5vi6bn3j2 ай бұрын

    Очень интересно и полезно !

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

    а с автором доклада контакты есть? есть ли возможность в штатном stable Rust реализовать свой собственный "наворочанный" вариант указателей? конкретно -- based ptr, который состоит из двух частей: часть которая изменяется между вызовами, и вторая часть которая является оффсетом от первой смысл -- адресовать память аллоцированную через mmap (pmem), чтобы между нескольими запусками программы данные оказывались на тех же адресах, т.к. реализовать _ссылочную персистентость_

  • @popuguytheparrot_

    @popuguytheparrot_

    Жыл бұрын

    Скорей всего нет. Ссылки приведут к утечкам памяти

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

    22:28 кто победил error: requires `copy` lang_item ?

  • @sweetcapitan5690
    @sweetcapitan56909 ай бұрын

    "Я гнался за вами 3 дня, чтобы сказать как мне безразличен Раст." Вы все поняли о ком речь.

  • @rybiizhir

    @rybiizhir

    6 ай бұрын

    Где Хасбики?

  • @console.g
    @console.g Жыл бұрын

    Бля, Алматы не там где вы показали на карте😂

  • @rybiizhir
    @rybiizhir6 ай бұрын

    Rust - не для тупых. Все чем хорош С, сговорчивый компилятор, гарантирует горы багов в индийском коде.

  • @user-zj7te6tg3f

    @user-zj7te6tg3f

    3 ай бұрын

    Баги в коде пишет не компилятор, а программист

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

    Как что-то может не требовать библиотек, но требовать символов? К тому же он врёт и ллвм-лапша не может работать без llvm-рантайма. Все эти memcpy - это как раз куски того самого ллвм-рантайма. Враньё про "у нас аллокатор с выравниванием" - это чушь и костыль. Все аллокации в нормальном языке(цпп) итак выровнены, уже давно даже с хинтами. Так же есть op new с таким же хинтом. Если мы говорим про си и стандартный интерфейс, то у маллока был всегда один аргумент и это просто обратная совместимость. Есть другие функции с выравниванием. Поэтому то, что он нам показывает - это убогий костыль. Здесь аллокатор с голым size, а не поверх T. Потому как эта скриптуха не может в полиморфизм. Если говорить про голые аллокаторы, то выравнивание и прочее там есть.

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

    русскоязычное видео про раст - +250% к появлению царя в комментах)

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

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

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

    Лучший доклад про раст, показывающий, что не надо писать на расте

  • @olsuhvlad

    @olsuhvlad

    11 ай бұрын

    если маленькие проги вы сможете безопасно на 100% контролировать, то большие проекты будет ловить свои любимые ошибки памяти. :)

  • @voidptr_t

    @voidptr_t

    9 ай бұрын

    ​​@@olsuhvladну вон бд-шки нормально работают. А ещё Дискорд себе бекэнд давно уже переписал. Думаю ты не прав, хотя безусловно совать раст везде неправильно, но и общая недооценка его плюсерским комьюнити выглядит глупо.

  • @olsuhvlad

    @olsuhvlad

    9 ай бұрын

    @@voidptr_t я за rust

  • @0xsadcat92

    @0xsadcat92

    4 ай бұрын

    @@voidptr_t Давно сделал для себя тест паршивости ЯП - если простые операции (прочитать файл, вывести hello world и пр.) сделать на си проще, то язык го*но, и раст пытается это показать всегда... По теме, адепты говорят, что раст безопасный, но есть браузеры, IDE, компиляторы, ос, драйвера и еще куча всего и они никому не угрожают

  • @0xsadcat92
    @0xsadcat924 ай бұрын

    Шло 2024 тысячелетие, машина научилась рисовать и объяснять мемы, а сектанты так и не разобрались, для чего НА САМОМ ДЕЛЕ нужен volatile...

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

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

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

    Не пойму хейта в комментариях.

  • @voidptr_t

    @voidptr_t

    Жыл бұрын

    Забей. Людям заняться нечем, вот и спорят о бесполезных вещах.

  • @voidptr_t

    @voidptr_t

    Жыл бұрын

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

  • @charlieking7600

    @charlieking7600

    Жыл бұрын

    @@voidptr_t нашёл прозвища - растаманы и крестоносцы)))

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

    Типажи - они не имеют никакого отношение к концептам в цпп. Он даже не знает что это такое. Так же он врёт, пытаясь выдать это за реализацию операций. Далее он в процессе ретрансляции пропаганды на этом споткнётся, но зачем ему правда. Типажи - это костыль, интефрейсы для языков не умеющих в полиморфизм. Они появились в языках типа С++/жавы и прочих, которым потребовалось иметь статический динамический полиморфизм. Не как в жс, где мы имеем возможность писать add(x, y) { return x + y; }, и т.к. это функция одна она требует боксинга(динамической типизации). Боксинг это так же механизм представления динамических типов в статически. Вот эти инетрфейсы/трейты/базовые классы - это все элементы боксинга. Реализация находится в функции внутри этого интерфейса, но даже там она не находится. Она встроенная - он это показывал когда писал реализацию + и ссылался на "тут на самом деле нет рекурсии".

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

    Уровень вопросов тоже поражает воображение. Единственное что hirrolot попытался его поймать на вранье про "паники выпиливаются", но не стал идти дальше. Вопросы "из зала" уровня домохозяек. Возможно нормальные пацаны это не смотрели, либо руки были заняты фейспалмом. По поводу паник я уже говорил, но повторю ещё раз и подробнее. Раст-скриптуха не может существовать без паник. Ведь это копипаста с С++-раии, а раии не может без паник. Особенно в скриптухе не могущей в полиморфизм. Если мы захотим убрать исключения, то нам нужно боксить все типы. Простой пример - вы хотите передать в функцию box. В этом днище нет кострукторов, но даже здесь вы напишите box::new, но он возвращает box, но при этом может дать ошибку. Значит нужно возвращать не box, а рантайм-байду(result). Но ведь box ещё есть T, а там свой new, который так же не может вернуть T, а только result. А ещё может быть копирование, но копирование может быть давать ошибку/либо не давать. В результате нам нужно рекурсивно собирать все ошибки, а эта мусорная скриптуха не может в полиморфизм. Это будет сделать невозможно без костылей. А далее мы захотим написать a + b, а значит оно тоже должно возвращать result, а далее у нас будет a + b + c, а значит это сломается. Нужно будет либо использовать костыли(типа ((a + b)? + c)?), либо как уже было сказано - боксить все типы. Чтобы + работал не только с T, но и с result. В любом случае это невозможно. Поэтому ни в какой либе никогда этого не будет, а в случае с патчами для линукса - они попросту врут. Там ничего нет, либо огрызки. Возьмите какой-нибудь fno-exceptions код, умножьте его убогость на 10 и будет то, что они там пишут. Это неюзабельно. Когда я смотрел на это в последний раз - эти позорища выпилили result, заменили его на int. Весь код написан просто как на сишке(во много раз более убогой). Вот такой он "раст в ядре".

  • @Nikitos9

    @Nikitos9

    Жыл бұрын

    полоумный иди отсюда

  • @dmitryponyatov2158

    @dmitryponyatov2158

    Жыл бұрын

    о чём можно спорить с челом, который не понимает разницi между zero cost vs "скриптуха" ?

  • @olsuhvlad

    @olsuhvlad

    11 ай бұрын

    RAII - это безопасная работа с памятью и обязательная инициализация переменных. Result в Rust - это перечисление (Enum). В него заворачивается или результат или ошибка. Если вы его тупо развернули через unwrap - у вас будет паника, в подакшн никто так не делает. :) - использует pattern matching, иначе вы результат не получите :) "нет конструкторов" - вы не знаете :) - вы не сможете использовать НЕинициализированные примитивы/структуры/перечисления... кстати, зеро_кост_примитивы int в С++ есть с методами ? :) - концепция trait позволяет это делать полиморфизм есть - через trait - dyn - динамический - impl - статический - через перечисление - Enum Rust ближе к Си, чем к C++. Зачем ему лишние динамические таблицы плодить :) - все статично и зеро_кост :)

  • @ChannelCheesecake

    @ChannelCheesecake

    5 ай бұрын

    @@olsuhvladформально Enum в Rust это ADT, а не перечисление

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

    Респект спикеру

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

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

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

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

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

    Вот это понимаю - столько комментариев к видео от единственного человека, который ничего не понимает в Rust)) Зачем вообще я прочитал комментарии😀😀😀 Но главное - зачем человек их написал? Страшно жить становится) А доклад интересный, спасибо👍👍

  • @rustonelove

    @rustonelove

    Жыл бұрын

    Смотри на типичные оправдания пропагандиста-сектанта. Рандом прибегает и рассказывает "не понимает в раст". И казалось бы, ведь если я что-то не понимаю - берёшь любой тезис из моего сообщения и показываешь, что это не так. Ты ведь это уже сделал, чтобы быть уверенным в том, что я чего-то не понимаю? В результате а) примеры у тебя есть. б) мазы уровня "не хочу не писать" не работают, ведь ты уже написал это враньё. Кстати, данный сектант почему-то не применяет это к автору, который ничего не знает про С++.

  • @rustonelove

    @rustonelove

    Жыл бұрын

    Поэтому на будущие - основное свойство раст-секты - врать. Как врал автор, так и врёт прибежавший сюда фанатик.

  • @rustonelove

    @rustonelove

    Жыл бұрын

    Смотри на типичные оправдания пропагандиста. Рандом прибегает и рассказывает "не понимает в раст". И казалось бы, ведь если я что-то не понимаю - берёшь любой тезис из моего сообщения и показываешь, что это не так. Ты ведь это уже сделал, чтобы быть уверенным в том, что я чего-то не понимаю? В результате а) примеры у тебя есть. б) оправдания уровня "не хочу не писать" не работают, ведь ты уже написал это враньё. Кстати, данный фанатик почему-то не применяет это к автору, который ничего не знает про С++.

  • @user-xg9wt3he9q

    @user-xg9wt3he9q

    Жыл бұрын

    ​@@rustonelove Ну да, я тоже не понимаю в раст) Я и не говорил, что разбираюсь) Но вопрос скорее в том - ради чего вообще писать такой объем текста)) Всеж и так знают, что мир полон вранья) Все врут друг другу)) Страшно, очень страшно

  • @user-xg9wt3he9q

    @user-xg9wt3he9q

    Жыл бұрын

    @@rustonelove Но если без шуток, то меня скорее удивил объем комментариев и то, что там везде про вранье говорится в какой-то навязчивой форме. Какие-то странные навязчивые состояния прямо получаются. Это я не чтобы обидеть пишу, просто пугающая штука реально со стороны

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

    Удивительно то как этот пропагандист маневрирует. "нам язык может, но оно в найтли". В общем возможность писать без либ для лоулевел языка до сих пор нет в языке спустя более чем 10 лет. Точно так же какая-то чушь про системный линковщик. Что он несёт? Очевидно, что там ллвмный линковщик, к ллвм это си компилятора. Как следствие нужно тянуть сишный рантайм. Эта немощная секта не смогла написать свой рантайм, ведь в реальности никакой линковщик и прочее(даже в ллвм) не заставляет тебя использовать си-рантайм. Потому что это си и у си нет зависимостей на рантайм, в отличии от этой скриптухи.

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

    Враньё первое - он показывает на 3:30 хв, что мало того что на 50% состоит из синтаксического/семантического мусора(допустим эта немощная скриптуха не может вы вод типов, либо какое-то b, ?). ? и Result - это фейк. Здесь не проверяются ошибки. Они просто неявно кастятся в пустоту. Враньё второе - у раста есть какая-то стандартная библиотке. Её нет. Её невозможно написать на расте. Частично далее он докажет это своим примером. Зависимость от либц - это позор. И не слушайте эти сектантов, которые будут рассказывать о "для интеропа с си" - это враньё. Для интеропа с си либц ненужна. Враньё третье "не все методы возвращают ошибку". На расте это не реализуемо. Никакие методы даже не пытаются что-то возвращать, а то что есть - это примитивные случаи которые кое как закостылили. Их мало и они не юзабельные.

  • @olsuhvlad

    @olsuhvlad

    11 ай бұрын

    1) rust у вас не установлен :) 2) уберите из main Resuit - у вас ? не будет вверх прокидываться - выдаст ошибку. - вы совравши... вы там просили аргументы... :)

  • @user-zg2bx5cb3d

    @user-zg2bx5cb3d

    4 ай бұрын

    @@olsuhvlad он тупой или больной, в обоих случаях это к Стравинскому, а не в IT. Вот что с нашим айти сделали эти недельные курсы, теперь последний посудомойщик имеет мнение! страшно жить становится...

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

    Очередное враньё "мы не можем взять size". Да ты чё. Он позорится и врёт попросту везде. Ведь в си нет sizeof, а в цпп полиморфизма. Как раз таки очередной пример боксинга и мусорности этой скриптухи.

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

    Я не буду далее перечислять номера вранья. "раст как второй язык в ядре" - никакой раста в ядре нет и не будет. Это просто атака активизма на ядро. Почему? Потому что раста нет. Раст это не язык - это бренд. И сектанты для популяризации своей секты пытаются примазаться в ядру, более сильному бренду. Почему никогда не будет? Всё очень просто. Их ЦА сектанты и в каком виде это будет - им неважно. Как результат они и далее из раста будут выкидывать раст, в конечном итоге останется от него сишка. Подобная эпопея была с С++ и она показательна. Точно так же торвальдс бомбил на цпп-рантайм, исключения и прочее. С++ так же можно было пропихнуть в ядро выпилив из него всё, что делает его С++(исключения и как следствие раии, ртти, классы, всякую static-иницаилизацию, глобальную инициализацию и прочее). Люди на такое не пошли. Эти же сектанты готовы на это. Потому что им ненужен раст в ядре - им нужно примазаться к бренду, повторяю. Кому интересно может сам пойти и посмотреть на эти патчи, на это позорище.

  • @vladosvladosovich3042

    @vladosvladosovich3042

    Жыл бұрын

    И вот 2023 год и раст в ядре 😂

  • @linkernick5379

    @linkernick5379

    Жыл бұрын

    @@vladosvladosovich3042 У крестовиков горе, а вы тут насмехаетесь.😁

  • @user-yq9zf6qb2o

    @user-yq9zf6qb2o

    Жыл бұрын

    А теперь ещё и в windows)

  • @mikhailg9995

    @mikhailg9995

    3 ай бұрын

    Ещё и Торвальдс одобрил

  • @MrOldschoolrocknroll

    @MrOldschoolrocknroll

    3 ай бұрын

    Чувак, токсично очень, не надо таким быть)

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

    Библиотека кор, раст и прочая чушь. Всё враньё от первого до последнего слова. В расте существует кор именно потому, что языка по-сути нет. Далее он это наглядно покажет. Но не это проблема. В цпп тоже много сделано так же, но ключевое - оно сделано на самом цпп(за исключением интринсиков). Дак вот весь это кор на расте - это те самые инстринсики, либо ffi в си/llvm(по-сути тот же си) рантайм. Язык не предоставляет никакие примитивы. Это просто обёртки над ллвм-типами. Они не являются полноценными, т.е. на платформе без float, либо без u64 - оно сломается. Вернее ллвм это починит и подсунет рантайм. Ключевое то, что раст об этом ничего не знает. Это не язык. И типы эти не его.

  • @IExSet

    @IExSet

    Жыл бұрын

    Это патамушта ЦеПП фактически включает в себя Сишечку, ему легче 🤣

Келесі