/pr/ - Rust #32
Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 171 15 46
Rust #32 /rust/ Аноним 16/04/24 Втр 20:01:19 3125439 1
image 4479Кб, 1550x2150
1550x2150
Добро пожаловать в тред гарантий, обещаний, владения, заимствования и тайных знаков

Rust — невероятно быстрый язык для системного программирования без segfault'ов и с гарантиями потокобезопасности.

Ссылка на официальный сайт: https://www.rust-lang.org/

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

IDE для Rust: https://areweideyet.com/
GUI для Rust: http://www.areweguiyet.com/
Web для Rust: https://www.arewewebyet.org/
GayDev для Rust: https://arewegameyet.rs/
Что еще есть для Rust?
- Посмотри сам: https://wiki.mozilla.org/Areweyet

Основная литература:
Rust Book(версия на русском языке): https://doc.rust-lang.ru/book/
Rust Book: https://doc.rust-lang.org/book/
Rustlings (упражнения чтобы привыкнуть к расту): https://github.com/rust-lang/rustlings
Rust by Example: https://doc.rust-lang.org/rust-by-example/
The Rustonomicon(для продвинутых анонов): https://doc.rust-lang.org/nomicon/
Programming Rust: https://www.oreilly.com/library/view/programming-rust/9781491927274/

Ресурсы на русском:
https://rust-lang.ru/
Отдельное спасибо автору этого гитхаба(старому ОПу). Здесь вы сможете найти много полезной информации: https://gist.github.com/TatriX/183c816f1346d418f969c4576c2b9b41

Предыдущий >>3060192 (OP)
Аноним 16/04/24 Втр 21:23:16 3125574 2
>>3125439 (OP)
В /пр/ бамплимит 1000, ты запомни на будущее. Сам на этом обжигался.
Аноним 16/04/24 Втр 22:01:16 3125648 3
>>3125574
Угу, а что предыдущий тонет тогда?
Аноним 16/04/24 Втр 22:04:18 3125652 4
>>3125574
Бамплимит давно стал 500.
Аноним 16/04/24 Втр 22:07:53 3125656 5
>>3125652
Пусть тонет, раст не нужен и опасен.
Аноним 16/04/24 Втр 22:09:09 3125658 6
>>3125656
Ты не нужен, гнида. Как бы тебя забанить по подсети.
Аноним 16/04/24 Втр 22:09:44 3125659 7
>>3125656
Посмотрим мы на твоё ебало, когда завершим переписывание линукса на раст.
Аноним 16/04/24 Втр 22:26:34 3125681 8
>>3125658
Но раст правда опасен.

Вот как скриптовый язык - вполне себе ничего, он разрабатывался вебмакакой, его уровень - заменить жс в среде сиси-трансов. Пусть себе играются, пишут скриптики какие-нибудь, JSON парсят. Может какой сервер прикольный напишут, который никто не будет использовать.

Но почему-то крашенные трансы хотят раст в ядро засунуть. К чему это всё? Вызывает вопросы серьёзные.

>>3125659
Никогда. В ядре ничего не написано на расте и не будет написано никогда, даже драйвера.
Аноним 16/04/24 Втр 22:40:39 3125690 9
>>3125681
Причём тут трансы? Пойди подрочи уже, шизик.
Аноним 16/04/24 Втр 22:56:48 3125702 10
>>3125690
В смысле причем трансы? 70% людей кто работает над коре либой раста - трансы. У них там круговая ебля, они всех гетересексуалов двинули из разрабтки ядра. В компиляторе та же проблема, кста.
Аноним 16/04/24 Втр 23:31:37 3125720 11
Аноним 16/04/24 Втр 23:48:40 3125733 12
>>3125720
В ядре этого нет, всё в порядке.

>>3125728
Нет, я не пишу на расте.
Аноним 17/04/24 Срд 05:55:26 3125833 13
есть ли библиотека на раст эксельки шлепать и графики рисовать?
Аноним 17/04/24 Срд 07:38:29 3125851 14
Аноним 17/04/24 Срд 10:36:30 3126032 15
image.png 80Кб, 490x717
490x717
image.png 115Кб, 657x905
657x905
image.png 29Кб, 918x244
918x244
image.png 59Кб, 1685x751
1685x751
Анончики, подскажите пожалуйста. Вот был у меня код как на пикриле 1 и всё было хорошо, но захотелось переделать и сделал как на пикриле 2. Теперь раст говорит "cannot return value referencing temporary value" (пиркилы 3, 4). Я понимаю в чём проблема кода на пикриле 4, но ведь я в пикриле 2 возвращаю ссылку не на что-то что было создано внутри метода, а на часть структуры которая продолжит существовать и после того как метод вернёт значение? Я думал что может быть проблема в том что после того как метод вернёт ссылку кто-то сможет мутировать структуру, вызвав переаллокацию содержимого HashMap и таким образом возвращённая ссылка будет инвалидирована, но ведь борроу чекер не должен позволить мутировать структуру пока существует живая ссылка на её часть...

Я смотрю что ".read().await" возвращает " RwLockReadGuard<'{error}, HashMap<String, Room>>" и, видать, возвращаемая ссылка привязывается не к HashMap которая в структуре лежит, а привязвается к "RwLockReadGuard" и инввалидируется когда этот самый гуард дропается в конце метода. Но это получается что я могу использовать ссылку только пока живой гуард? А как тогда разбить код на два метода как у меня на пикриле 2?
Аноним 17/04/24 Срд 10:44:29 3126043 16
>>3125733
>В ядре этого нет, всё в порядке.
В смысле нет? Вот же я прямо файл скинул.
Аноним 17/04/24 Срд 10:49:33 3126049 17
>>3125733
Так и будешь в грязных ходить получается?
Аноним 17/04/24 Срд 11:15:42 3126097 18
>>3126032
Суть read() в RwLock в том, чтобы заблокировать вызывающий тред, до тех пор пока все писатели не закончат свою работу. После этого уже сколько угодно читателей могут работать с получившимся значением, пока RwLockReadGuard существует. Ты не можешь передать ссылку на его содержимое куда-то ещё, иначе как RwLock сможет выполнять свои гарантии? Т.е. представь что это было бы возможно, ты передал ссылку на внутреннее содержимое, RwLockReadGuard был дропнут и тут в другом треде вызывается write(). Во write() будет проверка, что никаких других читателей и писателей активных нет, поэтому он со смелой душой начнёт менять внутреннее значение. А в первом потоке у тебя ссылка, кровь, кишки, распидарасило.

Хз как лучше тебе сделать, у меня нет должного опыта. Попробуй Room ещё в один Arc обернуть что-ли, лол, и возвращать клон Arc'a.
Аноним 17/04/24 Срд 13:01:21 3126239 19
>>3125702
А в других языках трансов нет? Опомнись. 2024 год на дворе, трансы захватели все айти-сообщества.
> Доёбываешься к расту из-за трансов
> В твоём любимом языке корлибу тоже пишут анальники, а натуралы сидят тихо, не отсвечивают, чтоб не заканселили.
Аноним 17/04/24 Срд 13:48:10 3126284 20
>>3125439 (OP)
Растокуны, сап
Начинаю изучать раст и запнулся на владении

let s1 = String::from("hello");

println!("{}, world!", s1);
println!("{}, world!", s1);

Почему этот код компилируется? Ведь владение строкой передается в первый принтлн. Но он компилируется! Заранее спасибо

Алсо ответ чатгпт

В вашем примере переменная s1 владеет строковым объектом String::from("hello"). Когда s1 передается в функцию println!, она делает это по значению, а не по ссылке. Это означает, что происходит перемещение (move) владения с s1 внутрь функции println!. После этого первый вызов println! забирает владение строки, и переменная s1 больше не может быть использована после этого вызова. Поэтому попытка использовать s1 во втором вызове println! вызовет ошибку компиляции, так как она больше не владеет строкой.

Чтобы позволить s1 использоваться после передачи в println!, можно использовать клонирование строки
Аноним 17/04/24 Срд 14:34:17 3126322 21
>>3126284
Это макрос, который использует built-in'ы компилятора, им насрать на правила языка. Считай, что в нём происходит неявная передача по ссылке, т.е. заимствование.
Аноним 17/04/24 Срд 14:57:09 3126348 22
>>3126322
понял
ответ в макросах, буду читать дальше - пойму
спасибо!

Еще тогда вопрос: а чем собственно владение отличается от деструктора в C++? И там, и там при выходе вызывается магическая функция (дроп или деструктор) при выходе из скоупа. Пока что для себя ответил: компилятор раста не даст в двойное удаление одного значение, но это все или есть еще профити?
Аноним 17/04/24 Срд 15:19:51 3126367 23
>>3126348
Ещё не даст
двойную запись
запись + чтение
в том числе в однопоточном коде, например, когда ты итерируешь по вектору, то в этот вектор нельзя втавлять/изымать элементы.
Аноним 17/04/24 Срд 15:19:56 3126368 24
>>3126348
На мой взгляд принципиальное отличие — это дефолтное действие с данными когда ты их "передаёшь" куда-то (например как аргумент в функцию или банально связываешь с новым именем). В плюсах исторически — это операция копирования. Она инстинктивно предполагается человеком и вполне удобна в большинстве случаев, однако как показала многолетняя практика является источником многих проблем. В современных плюсах появилась move-семантика, но во-первых всё остальное легаси языка никуда не делось, а вместе с ним и поле для ошибок, а во-вторых оно чуть-чуть менее эффективно чем в расте (имхо конечно, я на эту тему спорил пару тредов назад с каким-то растохейтером, если инетересно можешь полистать, там был небольшой разбор стандартной библиотеки плюсов вплоть на дизассемблирования насколько я помню). Сам концепт RAII одинаков, верно.
Аноним 17/04/24 Срд 15:30:18 3126377 25
>>3126367
>двойную запись
>запись + чтение
можно подробнее? не очень понял

>>3126368
так вот что дает эта мув-семантика? Я так понимаю, что мув-семантика необходима для поддержания работы владения (2-ое правило гласит, что данными может владеть только одно значение, не больше). А какие преимущества дает владение перед деструкторами? Для себя выделил только предотвращение от ошибки двойного освобождения
Аноним 17/04/24 Срд 15:56:10 3126398 26
>>3125720
>Драйвер пока только один
Это буквально 1в1 на С, но почему то сишная версия выглядит проще и понятнее.
Аноним 17/04/24 Срд 16:09:32 3126419 27
>>3126377
>А какие преимущества дает владение перед деструкторами?
А какое преимущество у тёплой одеждой перед оранжевой? Это некорректный вопрос. Деструкторы есть в расте, просто необходимо реализовать трейт Drop для своего типа. К схеме владения они не имеют отношения.
Аноним 17/04/24 Срд 16:14:21 3126436 28
>>3126419
Оке, понял ошибку
Тогда так: зачем была введена концепция владения? Какую проблему она решает?
Аноним 17/04/24 Срд 16:15:19 3126439 29
>>3126436
>Какую проблему она решает?
Корректности програм.
Аноним 17/04/24 Срд 16:30:01 3126462 30
>>3126436
>Тогда так: зачем была введена концепция владения? Какую проблему она решает?
Давай так, ты видимо ждёшь что я начну приводить какие-то конкретные примеры, но это означает пересказ всего растбука и растономикона тут. Схема владение влияет очень на многое в дизайне языка. Вот например, вопрос >>3126032. Там компилятор не даёт анону выстрелить себе в ногу.

В целом >>3126439 правильно сказал, но не упомянул одну важную деталь. Это способ проверить на этапе компиляции, что программа корректная. Возможно не единственный, возможно не самый оптимальный или удобный, но оно работает.
Аноним 17/04/24 Срд 16:45:54 3126491 31
Аноним 17/04/24 Срд 16:52:19 3126505 32
>>3126462
А чё там решается, в итоге, корректность время жизни и всё? Выходы за границы это чисто рантайм проверочки в стандартных типах типо слайсов?
Аноним 17/04/24 Срд 17:13:00 3126540 33
>>3126505
Это вопрос в контексте владения или в целом? Видимо в целом, потому что выходы за границы явно не имеют отношения к владению. Хз, мне кажется вторая мощная вещь в расте — это система типов и сопоставление образцов (pattern matching), которые полностью контролируются компиляторм. Ну и в целом отслеживаются какие-то вещи, которые обычно служат источником уязвимостей. Например, был вопрос про println!, в отличие от сишного printf, в нём невозможно организовать атаку некорректной форматной строкой, потому что а) форматная строка обязана быть строковым литералом б) проверка аргументов будет на этапе компиляции.
Аноним 17/04/24 Срд 17:16:14 3126544 34
>>3126540
Конкретно про владение, с помощью этого же решается только задача об определении времени жизни объектов?
Аноним 17/04/24 Срд 17:36:01 3126559 35
>>3126544
Ну да. Тебе как программисту не нужно контролировать время жизни руками либо полагаться на рантайм. Если получилось скомпилировать программу, то оно как-то само всё делается, причём максимально эффективным способом.
Аноним 17/04/24 Срд 19:14:35 3126702 36
>>3126436
> зачем была введена концепция владения? Какую проблему она решает?
Zero cost garbage collector.
Ящитаю.
Аноним 18/04/24 Чтв 00:13:33 3126971 37
>>3126702
Это уровень смарт поинтеров в с++, и они почему-то не считаются зеро кост
Аноним 18/04/24 Чтв 00:43:45 3126980 38
>>3126971
Наверное это потому, что они работают в рантайме, не думал? Впрочем, в расте этого добра тоже навалом да ещё и в нескольких вариациях.
Аноним 18/04/24 Чтв 01:01:14 3126986 39
>>3126980
У вас раст в компайл-тайме освобождает память даже не аллоцировав?
Аноним 18/04/24 Чтв 01:09:33 3126987 40
>>3126980
На куче не может быть zero cost памяти. И в расте всё тоже в рантайме работает. Разница со смарт поитерами только в наличии боров чекера - в крестах ты можешь взять ссылку на смарт-поинтер и проебать объект, по производительности разницы никакой нет.
Аноним 18/04/24 Чтв 01:52:36 3126991 41
>>3126436
В первую очередь проблему несинхронизированного доступа к объекту из двух мест.
Аноним 18/04/24 Чтв 01:55:38 3126992 42
>>3126986
>>3126987
Речь о том, что концепция владения относится не только к умным указателям.

Соре, но пожалуй я больше в этой специальной олимпиаде участвовать не буду. В прошлый раз мне доказывали, что владение и мув это одно и то же. В этот раз, что владение и умные указатели это одно и тоже. Сами вбрасываете, сами и доказывайте.
Аноним 18/04/24 Чтв 02:12:16 3126995 43
>>3126991
тут уже про многопоточку?
Аноним 18/04/24 Чтв 02:14:39 3126996 44
>>3126462
>но это означает пересказ всего растбука
а можешь кратко для примера пару кейсов без расписывания? Мне просто понять направление и масштабность

Читаю растбук и там как бы вся книга - последствия введения концепции владения, а не профиты
Аноним 18/04/24 Чтв 02:16:47 3126997 45
>>3126980
>в расте этого добра тоже
о каком добре ты говоришь, анон?
Аноним 18/04/24 Чтв 09:45:30 3127062 46
unwrap unwrap unsafe unsafe unwrap unwrap unsafe unsafe
Аноним 18/04/24 Чтв 11:31:04 3127194 47
image 411Кб, 1403x1428
1403x1428
>>3126995
Нет, классический пример с итерацией по контейнеру анон уже приводил >>3126367. Есть два места, где мы обращаемся к вектору как к структуре данных — проверка что итератор достиг конца вектора в конце шага цикла и изменение размера контейнера в теле цикла. Получается один читатель и один писатель существуют одновременно. К чему это приводит, сам видишь.

https://ideone.com/zUXA5R
Аноним 18/04/24 Чтв 11:37:25 3127209 48
>>3126997
Про умные указатели. В плюсах это unique_ptr и shared_ptr + weak_ptr. Прямые аналоги в расте это Box и Rc. Почему-то чел выше считает, что они заменяют концепцию владения, я хз почему.
Аноним 18/04/24 Чтв 11:45:55 3127227 49
>>3126996
Концепцию владения нужно рассматривать вместе с другими основными механизмами управления памятью в расте — заимствования и времени жизни, потому что без них программы писать можно конечно, но грустно и не очень эффективно для языка, предназначенного для системного программирования в том числе.
В целом, этим решаются базовые проблемы управления памятью, которые опять же >>3126367 обозначил:
- нулевые или висящие ссылки
- двойное удаление
- пропущенное удаление
- гонки

Тебе похоже непонятно что такое гонка, ну так вот пример с вектором >>3127194 это она и есть.

Это как бы прямые результаты. Но косвенно действительно очень много последствий. Чтобы далеко не ходить за примером посмотри на >>3126032. Я пытался объяснить поведение компилятора в >>3126097. Вкратце, компилятор не дал некорректно воспользоваться структурой данных и сделал это благодаря владению и заимствованию.
Аноним 18/04/24 Чтв 12:54:52 3127317 50
>>3127194
> К чему это приводит
К неумению писать код?
Аноним 18/04/24 Чтв 12:59:48 3127323 51
1707836554805.png 88Кб, 719x1287
719x1287
>>3127194
Откуда вот такие дебилы лезут? Какой код написал, так он и работает.
>>3127227
> Тебе похоже непонятно что такое гонка
Это ты не знаешь базовых понятий. Какая нахуй гонка в однопоточном выполнении.
Аноним 18/04/24 Чтв 13:02:57 3127328 52
>>3127227
>проблемы управления памятью
>гонки
ох бой
Аноним 18/04/24 Чтв 13:06:28 3127332 53
>>3127323
>пикрил
Всегда проигрываю с этих выкрутасов с классиками, нахуя было создавать такой язык? Чтобы не скушно было что ли лол?

Мимо-сишный-байтослесарь
Аноним 18/04/24 Чтв 13:33:46 3127391 54
>>3127209
> Почему-то чел выше считает
> я хз почему
Это латентный педик, который ИТТ "гоняет трансов". Вместо того, чтобы признаться себе в том, что ему нравятся хуйцы. В связи с таким сложным подавлением своих желаний, дурачок объявил войну "пидоrustу" и срёт здесь по КД уже который тред.

Ситуация в общем-то энциклопедичная.
Аноним 18/04/24 Чтв 13:34:59 3127395 55
>>3127317
>К неумению писать код?
>>3127323
>Откуда вот такие дебилы лезут? Какой код написал, так он и работает.
Вот-вот, раст тем и хорош, что не нужно думать обо всех подводных камнях (и высокомерно называть это умением писать код либо переходить на оскорбления). Тебе просто не дают возможности сделать такую и другие подобные ошибки. Я лично люблю когда машина делает за меня рутинную работу.

>>3127323
>Это ты не знаешь базовых понятий. Какая нахуй гонка в однопоточном выполнении.
>>3127328
Что шаблон порвался? Ну назовите это как-то по другому или дополните пример многопоточностью, где ваша фантазия? Писал так, чтобы было понятнее о чём речь. Я если честно принципиальной разницы не вижу. В одном потоке можно даже сдуру дедлок сделать. Суть проблемы не меняется от количества потоков, только сложность отладки.
Аноним 18/04/24 Чтв 13:43:04 3127403 56
>>3127395
>не нужно думать обо всех подводных камнях
В пидорасте тоже полно неявной хуиты как в плюсах, смысл одно говно заметь другим аналогичным говном?
>Ну назовите это как-то по другому
Давай мы тебя не будет мужиком называть, а по-другому.
>Я если честно принципиальной разницы не вижу
Дак ясно всё с тобой, даунёнок.
Аноним 18/04/24 Чтв 13:49:19 3127415 57
>>3127403
>полно неявной хуиты как в плюсах
Вся хуита в расте вылазит на этапе конпеляции, в отличие от.
Аноним 18/04/24 Чтв 13:52:41 3127425 58
Аноним 18/04/24 Чтв 14:09:00 3127458 59
>>3127425
Твоей мамки а она и не против
Аноним 18/04/24 Чтв 14:11:36 3127462 60
>>3127403
>Дак ясно всё с тобой, даунёнок.
Даунёнка ты в зеркале видишь, дегенерат. Пока ты только в лужу пердишь, бросаясь голословными утверждениями.
Аноним 18/04/24 Чтв 14:32:45 3127494 61
>>3127458
>-Вся хуита в расте вылазит на этапе конпеляции, в отличие от.
>-Анус ставишь?
>-РЯЯЯЯ УИИИ
Безопасен снаружи и опасен внутри лол
Аноним 18/04/24 Чтв 14:53:26 3127518 62
А я знаю, что т[...] 63Кб, 553x766
553x766
>>3127403
> пидораст
> мы тебя не будет мужиком называть
>>3127425
> Анус ставишь?
> Анус
> Анус
>>3127403
> пидораст
Аноним 18/04/24 Чтв 15:12:42 3127545 63
>>3127395
> Я лично люблю когда машина делает за меня рутинную работу.
Питонист, ты точно в нужный тред зашёл?
Аноним 18/04/24 Чтв 15:44:40 3127598 64
>>3127227
>Тебе похоже непонятно что такое гонка
это Data races из растбука?
Аноним 18/04/24 Чтв 15:50:38 3127604 65
>>3127227
И да, спасибо за объяснение, анон!
Аноним 18/04/24 Чтв 15:52:21 3127607 66
>>3127395
>В одном потоке можно даже сдуру дедлок сделать
А это как? Можно пример? Правда интересно
Аноним 18/04/24 Чтв 16:01:58 3127618 67
image 625Кб, 1440x1538
1440x1538
>>3127598
Ну я имел в виду именно это, да.
https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html

Кстати, в этой главе авторы не слова не упоминают про многопоточность, хотя это безусловно самая неприятная в отладке ситуация. Местным обитателям потоки видимо кажутся какими-то магическими сущностями наделёнными особыми свойствами. На деле это просто абстракция над CPU, которую обычно реализуют в ядре и оборачивают в виде удобных библиотек для прикладных программистов. Но ничего не мешает тебе самостоятельно сделать подобную абстракцию в своей программе и запускать её на одном ядре. Кроме твердолобости конечно, лол.
Аноним 18/04/24 Чтв 16:24:56 3127646 68
>>3127618
ну вот там я и читал и объяснение Data races еще больше запутало - эту тему можно было как-то больше разжевать, чтоб раскрыть что именно под этим понимается. Там есть намек на многопоточку (similar to a race condition), и это меня смутило (вроде намек есть, а прямых слов нет)
Аноним 18/04/24 Чтв 16:29:36 3127652 69
>>3127618
>>3127646
Алсо смутила фраза "at the same time", что не то же самое как "once at time", что как бы еще больше намекает на многопоточность
Аноним 18/04/24 Чтв 16:47:54 3127672 70
>>3127652
Ты создал строку и начал асинхронную запись в файл типа как здесь: https://learn.microsoft.com/en-us/windows/win32/fileio/synchronous-and-asynchronous-i-o
И не подождав на ивенте решил эту строку затереть. А в это время контроллер твоего SSD читает твою память и записывает какой-то мусор. Вот и получается, что никаких потоков, по крайней мере явно, ты не создаёшь, а гонка есть.

Или ты подписался на какой-то коллбек и забыл отписаться вовремя. А потом этот коллбек триггерится и расхуяривает тебе всю кучу. Код полностью однопоточный и синхронный, но искать ты это будет весь день.
Аноним 18/04/24 Чтв 17:00:00 3127688 71
>>3127618
> потоки
> абстракция над CPU
Угомоните уже этого дегенерата. С каждым разом всё кринжовее и кринжовее выдаёт перлы.
Аноним 18/04/24 Чтв 17:03:07 3127696 72
>>3127646
>>3127652
Слушай, ну если удобнее думать про многопоточность в этом контексте, то так и делай, ничего плохого в этом нет на самом деле. Я сам именно так себе это и представлял, когда читал растбук. Просто когда начинаешь самостоятельно что-то пробовать писать, то приходит осознание, что это относится не только для многопоточности.

>>3127607
Ну вот держи, набросал на скорую руку:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=fc1251d48c7448d92ca1e0b4a0e6d0bd

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

Я хоть и назвал тут всё терминами связанными с многопоточностью для облегчения понимания, но по сути тут в одном нативном потоке обрабатывается две очереди сообщений. При этом сообщения управляют блокировкой некоторых ресурсов. Только не спрашивай меня, зачем в одном нативном потоке обрабатывать две очереди, я с таким в жизни никогда не сталкивался, поэтому и написал "сдуру". Ну можно представить, что какие-то команды поступают с двух разных сокетов, данные с которых поток ожидает через select() если есть его аналог в расте. Наверное это больше на жизнь похоже.
Аноним 18/04/24 Чтв 17:13:08 3127705 73
>>3127688
Что, шаблон продолжает рваться и трещать, дебилушка? Я так-то под эмбед пишу на сях, работал с embOS, сейчас проект на FreeRTOS. Так вот, там нет ни потоков, ни процессов, сюрприз. Вместо них таски. Но почему-то есть параллелизм со всеми своими проблемами. На одноядерном процессоре, кстати.
Аноним 18/04/24 Чтв 17:25:04 3127715 74
Эксплуатировать рейскондишн едва ли не проще чем переполнение буффера, кстати.
Аноним 18/04/24 Чтв 17:35:24 3127723 75
>>3127705
Что ты там абстрагируешь на ЦП, клован. Аппаратные ядра ЦП не имеют вообще никакого отношения к системным потокам.
Аноним 18/04/24 Чтв 17:55:15 3127742 76
>>3127723
> Аппаратные ядра ЦП не имеют вообще никакого отношения к системным потокам.
Ну хоть в чём-то ты со мной согласен.
Аноним 18/04/24 Чтв 22:20:37 3128012 77
>>3127672
>коллбек триггерится
выполняется в отдельном потоке? Обычно же берется поток из пула. Ну то есть для работы в юзерспейсе обязательно нужен поток
Аноним 18/04/24 Чтв 22:36:47 3128027 78
>>3127705
кстати, вроде есть возможность на расте писать под эмбед. Или нет?
Аноним 18/04/24 Чтв 22:46:08 3128030 79
>>3128012
>выполняется в отдельном потоке?

Необязательно. Это может быть ивент луп за двумя слоями абстракций.
Аноним 18/04/24 Чтв 23:03:25 3128036 80
>>3128030
так операционка предоставляет выполнение только в потоке
да и ивент луп оперирует пулом потоков
Аноним 19/04/24 Птн 10:10:59 3128225 81
>>3128027
Да есть конечно. Вот классное видео, если интересно по быстрому глянуть, в котором объясняется как поморгать диодом на голом железе: https://www.youtube.com/watch?v=jZT8APrzvc4
Есть куча проектов всяких RTOS, чтобы не писать всё в одном unsafe: https://arewertosyet.com Мне ещё попадались какие-то коммерческие разработки.
Вообще был в своё время интересный стэнфордский курс CS140e, в котором авторы обучали расту на примере разработки своей ОС: https://cs140e.sergio.bz Видео, кстати похоже писал чувак, проходивший этот курс.
Аноним 19/04/24 Птн 14:03:25 3128599 82
>>3128225
я в мк не очень разбираюсь, но хочу поучить раст, в том числе в будущем и для этого. А ты разбираешься в мк, можно задать пару вопросов?
Аноним 19/04/24 Птн 15:14:39 3128693 83
>>3127672
>И не подождав на ивенте решил эту строку затереть. А в это время контроллер твоего SSD читает твою память и записывает какой-то мусор.
Это не так работает, упрощённо:
1) ты заполнил буфер в ядре своим юзерспейсовым говном, тебе вернули управление
2) ты (твой планировщик) опять сделал системный вызов со своим юзерспейсовым говном, тебе вернули ошибку EAGAIN, потому что буфер в ядре ещё занят предыдущим твоим говном
3) планировщик в ядре вызвал старт драйвера ссд и тот стартовал дма передачу
4) ..
5) тебе вернули управление ..
6) контроллер ссд дёрнул прерывание/дма часть выставила флаг о завершении передачи -> ядро перемещает указатель в буфере (высвобождает часть), на следующем системном вызове твоё говно скопируется в освобождённую часть и процесс повторится
Это всё если ты не используешь какой-нибудь метод эвентов по типу селектов/полл/еполл, в случае с последними всё ещё проще, какая тут может быть гонка?
Аноним 19/04/24 Птн 16:28:54 3128756 84
>>3128693
Во-первых, это никак не следует из доков. Кто мешает запинить память и сразу DMA-шить в буфер юзера? Во-вторых, пусть ты сделал два асинхронных вызова в один и тот же буфер и потом позвал WaitForMultipleObjects, и оба ивента завершились одновременно. 1. Что будет в буфере? 2. Куда скопируется результат, если буфер уже дропнут или переаллоцирован?
Аноним 19/04/24 Птн 16:36:08 3128761 85
>>3128756
>ассинхронный вызов
У тебя один поток/процесс, ассинхронность через неблокирующее ио.
Аноним 19/04/24 Птн 16:45:36 3128768 86
>>3128761
Да, и? Я сделал два неблокирующих чтения в один буфер и стал ждать на ивентах. Получаем гонку в формально однопоточной приложухе. Бинго? То же самое можно получить в какой-нибудь куде.
Аноним 19/04/24 Птн 20:44:18 3129010 87
>>3125439 (OP)
аноны, остановился в изучении на теме "модули" и возник вопрос: а есть ли в природе пример, где модуль приватный? То есть, если есть код в приватном дочернем модуле - он сам не вызовется, значит его надо вызывать из родительского модуля. Но чтобы его вызвать из родительского - надо этот дочерний сделать публичным. Итого: все модули должны быть публичными?
Аноним 19/04/24 Птн 20:50:57 3129016 88
>>3129010
> а есть ли в природе пример, где модуль приватный?
Да, есть пример в астрофизике: чёрная дыра, собсна. Полностью приватна от всей остальной Вселенной. А смысл?
Аноним 19/04/24 Птн 20:56:15 3129019 89
>>3129016
так в том-то и вопрос: а зачем делать модули по умолчанию приватными? Зачем вообще вводить для модулей концепцию приватности/открытости? Чтоб перед каждым модулем писать pub?
Аноним 19/04/24 Птн 20:59:26 3129021 90
>>3129019
В растбуке это поясняется. Я уже не помню, а открывать лень. Давай ты сам откроешь.
Аноним 19/04/24 Птн 22:25:08 3129132 91
>>3129019
Для того чтобы твои юзеры не могли сломать логику твоего крейта, вызывая не те функции не в том порядке.
Аноним 19/04/24 Птн 22:26:56 3129136 92
Аноним 19/04/24 Птн 22:28:24 3129138 93
Есть ли смысл начинать изучать раст, если не планируешь долбиться в жепу?
Аноним 19/04/24 Птн 22:31:44 3129143 94
>>3129138
В свете современных реалий долбиться в жёпу или нет далеко не всегда зависит от твоих планов. Так что, однозначно учить.
Аноним 19/04/24 Птн 23:48:52 3129193 95
>>3128599
А я не очень разбираюсь в программировании на расте под MCU. Вопросы задавать тебе никто не может запретить.
Аноним 20/04/24 Суб 00:44:08 3129234 96
>>3129021
как бы и читаю - вот
>>3129010
>остановился в изучении на теме "модули" и возник вопрос
либо в другой главе (что сомнительно), либо ты не понял мой вопрос
Аноним 20/04/24 Суб 00:44:46 3129236 97
>>3129132
видимо, ты тоже не понял мой вопрос
Аноним 20/04/24 Суб 00:45:19 3129237 98
>>3129136
я только читаю растбук и пока мне это ни о чем не говорит
можно пояснить?
Аноним 20/04/24 Суб 00:56:56 3129248 99
>>3129193
Ты интересуешься растом и мк - этого достаточно
Расскажи в двух словах, если сможешь, что за RTOS такие, для чего они, как использовать. Я пока на интуиции могу сказать, что это такой код, который подключается как библиотека, используется как фреймворк, где ты вкрыпываешь свой код в точки расширения. Сам по себе предоставляет абстракции типа потока, семафороф разных. Компилится с твоим кодом в один бинарь и заливается на мк. Где прав/где фигню нагадал? Чем можешь дополнить? Еще интересует, но предположений нет: поддерживают ли эти оси сон? Ну то есть, если задачи нет - он уходит в сон, чтоб мк потреблял по минимуму или ему приходится все равно поддерживать работу rtos?
Второй вопрос: я могу писать на расте для есп32 (лежит такая, как-то игрался)? Или раст поддерживают только определенные мк? Ну то есть там же разные процессоры, разные архитектуры, под какие архитектуры может компилить раст? Или обязательно еще должна быть инструментальная поддержка пот производителя? Алсо, когда игрался с есп, где-то видел какой-то конфиг с частотами там и все такое. Это как и куда задавать, если писать на расте?
Буду рад, если сможешь ответить хоть на что-то
Аноним 20/04/24 Суб 10:21:47 3129428 100
>>3129234
> ты не понял мой вопрос
>>3129236
> ты тоже не понял мой вопрос
>>3129019
> зачем делать модули по умолчанию приватными?
Внутри одного файла вышестоящий модуль может обращаться к нижестоящему модулю, игнорируя параметры доступа, так что модуль приватен для всех, кроме модуля в том же файле. Не?
Аноним 20/04/24 Суб 12:45:13 3129531 101
>>3129428
>Внутри одного файла вышестоящий модуль может обращаться к нижестоящему модулю
нет же
и файлы вообще не при чем, тут роляет дерево модулей
Аноним 20/04/24 Суб 12:49:09 3129537 102
Аноним 20/04/24 Суб 13:04:03 3129550 103
Аноним 20/04/24 Суб 13:05:47 3129551 104
А можно для растц написать мэйк файл, чтобы не через эту ебалу каргу всё собирать?
Аноним 20/04/24 Суб 13:09:43 3129556 105
>>3129551
Можно. Но все скрипты придётся писать самому, если кто-то еще не заморочился.
Аноним 20/04/24 Суб 14:03:35 3129607 106
>>3129556
>Но все скрипты придётся писать самому
Поджавоскриптованный соевый зумерок-пидорок не палится.
Аноним 20/04/24 Суб 14:15:51 3129621 107
Аноним 20/04/24 Суб 15:21:52 3129696 108
Аноним 20/04/24 Суб 15:24:12 3129697 109
>>3129248
>Где прав/где фигню нагадал?
Всё так.
Аноним 20/04/24 Суб 16:14:37 3129723 110
>>3129248
>Где прав/где фигню нагадал? Чем можешь дополнить?
Да в в целом всё верно. Ещё могу сказать, что обычно вендор железки предоставляет Board Support Package (BSP). Это такой пакет из ОС и драйверов, с примерами. Берёшь какой-нибудь и начинаешь его под свою задачу адаптировать. Но конечно никто не мешает выбросить это всё и сделать руками, если конечно имеется вся необходимая документация.

>Еще интересует, но предположений нет: поддерживают ли эти оси сон? Ну то есть, если задачи нет - он уходит в сон, чтоб мк потреблял по минимуму или ему приходится все равно поддерживать работу rtos?
Да есть конечно. Но ты сам явно указываешь когда уйти в состояние сна. При этом нужно не забыть самому усыпить всю периферию ну и сделать какие-то действия, которые требуются в твоей конкретной системе (таски там засаспендить например, или обнулить какой-нибудь контекст).

>я могу писать на расте для есп32
да
>Ну то есть там же разные процессоры, разные архитектуры, под какие архитектуры может компилить раст?
https://doc.rust-lang.org/rustc/platform-support.html
>Алсо, когда игрался с есп, где-то видел какой-то конфиг с частотами там и все такое. Это как и куда задавать, если писать на расте?
Хз что за конфиг ты имеешь в виду. Если не с нуля писать будешь, то думаю найдёшь аналоги. Если с нуля, то читать документацию по железу.
Аноним 20/04/24 Суб 16:58:11 3129756 111
>>3129723
Спасибо, анон!
Но еще пара вопросов осталась
>Это такой пакет из ОС и драйверов
Драйверов? А что за драйвера и что они делают?
>указываешь когда уйти в состояние сна
А что для этого надо? Дергать код, который в референс мануалах к платам или ос предоставляет какуют-то абстракцию? И да, что происходит после пробуждения? Типа рестарт и запуск по новой или пытается восстановить контекст и продолжить работу с места, который останвился? Если второе, то кто за это отвечает: мк, ос?

>https://doc.rust-lang.org/rustc/platform-support.html
ох ты ж огромное тебе спасибо - тут надо курить, но есть откуда копать!
Аноним 21/04/24 Вск 14:57:08 3130627 112
>>3129756
Один только совет, не стоит на расте писать фирмвари, раст не для этого всё-таки.
Аноним 21/04/24 Вск 15:25:23 3130654 113
>>3130627
>не стоит на расте писать
Слова не мальчика, но мужа.

Алсо, на линкедине сейчас микрософт безуспешно ищет челов со знанием раста и опытом в гипервизорах. Все успели податься?
Аноним 21/04/24 Вск 20:37:05 3131005 114
>>3130627
Почему? Разве это не системный язык?
Аноним 21/04/24 Вск 20:49:43 3131023 115
>>3130627
>не стоит на расте писать фирмвари
>системный язык
ну вот все и встало на свои места, очередная джава/сисярп
Аноним 21/04/24 Вск 21:13:59 3131084 116
Как же я заебался. Я просто хочу передать референс на синглтон в ансихронный tokio::spawn блок. Но говнине это очевидно не нравится (unsafe не помогает), и похоже единственный вариант пофиксить это через Мьютекс. Но есть одно но, синглтон делает веб запросы и при любом локе застревает на секунду, а то и больше. Трейта Copy у объекта нет, async move посылает меня нахуй, я просто не знаю что мне делать
Аноним 21/04/24 Вск 21:17:52 3131090 117
>>3131084
>я просто не знаю что мне делать
писать на джаве и не выебываться
там таких проблем нет
Аноним 21/04/24 Вск 21:26:51 3131095 118
>>3129756
>Драйверов? А что за драйвера и что они делают?
Мммм, драйвер — это код, управляющий каким-нибудь периферийным устройством.
>А что для этого надо? Дергать код, который в референс мануалах к платам или ос предоставляет какуют-то абстракцию?
Вручную — это когда ты пишешь всякие значения в разные управляющие регистры процессора и других подключенных устройств. Но обычно есть какой-то HAL (hardware abstraction layer), собственно набор тех самых драйверов, который идёт в составе того самого BSP и там уже всё это написано для тебя. ОС не предоставляют таких интерфейсов. Как ты говорил, это скорее фреймворк для построения прошивки.
>И да, что происходит после пробуждения? Типа рестарт и запуск по новой или пытается восстановить контекст и продолжить работу с места, который останвился? Если второе, то кто за это отвечает: мк, ос?
Да как сам напишешь, так и будет. Только выключение/включение с восстановлением контекста называется гибернацией, а сон — это перевод процессора и периферии в энергосберегающий режим, из которого они выходят по таймауту или по какому-нибудь сигналу. Работа прошивки в таком случае не прекращается, очевидно.
Аноним 21/04/24 Вск 21:32:45 3131099 119
>>3131084
>Но есть одно но, синглтон делает веб запросы и при любом локе застревает на секунду, а то и больше.
Не понял, а чего ты хочешь? Чтобы можно было из разных потоков его дёргать одновременно и играть в русскую рулетку, когда эта конструкция развалится?
Аноним 21/04/24 Вск 21:33:01 3131100 120
>>3131084
RwLock юзай вместо мудикса.
Аноним 21/04/24 Вск 21:35:41 3131106 121
>>3131084
Ну если тебе мутировать объект не нужно то мб RwLock вместо мутекса взять? Сколько угодно читателей можно будет иметь одновременно. Ну или ещё может как вариант во время когда ты держишь лок просто дать команду синглтону чето сделать (послать запрос) и дать ему колбек который дёрнуть когда будет ответ и сразу по фасту съебаться из критической секции и снять лок. Или ещё может не давтать колбек а давать команду синглтону сделать запрос и обновить своё внутренне состояние когда будет готово и после отдачи команды снимать лока и на вызывающей стороне изредка поллить синглтон на предмет готовности результата, ну либо может не поллить а сделать через кондвар какой-нить - типа вызывающий код блокируется на кондваре а синглтон обновляет кондвар когда ответ готов
Аноним 21/04/24 Вск 21:45:35 3131112 122
>>3131084
Вдогонку

>передать референс в ансихронный tokio::spawn блок
Ясен хуй не нравится, это recipe for disaster потому что хуй знает будет ли твой референс валиден когда его величество асинхронный рантайм соизволит начать выполнять таску. В std::thread есть скоупед потоки для этого, а в токио хз. Как ты это ансейфом решать хотел? Делать сырой указатель из референса? Ну так проблема никуда не девается если ты не на 100% уверен что он будет валиден когда будешь его разименовывать его
Аноним 21/04/24 Вск 22:24:23 3131135 123
>>3131084
Раз это синглтон, не проще мувнуть его в отдельный тред, а запросы через каналы mpsc буферизированные посылать? Где-то видел такие, которые и в синк и асинк могут одновременно.
Аноним 21/04/24 Вск 22:25:18 3131138 124
>>3131095
>есть какой-то HAL
Он для каждой борды свой? То есть не универсальный, а производитель создает свой со своим набором АПИ?

>>3131095
>Да как сам напишешь, так и будет
А по умолчанию? Ну вот я ввел в сон, потом таймер стригернул - что дальше? Что делает мк? Какие инструкции, с какого месте?

>>3131095
>Работа прошивки в таком случае не прекращается
А что ты под этим имеешь в виду? Что все контексты сохранены, что все выполняется? Просто я читал про разные виды сна когда-то по-диагонали, и там процессор чуть ли не выключался, в работе оставался таймер. То есть ты хочешь сказать, что при пробуждении по таймеру, например, автоматически платой в кэш загрузится все то, что было до сна, стэки тоже и процессор просто продолжит оттуда, откуда остановился? Не очень понимаю как это в коде выглядит... Он продолжит выполнять все то, что идем после вызова sleep()?
Аноним 21/04/24 Вск 23:09:21 3131171 125
>>3131135
Если честно не знаю как это должно работать, потому что запрос у меня блокирует поток пока не резолвнется. Поэтому и раскидал параллельные запросы по потокам. Сделал через RwLock как тут советовали, в принципе нормально, спасибо анонам
Аноним 22/04/24 Пнд 00:04:10 3131186 126
image.png 296Кб, 952x760
952x760
Коллеги, жизненно?
Аноним 22/04/24 Пнд 01:17:40 3131200 127
>>3131186
Пост писал трансфоб
Аноним 22/04/24 Пнд 11:09:33 3131397 128
Аноним 22/04/24 Пнд 13:11:19 3131591 129
>>3131186
Бери токио и не еби мозги
Аноним 22/04/24 Пнд 13:44:34 3131628 130
>>3131084
>>3131397
Вообще считаю синглтон антипаттерном.
Аноним 22/04/24 Пнд 14:41:21 3131713 131
>>3131186
>try_get()::unwrap()
Теперь это не РЯЯ_АНСЕЙФ язык а UNWRAP()::UNWRAP().
Аноним 22/04/24 Пнд 14:42:48 3131716 132
>>3131186
>sleep
>spin_lock
Мне вот интересно, чем думал Линус пуская этих вредителей в ядро.
Аноним 22/04/24 Пнд 14:57:09 3131749 133
>>3131716
Шиз спок, это не стандартная либа а рандомная хуитка с крейтс.ио
Аноним 22/04/24 Пнд 18:16:51 3132029 134
Аноним 22/04/24 Пнд 18:38:03 3132057 135
>>3132029
Ты неправильно шутишь, лучше так:

- Причина паники?
- ".unwrap()"
Аноним 22/04/24 Пнд 18:46:41 3132072 136
>>3131397
У меня в целом похоже, но вместо Box у меня Arc::new(RwLock::new(worker))
Аноним 22/04/24 Пнд 20:41:30 3132215 137
Аноним 22/04/24 Пнд 23:40:08 3132343 138
>>3132215
>Причина гонки?
Лучший.
Аноним 23/04/24 Втр 01:51:40 3132407 139
>>3131138
>Он для каждой борды свой? То есть не универсальный, а производитель создает свой со своим набором АПИ?
Да есть конечно попытки сделать что-то универсальное. Но лично я отношусь к этому как кроссплатформенной разработке десктопных приложений. Прекрасная утопия. Для несложных проектов наверное применимо, но как только что-то посложнее делаешь, то приходится жрать, что китайцы дают в проприетарном виде без доков...
>А по умолчанию? Ну вот я ввел в сон, потом таймер стригернул - что дальше? Что делает мк? Какие инструкции, с какого месте?
Ну вот следующую инструкцию и продолжит делать, после обработки прерывания, которое пробудило устройство. Но от железки зависит конечно в первую очередь, сложно говорить за все. Возможно может потребоваться нетривиальное восстановление контекста, которое слишком долго делать в обработчике прерывания.
>Просто я читал про разные виды сна когда-то по-диагонали, и там процессор чуть ли не выключался, в работе оставался таймер.
Это действительно так. В популярном кортексе например их парочка и вендоры ещё бывают свои добавляют. Чем экономичнее режим тем меньше он отличается от полного выключения.
>То есть ты хочешь сказать, что при пробуждении по таймеру, например, автоматически платой в кэш загрузится все то, что было до сна, стэки тоже и процессор просто продолжит оттуда, откуда остановился?
Как писал, зависит от режима и железа. Если говорить про тот же кортекс, то обычно ничего там никуда во сне не девается. Т.е. оперативка хранит содержимое, регистры тоже. Обработали прерывание и вперёд, дальше молотить.

Вообще, я если честно слабовато эту тему знаю. Сейчас порылся по коду проекта, над которым сейчас работаю, так там WFI (инструкция, которая переводит в режим сна) есть и в HALе и в ядре RTOS. Напиздел я получается, насчёт того что в ОС не бывает. Я правда глубоко не стал лезть, используется ли у нас где-то сон из FreeRTOS. Возможно там разница как раз в выборе режима, типа FreeRTOS переводит проц в обычный sleep при необходимости, например, когда все таски заблокированы. Deep sleep из HALа точно ручками дёргаем.
Аноним 23/04/24 Втр 03:44:58 3132418 140
>>3132407
Понял, спасибо тебе, анон
А проект на расте или ты просто растолюбитель?
Аноним 23/04/24 Втр 03:52:04 3132421 141
>>3125439 (OP)
Аноны, сейчас очень сонный, возможно пишу бредовый вопрос, но изучая раст, тестил разный свой код, проверял идейки и нагенерил вот это: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=807d460d9c7a5d3d94f3bd43449927ed
Объясните мне, плз: правильно ли я понимаю, что тут одной строкой владеют два объекта? Интуиция подсказывает, что такого быть не может, так как по правилам владения раста владеть объектом может кто-то один, но я тут вижу одну строку и ДВЕ переменные b, которые владеют одной строкой
Помогите решить внутренний спор
Аноним 23/04/24 Втр 04:21:49 3132426 142
Аноним 23/04/24 Втр 11:59:13 3132661 143
>>3132418
Основной проект на С, но есть небольшие сопровождающие разработки на расте (не под микроконтроллеры). Сам раст ковыряю для общего развития пока, очень интересный и кайфовый язык.

>>3132421
>>3132426
Вкину свои 5 копеек, вдруг кому-то другому будет интересно. В расте есть механизм pattern matching, который тут применяется. Довольно мощная штука, которая используется не только в ветках match, а по сути при любом объявлении переменной. Она позволяет деструктуризацию образца. При этом владение данными передаётся по общим правилам раста, для чего используются ключевые слова ref и mut, например:

if let Foo(bar) = foo {... // <- передача владением
if let Foo(ref bar) = foo {... // <- заимствование по неизменяемой ссылке
if let Foo(ref mut bar) = foo {... // <- заимствование по изменяемой ссылке

Для удобства, если образец, который ты сопоставляешь, сам является ссылкой, то и связывание происходит по ссылке:
https://doc.rust-lang.org/reference/patterns.html#binding-modes

Таким образом в первом match у тебя a связывается по ссылке, как и b и таких алиасов может быть в данном случае сколько угодно. А во втором match уже происходит передача владения значением сначала в a, а потом в b.
Аноним 24/04/24 Срд 19:49:58 3134234 144
Раст хвастались своей безопасностью, а оказалось, что все программы для Windows, написанные на расте, содержат критический баг.
Аноним 24/04/24 Срд 20:13:41 3134268 145
>>3134234
> содержат критический баг
Ржавчину?
Аноним 24/04/24 Срд 21:07:32 3134297 146
17045791342250.jpg 196Кб, 686x686
686x686
> The vulnerability, which carries a perfect 10-out-of-10 CVSS severity score, is tracked as CVE-2024-24576. It affects the Rust standard library, which was found to be improperly escaping arguments when invoking batch files on Windows using the library's Command API – specifically, std::process::Command.
Сперма.
Аноним 24/04/24 Срд 21:20:06 3134311 147
>>3134297
> критический баг в std
Никогда такого не было и вот опять. Прям чувствую безопасность.
> improperly escaping arguments
Там вообще ебучий цирк с конями в std под виндой, как будто студенты писали. Например тот же принт, конвертирующий два раза строку из utf-8 в utf-16, вместо вызова SetConsoleCP. Это сразу было понятно, что снизив уровень входа с помощью "безопасности", пришедшие питонисты начнут писать такое забагованное говно, что нейросети позавидуют.
Аноним 24/04/24 Срд 22:36:37 3134387 148
>>3132661
Спасибо.
Я об этом в растбуке читал, но вдруг кто-то не читал.
Аноним 25/04/24 Чтв 00:10:00 3134453 149
>>3134311
>растоделы набажили в стандартной библиотеке
>чертовы питонисты
Аноним 25/04/24 Чтв 09:37:05 3134687 150
>>3134311
>Например тот же принт, конвертирующий два раза строку из utf-8 в utf-16, вместо вызова SetConsoleCP

В API винды поддержка utf8 появилась примерно вчера, и работает через жопу.
Аноним 25/04/24 Чтв 11:20:51 3134799 151
>>3134687
> В API винды поддержка utf8 появилась примерно вчера
XP вчера появился? Ну ладно. CP65001 в консольке как минимум с Висты работает, в XP он тоже был, но я не возьмусь утверждать что cmd.exe корректно шрифты рендерил.
> работает через жопу
Если речь про вывод в консольку, то он работает как часы, никаких проблем нет. Проблемы могут быть только если ты при включенном CP65001 станешь выводить UTF-16 туда.
Претензия к реализации раста в том что у него всё к UTF-8 прибито гвоздями. То что он в рантайме каждую строку конвертит - это пиздец костыли. Я ещё понял бы если он поддерживал UTF-16 строки и можно было бы без конверсии их использовать, но ведь нет.
Аноним 25/04/24 Чтв 11:56:37 3134819 152
Аноним 25/04/24 Чтв 12:05:58 3134835 153
>>3134799
https://learn.microsoft.com/ru-ru/windows/apps/design/globalizing/use-utf8-code-page

Чтобы винда правильно поняла твою кодировку, нужно указать параметр в какой-то ебать её в сраку эксемельке. То есть, если приложение линкуешь не ты, а просто передаёшь свою либу, то может оказаться, что там настроен какой-нибудь EBCDIC, а твой текст выглядит как даэдрические письмена. И даже не весь WinAPI умеет с этим работать, и иногда всё-равно придется мудиться с этим преобразованием.
Аноним 25/04/24 Чтв 12:20:34 3134848 154
Как уменьшить размер бинарника с 500Кб до 16Кб?
Аноним 25/04/24 Чтв 12:21:35 3134849 155
>>3134819
И куда ты её деть сможешь? Даже принт не примет её. И она всё так же в рантайме работает, конвертируя строки в UTF-8.
>>3134835
> указать параметр в какой-то ебать её в сраку эксемельке
Чел, у тебя документация от WindowsApps, очнись. Это никакого отношения к WinAPI не имеет. Ты бы ещё UWP притащил сюда.
> То есть
То есть ты бредишь, одним вызовом функции консолька переводится в нужную кодировку. Вот правильное место в документации:
https://learn.microsoft.com/en-us/windows/win32/intl/unicode
> И даже не весь WinAPI умеет с этим работать
Ему строго поебать как и чем строка закодирована. Передашь UTF-8 - он будет с UTF-8 работать. Для WinAPI строка это просто указатель на чар.
> придется мудиться с этим преобразованием
Только если в UTF-16 строка. Чем собственно в расте и занимаются, когда можно было не делать этого.
Аноним 25/04/24 Чтв 13:18:21 3134927 156
image 271Кб, 640x640
640x640
Аноним 25/04/24 Чтв 13:40:49 3134951 157
>>3134848
Пиши на языке, который ближе к железу.
Аноним 25/04/24 Чтв 13:50:28 3134958 158
16820248503090.mp4 10001Кб, 352x640, 00:00:21
352x640
>>3134848
UPX здесь не поможет
Аноним 25/04/24 Чтв 14:08:36 3134966 159
>>3134849
>Чел, у тебя документация от WindowsApps, очнись. Это никакого отношения к WinAPI не имеет. Ты бы ещё UWP притащил сюда.

У WindowsApps какое-то отдельное WinAPI?

>То есть ты бредишь, одним вызовом функции консолька переводится в нужную кодировку

А когда вызывать эту функцию? Ты закинул DLL'ку в папку и она каждый раз, когда хочет что-то высрать, твою консоль перенастраивает?

>Для WinAPI строка это просто указатель на чар.
Ну здрасьте приехали. И зачем тогда каждый вызов дублируется с суффиксом A и W, зачем нужны локали, чем Windows-1251 отличается от CP-866?
Аноним 25/04/24 Чтв 14:24:58 3134969 160
>>3134966
> У WindowsApps какое-то отдельное WinAPI?
Это вообще совершенно разные вещи. WindowsApps - это свежее крестовое API из 11 винды.
> И зачем тогда каждый вызов дублируется с суффиксом A и W
Затем что в винде есть UTF-16 и всё остальное, сделано для совместимости с однобайтным легаси времён начала нулевых. Всё остальное под А, работает в заданной кодировке, если кодировка указана как UTF-8, то оно и будет.
Аноним 25/04/24 Чтв 15:27:16 3135030 161
>>3134969
>Это вообще совершенно разные вещи. WindowsApps - это свежее крестовое API из 11 винды.

И зачем в описании для 11 винды упоминается какой-то левый апдейт для 10? Может потому что это на самом деле обертка над winapi?

>Всё остальное под А, работает в заданной кодировке, если кодировка указана как UTF-8, то оно и будет.

Иными словами, UTF16 - всё также остаётся основной кодировкой, а UTF8 - это бедный родственник, который зависит от глобального состояния или манифестов, которые хер знает кто выставляет и может поменять в любой момент. Я прямо уверен, что винда делает такую же конвертацию, что std Раста.
Аноним 25/04/24 Чтв 15:45:24 3135046 162
>>3135030
> Может потому что это на самом деле обертка над winapi?
Нет. Это уже то, на чём встроенный виндовый софт пишется в 11 винде, там WinAPI не используется вообще, это легаси.
> Иными словами
Иными словами ты нихуя не понял.
> UTF8 - это бедный родственник, который зависит от глобального состояния или манифестов
Глобальное окружение и манифесты - это каким будет дефолт. Контроль за кодировками у софта.
> Я прямо уверен, что винда делает такую же конвертацию
Чел, я тебе даже кидал ссылку из документации WinAPI, там нативная поддержка UTF-8. Алсо, виндовый терминал который в 11 винде по умолчанию в WSL окружении переключает вывод в UTF-8 и оставляет линуксовый выхлоп как есть, а не занимается хуитой как растаны с конверсией в UTF-16.
Аноним 25/04/24 Чтв 15:52:25 3135051 163
У меня вопрос, если всех заебал сишный УБ, хочется писать действительно надёжный софт, хули вы побежали на дырявый раст для пидоров, а не выбрали мужскую Аду? Трансовики, оправдывайтесь.
Аноним 25/04/24 Чтв 16:06:44 3135066 164
Подставляйте очко.
Аноним 25/04/24 Чтв 16:35:22 3135115 165
Screenshot20240[...].png 367Кб, 1440x3120
1440x3120
>>3135051
>а не выбрали мужскую Аду?
Это говно уже окаменело.
Аноним 25/04/24 Чтв 16:37:25 3135120 166
>>3135115
Один абзац текста и 5 абзацев предупреждений. Я такое говно только в консультант+ видел: параграф ХХХ утратил силу.
Аноним 25/04/24 Чтв 16:46:38 3135140 167
>Это говно уже окаменело.
>Один абзац текста и 5 абзацев предупреждений. Я такое говно только в консультант+ видел
Какие же пидорасты долбоёбы пиздец. Бегом писать прошивки для баттплаг.ио.
Аноним 25/04/24 Чтв 17:14:12 3135201 168
Аноним 25/04/24 Чтв 17:26:49 3135219 169
>>3135140
Пукнул и слился. Ясно.
мимо мейнтейнер баттплаг.ио
Аноним 25/04/24 Чтв 18:41:55 3135301 170
>>3135046
> Нет. Это уже то, на чём встроенный виндовый софт пишется в 11 винде, там WinAPI не используется вообще, это легаси.
Зуб даёшь? Я ведь сейчас в репу залезу и проверю как они винапи не юзают.
Аноним 25/04/24 Чтв 19:31:40 3135380 171
1684262401757.png 254Кб, 1972x1732
1972x1732
>>3135301
Ну давай. Пикрилейтед в самом SDK, WinAPI там используют только для разработки - в юнит-тестах и при логировании, на случай когда что-то отъебнёт. В сорсах естественно оригинальное WinAPI не трогают, частично оно переписано на крестах для обратной совместимости. Ну и там белым по чёрному написано - первым делом удаляйте все хедеры и либы WinAPI и заменяйте на WindowsApps.
Ответить в тред Ответить в тред

Check this out!

Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов